3. Installing ROS2 Jazzy (การติดตั้ง ROS2 Jazzy)

ในบทนี้ เราจะเข้าสู่ขั้นตอนสำคัญคือการติดตั้ง "สมอง" ให้กับหุ่นยนต์ นั่นคือ ROS2 Jazzy Jalisco ลงบนระบบปฏิบัติการ Ubuntu 24.04 พร้อมทั้งทำความเข้าใจว่าทำไมเราถึงเลือกใช้เครื่องมือชุดนี้

3.1. Why ROS2? (ทำไมต้อง ROS2)

คำถามแรกที่ผู้เริ่มต้นมักสงสัยคือ "ทำไมต้องใช้ ROS? ในเมื่อเราก็เขียน Python หรือ C++ สั่งงานบอร์ดไมโครคอนโทรลเลอร์โดยตรงได้อยู่แล้ว"

เพื่อตอบคำถามนี้ เราต้องทำความเข้าใจนิยามที่แท้จริงของมันก่อน

ROS (Robot Operating System) ไม่ใช่ระบบปฏิบัติการ (OS) ที่จะมาแทนที่ Windows หรือ Linux และไม่ใช่โปรแกรมสำเร็จรูปเหมือน Microsoft Word แต่มันคือ "Middleware" (ตัวกลาง) หรือ "Framework" ที่รวบรวมเครื่องมือ ชุดคำสั่ง (Libraries) และมาตรฐานการสื่อสารสำหรับการสร้างหุ่นยนต์ไว้ครบถ้วน

3.1.1. The Problem: "Reinventing the Wheel" (การเสียเวลาสร้างล้อใหม่)

สมมติว่าท่านต้องการสร้าง "หุ่นยนต์เสิร์ฟอาหาร" หนึ่งตัว หากไม่ใช้ ROS ท่านจะต้องเขียนโค้ดมหาศาลเพื่อจัดการเรื่องพื้นฐานเหล่านี้เองทั้งหมด:

  1. เขียน Driver เพื่อคุยกับเซนเซอร์ Lidar ยี่ห้อ A

  2. เขียนโปรแกรมเพื่อสั่งมอเตอร์ Driver ยี่ห้อ B

  3. ออกแบบโปรโตคอลเพื่อให้คอมพิวเตอร์คุยกับกล้อง

  4. เขียนระบบนำทาง (Navigation) และหลบสิ่งกีดขวางใหม่ตั้งแต่ศูนย์

ผลลัพธ์คือ ท่านจะหมดเวลา 90% ไปกับการ "เตรียมอุปกรณ์" และเหลือเวลาเพียง 10% ในการพัฒนา "ความฉลาด" ของหุ่นยนต์จริงๆ และถ้าวันหนึ่งท่านเปลี่ยนยี่ห้อ Lidar ท่านก็ต้องรื้อโค้ดเขียนใหม่ทั้งหมด

3.1.2. The Solution: ROS2 as a "Universal Translator"

ROS2 เข้ามาแก้ปัญหานี้โดยการทำตัวเป็น "ล่ามแปลภาษา" กลางครับ

  • Hardware Abstraction: ไม่ว่าท่านจะใช้ Lidar ยี่ห้อไหน หรือมอเตอร์รุ่นอะไร ผู้ผลิตมักจะเตรียม ROS2 Driver มาให้แล้ว หน้าที่ของท่านคือแค่โหลดมาใช้ ข้อมูลที่ออกมาจะเป็นมาตรฐานเดียวกันหมด (เช่น ข้อมูลระยะทางจะออกมาเป็น LaserScan เสมอ)

  • Focus on Application: เมื่อไม่ต้องห่วงเรื่องฮาร์ดแวร์ ท่านสามารถเอาเวลาไปโฟกัสที่ Logic สำคัญได้เลย เช่น "ถ้าเจอลูกค้า ให้หยุดและทักทาย" หรือ "เดินไปโต๊ะ 5 โดยหลบเก้าอี้"

  • Reuse Capability: โค้ดระบบนำทาง (Navigation Stack) ที่วิศวกรระดับโลกจาก NASA หรือ Intel เขียนไว้ ถูกเปิดเป็น Open Source ให้เราดึงมาใช้กับหุ่นยนต์ของเราได้ทันที

3.1.3. ตัวอย่างการใช้งานจริง (Use Cases)

