ROS 2 สำหรับหุ่นยนต์เคลื่อนที่

สอนตั้งแต่ยังไม่เคยใช้ ROS 2 มาก่อน จนต่ออุปกรณ์จริงให้หุ่นวิ่งได้เอง

Note

เขียนเสร็จแล้ว 11 หัวข้อ — ส่วนที่ 1 ครบทั้ง 10 และหัวข้อ 11 ของส่วนที่ 2 กดที่ชื่อหัวข้อเพื่ออ่าน · หัวข้อ 12–18 ยังเป็นแผน

เขียนให้ใครอ่าน

คนที่มีอุปกรณ์อยู่ในมือแล้ว และต้องการให้มันขยับด้วย ROS 2 — วิศวกรที่กำลังประกอบ AGV/AMR เอง หรือทีมที่ย้ายจากระบบเดิมมาใช้ ROS 2

ไม่ต้องเคยใช้ ROS มาก่อน แต่ควรใช้ Linux พื้นฐานได้ (เปิด terminal · cd · ls · แก้ไฟล์)

ส่วนที่ 1 — ปูพื้นฐาน

เป้าหมายของส่วนนี้คือ อ่านออกว่าระบบกำลังทำอะไรอยู่ ยังไม่ต้องต่ออุปกรณ์อะไรทั้งสิ้น ใช้แค่คอมเครื่องเดียว

#

หัวข้อ

จะครอบคลุม

1

ROS 2 คืออะไร และเมื่อไหร่ที่ไม่ต้องใช้

ปัญหาที่ ROS แก้ให้ · ราคาที่ต้องจ่าย · งานแบบไหนเขียนตรง ๆ ง่ายกว่า

2

ติดตั้ง Ubuntu กับ ROS 2

เลือกรุ่นให้ตรงกัน · ติดตั้ง Humble · ตรวจว่าใช้ได้จริงก่อนไปต่อ

3

node · topic · message

ลองด้วย turtlesim ให้เห็นภาพก่อน · ใครส่ง ใครรับ · ข้อมูลไหลทางไหน

4

เครื่องมือบรรทัดคำสั่ง

ros2 node · ros2 topic · ros2 param · rqt_graph — ใช้ตรวจว่าระบบเป็นยังไง

5

workspace กับ package แรก

colcon build · โครงโฟลเดอร์ · source ที่ลืมแล้วงงทุกครั้ง

6

เขียน publisher กับ subscriber

node แรกที่เขียนเอง (Python) · รับค่าจาก node อื่นมาใช้

7

launch file กับ parameter

เปิดหลาย node พร้อมกัน · แยกค่าตั้งออกเป็น YAML · เปลี่ยนค่าโดยไม่แก้โค้ด

8

tf2 — กรอบพิกัด

mapodombase_link → เซ็นเซอร์ · ทำไมหุ่นเคลื่อนที่ขาดเรื่องนี้ไม่ได้

9

RViz

ดูอะไรได้บ้าง · ตั้งค่าให้เห็นสิ่งที่ต้องการ · ใช้หาสาเหตุเวลาผิดพลาด

10

QoS — กับดักที่เจอกันมากที่สุด

ทำไม "ดูปกติแต่ไม่มีข้อมูล" · sensor data กับ reliable ต่างกันตรงไหน

ส่วนที่ 2 — ต่อกับอุปกรณ์จริง

Tip

หัวข้อ 10 มาไว้ท้ายส่วนพื้นฐานโดยตั้งใจ — เป็นสาเหตุอันดับต้น ๆ ที่ทำให้คนเพิ่งเริ่ม ติดอยู่นานเป็นวัน ทั้งที่โค้ดถูกหมด ros2 topic list เห็นชื่อ topic แต่ ros2 topic echo ไม่มีอะไรออกมา

ส่วนที่ 2 — ต่อกับอุปกรณ์จริง

Important

🔒 ส่วนนี้สำหรับลูกค้าที่ซื้ออุปกรณ์กับทางร้าน — ต้องใส่รหัสก่อนเข้าอ่าน ติดต่อขอรหัสได้ที่ร้าน ส่วนที่ 1 ข้างบนอ่านได้ฟรีไม่ต้องใช้รหัส

เนื้อหาส่วนนี้อ้างอิงสเปกและค่าตั้งของอุปกรณ์ที่ทางร้านจำหน่ายโดยตรง

เรียงตามลำดับการประกอบหุ่นยนต์จริง — ทำให้ล้อหมุนก่อน แล้วค่อยให้มันรู้ว่าตัวเองอยู่ไหน

#

หัวข้อ

จะครอบคลุม

11

ทำให้ล้อหมุนก่อน

ต่อไดรฟ์/มอเตอร์ผ่าน RS485 · ส่งคำสั่งความเร็วจาก ROS 2 · ตรวจว่าหมุนถูกทาง

12

odometry จาก encoder

อ่านค่า encoder · แปลงเป็น /odom · ตั้ง tf odom base_link · จูนให้ระยะตรงกับที่วัดจริง

13

โครงหุ่นยนต์ (URDF)

วางตำแหน่งล้อและเซ็นเซอร์ · robot_state_publisher · ดูใน RViz ว่าตรงกับตัวจริง

14

LiDAR กับ SLAM

ต่อ LiDAR · เลือกรุ่นให้พอกับขนาดพื้นที่ · สร้างแผนที่ด้วย slam_toolbox

15

นำทางด้วย Nav2

ตั้ง costmap · จูนความเร็วและระยะเบรก · สั่งไปยังจุดหมาย

16

เซ็นเซอร์ความปลอดภัย

ต่อ safety laser scanner · ผูกกับการหยุดฉุกเฉิน · แยกโซนเตือนกับโซนหยุด

17

นำทางด้วยเทปแม่เหล็ก

ทางเลือกที่ไม่ใช้ SLAM · เมื่อไหร่ควรใช้แทน LiDAR · ต่อเซ็นเซอร์แม่เหล็กเข้า ROS 2

18

ระบบไฟและการชาร์จ

คำนวณแบตให้พอกับกะทำงาน · กลับไปชาร์จอัตโนมัติ · อ่านสถานะแบตเข้า ROS 2

ทำไมเรียงแบบนี้

ส่วนที่ 1 ก่อนส่วนที่ 2 เพราะเวลาต่ออุปกรณ์จริงแล้วไม่ทำงาน คำถามแรกคือ "ข้อมูลไปถึงไหนแล้ว" ซึ่งตอบไม่ได้เลยถ้าอ่าน ros2 topic กับ tf ไม่เป็น จะกลายเป็นเดาไปเรื่อยว่าสายเสีย ไดรฟ์เสีย หรือโค้ดผิด

ในส่วนที่ 2 ห้ามข้ามหัวข้อ 11–13 หลายคนเริ่มจาก SLAM เพราะเห็นคลิปแล้วน่าสนใจที่สุด แล้วไปติดตรงที่แผนที่เพี้ยน ซึ่งสาเหตุมักไม่ได้อยู่ที่ LiDAR แต่อยู่ที่ odometry ไม่แม่น แผนที่จะเพี้ยนตามไปด้วยเสมอ ไม่ว่า LiDAR จะดีแค่ไหน