ปัจจุบัน ROS2 ไม่ได้อยู่แค่ในห้องทดลองมหาวิทยาลัย แต่เป็นมาตรฐานอุตสาหกรรมที่บริษัทยักษ์ใหญ่เลือกใช้:

  • Logistics & Warehouse: หุ่นยนต์ AMR (Autonomous Mobile Robot) ที่วิ่งขนของในโกดังสินค้าของ Amazon หรือ Alibaba ล้วนใช้สถาปัตยกรรมแบบ ROS เพื่อจัดการจราจรหุ่นยนต์นับร้อยตัว

  • Self-Driving Cars: รถยนต์ไร้คนขับหลายค่ายใช้ ROS2 ในการจัดการข้อมูลมหาศาลจากกล้องและเรดาร์ เพื่อประมวลผลแบบ Real-time

  • Agriculture: โดรนพ่นยา หรือรถไถนาอัตโนมัติ ใช้ ROS2 เพื่อระบุพิกัด GPS และควบคุมเส้นทางการวิ่งในแปลงเกษตร

3.1.4. สรุป: ทำไมต้องเรียน?

การเขียนโค้ดคุมหุ่นยนต์แบบเดิม (Bare-metal) เหมือนการ "สร้างบ้านโดยต้องปั้นอิฐเองทีละก้อน" แต่การใช้ ROS2 เปรียบเสมือนการ "สร้างบ้านด้วยชิ้นส่วนสำเร็จรูป" ที่มีคุณภาพสูง ทำให้เราสร้างหุ่นยนต์ที่ซับซ้อนและฉลาดได้ในเวลาอันสั้น

3.1.5. ROS1 vs ROS2

ในอดีต ROS1 ถูกออกแบบมาเพื่องานวิจัยในห้องแล็บ (Academic Research) ทำให้มีข้อจำกัดเมื่อนำไปใช้จริงในเชิงพาณิชย์ โดยเฉพาะเรื่องความเสถียรและการรองรับหุ่นยนต์หลายตัวทำงานร่วมกัน

ROS2 จึงถูกพัฒนาขึ้นมาใหม่ทั้งหมด (Re-written) เพื่อแก้ปัญหาเหล่านั้น โดยมีจุดเด่นคือ:

  • No Master Node: ROS2 ไม่มี "หัวหน้าห้อง" ที่คอยคุมระบบ (Master) เหมือน ROS1 ทำให้ระบบมีความทนทานสูงกว่า (Decentralized) ถ้า Node หนึ่งพัง ระบบที่เหลือก็ยังทำงานต่อได้

  • DDS (Data Distribution Service): ใช้มาตรฐานการสื่อสารระดับอุตสาหกรรม ทำให้รับส่งข้อมูลได้รวดเร็วและเสถียร (Real-time Capability)

  • Multi-Platform: รองรับทั้ง Ubuntu, Windows และ macOS

  • Scalability: รองรับตั้งแต่หุ่นยนต์ตัวเล็กๆ (Micro-ROS) ไปจนถึงหุ่นยนต์ขนาดใหญ่ในโรงงานอุตสาหกรรม (Industrial Arms, Autonomous Vehicles) หรือฝูงหุ่นยนต์ (Swarm Robotics)

3.2. Ubuntu and ROS2 Versions (ความสัมพันธ์ของเวอร์ชัน)

การเลือกเวอร์ชันของ ROS2 ต้องสอดคล้องกับเวอร์ชันของ Ubuntu ที่เราใช้ โดยเราจะเน้นรุ่นที่เป็น LTS (Long Term Support)

3.2.1. อะไรคือ LTS?

LTS ย่อมาจาก Long Term Support หมายถึงเวอร์ชันที่จะได้รับการดูแล อัปเดตความปลอดภัย และแก้บั๊กยาวนานถึง 5 ปี ซึ่งเหมาะสำหรับการพัฒนาโปรดักส์เพื่อขายจริง (Production) เพราะระบบจะนิ่งและเสถียร

3.2.2. ตารางจับคู่เวอร์ชัน (Compatibility Map)

  • Ubuntu 20.04 \(\leftrightarrow\) ROS2 Foxy (เก่า, หมดระยะ Support แล้ว)

  • Ubuntu 22.04 \(\leftrightarrow\) ROS2 Humble (นิยมมาก, เป็น LTS ตัวก่อนหน้า)

  • Ubuntu 24.04 \(\leftrightarrow\) ROS2 Jazzy (ล่าสุด, เป็น LTS ที่เราจะใช้ในคอร์สนี้ Support ถึงปี 2029)

3.2.3. ROS 2 Rolling Ridley คืออะไร?

Rolling Ridley คือเวอร์ชัน "สนามเด็กเล่น" สำหรับนักพัฒนา (Development Distribution) โดยมีสถานะพิเศษดังนี้:

  1. เป็น Dev ตลอดกาล: ชื่อ "Rolling Ridley" จะถูกใช้ถาวร ไม่มีการเปลี่ยนชื่อตามปีและไม่มีวันกลายเป็นตัว Stable

  2. อัปเดตรายวัน (Bleeding Edge): เป็นที่รวมโค้ดและฟีเจอร์ใหม่ล่าสุดที่มีการเปลี่ยนแปลงทุกวัน จึง ไม่เสถียร และไม่เหมาะกับการใช้งานจริง

  3. ต้นกำเนิดของรุ่น Stable: เวอร์ชันปกติที่เราใช้ (เช่น Humble, Jazzy) เกิดจากการดึงโค้ด (Branch) จาก Rolling ณ ช่วงเวลานั้นออกมาตั้งชื่อใหม่และแช่แข็งฟีเจอร์ (Freeze) เพื่อเน้นความเสถียร ส่วน Rolling ก็จะเดินหน้าพัฒนาของใหม่ต่อไป

สรุป:

  • Rolling Ridley = ของใหม่ล่าสุด (Dev), เปลี่ยนแปลงตลอด, เสี่ยงบั๊ก

  • Jazzy / Humble = ของนิ่ง (Stable), แช่แข็งฟีเจอร์แล้ว, เหมาะกับงานจริง

3.3. Installation Guide (ขั้นตอนการติดตั้ง)

เราจะทำการติดตั้ง ROS2 Jazzy บน Ubuntu 24.04 โดยอ้างอิงจาก Official Documentation

3.3.1. Step 1: Set Locale (ตั้งค่าภาษา)

ต้องตรวจสอบให้แน่ใจว่าระบบรองรับ UTF-8 เพื่อป้องกันปัญหาการแสดงผลข้อความ

# Check for UTF-8
locale  

# Update locale to UTF-8 (if needed)
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

# Check again
locale

3.3.2. Step 2: Setup Sources (การเพิ่มแหล่งดาวน์โหลด)

นี่คือขั้นตอนที่มักเกิดปัญหา "GPG Key Error" บ่อยที่สุด หากใช้วิธีเก่า

เราจะใช้วิธีมาตรฐานใหม่ โดยการดาวน์โหลด Key ไปเก็บไว้ใน /usr/share/keyrings โดยตรง ซึ่งปลอดภัยและจัดการง่ายกว่า

# 1. Enable Ubuntu Universe Repository
sudo apt install software-properties-common
sudo add-apt-repository universe

# 2. Update and install curl
sudo apt update && sudo apt install curl -y

# 3. Download GPG Key (Crucial Step for Security)
# This command stores the key safely in the keyrings folder
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

# 4. Add ROS2 Repository to your sources list
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

3.3.3. Step 3: Install ROS2 Packages & Dev Tools (เริ่มติดตั้ง)

หลังจากเพิ่มแหล่งดาวน์โหลดแล้ว เราจะทำการติดตั้งแพ็กเกจหลักของ ROS2 และชุดเครื่องมือสำหรับนักพัฒนา (Development Tools) เพื่อให้สามารถเขียนโค้ดและสร้างโปรเจกต์เองได้

# 1. Update apt repository caches
sudo apt update
sudo apt upgrade

# 2. Install ROS2 Desktop (Includes ROS, RViz, demos, tutorials)
# This is the core system and visualization tools
sudo apt install ros-jazzy-desktop

# 3. Install Development Tools (Compilers & Build System)
# This package includes Colcon, Rosdep, and other essential tools
sudo apt install ros-dev-tools

คำอธิบายเพิ่มเติม:

  • ros-jazzy-desktop: คือชุดโปรแกรมหลัก ประกอบด้วยแกนกลาง ROS2 และโปรแกรมแสดงผลอย่าง Rviz2

  • ros-dev-tools: คือกล่องเครื่องมือช่าง ประกอบด้วย colcon (ตัวช่วย Build โค้ด), rosdep (ตัวช่วยติดตั้ง Library เสริม) และคอมไพเลอร์ต่างๆ ที่จำเป็นต่อการสร้าง Robot Node

3.3.4. Step 4: Initialize rosdep (ตั้งค่าระบบจัดการ Library)

ก่อนจะเริ่มเขียนโปรแกรม เราต้องตั้งค่า rosdep ซึ่งเป็นเครื่องมือสำคัญที่ช่วยตรวจสอบและติดตั้ง Library ที่ขาดหายไปโดยอัตโนมัติ

# 1. Initialize rosdep sources
sudo rosdep init

# 2. Update the database (Do not use sudo here)
rosdep update

Tip

Pro Tip: หากเจอ Error เกี่ยวกับ Key (เช่น NO_PUBKEY หรือ Key Expired) ระหว่างการสั่ง update ใน Step 3 ให้ลองรันคำสั่งในขั้นตอนที่ 2 (Download GPG Key) ใหม่อีกครั้ง เพื่อดึง Key ล่าสุดมาทับตัวเดิม

ทำความรู้จักกับ ros-dev-tools (มันคืออะไร?)

สำหรับผู้ที่เคยศึกษา ROS2 จากแหล่งข้อมูลอื่นหรือเวอร์ชันเก่า (เช่น Humble) อาจจะคุ้นเคยกับคำสั่งติดตั้งที่ยาวเหยียด เช่น: sudo apt install python3-colcon-common-extensions python3-rosdep python3-vcstool ...

ในเวอร์ชันใหม่ (Jazzy) ทางผู้พัฒนาได้รวบรวมเครื่องมือเหล่านั้นมัดรวมกันเป็นแพ็กเกจเดียวชื่อ ros-dev-tools เพื่อความสะดวกครับ โดยภายในประกอบด้วยเครื่องมือสำคัญดังนี้:

Package Name

Description

Colcon

(python3-colcon-common-extensions) เครื่องมือสำหรับ Build โค้ด (ใช้แทน catkin_make ใน ROS1)

Rosdep

(python3-rosdep) เครื่องมือสำหรับตรวจสอบและติดตั้ง Dependency (Library ที่ขาดหายไป)

VCS Tool

(python3-vcstool) เครื่องมือจัดการ Version Control สำหรับดึงโค้ดจากหลายๆ Repo พร้อมกัน

Build Essentials

(build-essential, cmake, git) ชุดคอมไพเลอร์พื้นฐานของ Linux (GCC, G++) ที่จำเป็นต่อการแปลงโค้ด C++

3.4. Environment Setup (การตั้งค่าสภาพแวดล้อม)

เมื่อติดตั้งเสร็จแล้ว เราจะยังเรียกใช้คำสั่ง ros2 ไม่ได้ จนกว่าจะทำการ Source ไฟล์ตั้งค่าก่อน

3.4.1. แบบชั่วคราว (Temporary)

ใช้ได้เฉพาะใน Terminal ที่เปิดอยู่ เมื่อปิดหน้าต่างไป ค่าจะหายไป

source /opt/ros/jazzy/setup.bash

3.4.2. แบบถาวร (Permanent) - แนะนำ

สั่งให้เครื่องรันคำสั่ง Source ทุกครั้งที่เราเปิด Terminal ใหม่ โดยการเอาไปแปะไว้ในไฟล์ .bashrc

# Add source command to .bashrc
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc

# Reload .bashrc immediately
source ~/.bashrc

3.5. Verify Installation (ทดสอบระบบ)

ลองทดสอบระบบโดยใช้โปรแกรมตัวอย่าง Talker/Listener

  1. เปิด Terminal ช่องที่ 1 แล้วรันคำสั่งสร้างผู้ส่งข้อมูล (Talker)

    ros2 run demo_nodes_cpp talker
    
  2. เปิด Terminal ช่องที่ 2 แล้วรันคำสั่งสร้างผู้รับข้อมูล (Listener)

    ros2 run demo_nodes_py listener
    

ผลลัพธ์: หากติดตั้งสมบูรณ์ ท่านจะเห็นข้อความ Hello World: ... วิ่งขึ้นที่หน้าจอทั้งสองฝั่ง แสดงว่า ROS2 พร้อมใช้งานแล้ว