รูปปกบทความ

1. 🎯 ตอนที่ 7: อาวุธคู่กายนักพัฒนา: ROS Command Line Tools พื้นฐาน

สวัสดีครับน้องๆ วิศวกรหุ่นยนต์ทุกคน! เวลาที่เราดูหนังแฮกเกอร์ เรามักจะเห็นตัวเอกนั่งพิมพ์คำสั่งลงบนหน้าจอสีดำๆ อย่างรวดเร็วใช่ไหมครับ? ในโลกของการพัฒนาหุ่นยนต์ด้วย ROS หน้าจอสีดำหรือ Terminal (Command Line Interface - CLI) นี่แหละครับ คือ “อาวุธคู่กาย” ที่ทรงพลังที่สุดของเรา

ในยุคของ ROS 1 เราอาจจะคุ้นเคยกับคำสั่งที่เขียนติดกันเช่น roscore, rostopic แต่พอมาถึงยุค ROS 2 ผู้พัฒนาได้ปรับรูปแบบให้เป็นระเบียบขึ้นโดยใช้คำนำหน้าว่า ros2 แล้วตามด้วยหมวดหมู่ วันนี้พี่จะพามาทบทวน 5 คำสั่งคลาสสิกที่น้องๆ ต้องใช้ตรวจสอบและสั่งการหุ่นยนต์ในทุกๆ วันกันครับ!

2. 📖 เปิดฉาก (The Hook)

น้องๆ ลองจินตนาการดูว่า เราเขียนโค้ดให้หุ่นยนต์เดินหน้า แต่พอกดรันปุ๊บ หุ่นยนต์กลับหมุนเป็นวงกลม หรือเซ็นเซอร์ LIDAR ไม่ยอมอ่านค่า… ถ้าเราไม่มีเครื่องมืออะไรเลย การหาบั๊กก็เหมือนการงมเข็มในมหาสมุทรครับ เราจะไม่รู้เลยว่าโค้ดพังที่เซ็นเซอร์ หรือพังที่อัลกอริทึม

นี่คือจุดที่ ROS Command Line Tools เข้ามาเป็นฮีโร่ครับ เครื่องมือเหล่านี้เปรียบเสมือน “หูและตา” ที่ทำให้เราสามารถเจาะเข้าไปดูระบบประสาทของหุ่นยนต์ได้แบบ Real-time เราสามารถแอบดูข้อมูลที่กำลังวิ่งไปมา สั่งให้หุ่นยนต์ขยับ หรือตรวจสอบได้ว่ามีโปรแกรมไหนแอบตายไปกลางทางบ้าง โดยไม่ต้องเขียนโค้ดเพิ่มแม้แต่บรรทัดเดียว!

3. 🧠 แก่นวิชา (Core Concepts)

คำสั่งพื้นฐานใน ROS เปรียบเสมือนเครื่องมือช่างที่ใช้จัดการกับ Node, Topic และโครงสร้างต่างๆ มาดูกันว่า 5 คำสั่งยอดฮิตมีอะไรบ้าง:

  • roscore (ผู้จัดการใหญ่แห่งยุค ROS 1): ใน ROS 1 คำสั่งนี้คือสิ่งแรกที่ต้องรันเสมอ มันทำหน้าที่ปลุก ROS Master, Parameter Server และระบบ Logging ขึ้นมา ถ้าไม่มี roscore Node ต่างๆ จะหากันไม่เจอเลย (แอบกระซิบ: ใน ROS 2 เราตัด Master ทิ้งและเปลี่ยนไปใช้ DDS แทนแล้ว ดังนั้นใน ROS 2 เราไม่จำเป็นต้องรัน roscore อีกต่อไปครับ!)
  • rosrun หรือ ros2 run (สตาร์ทเครื่องยนต์เดี่ยว): ใช้สำหรับสั่งรันโปรแกรมย่อย (Node) เพียง 1 ตัว จาก Package ที่เราระบุ เหมาะสำหรับการทดสอบการทำงานของ Node เดี่ยวๆ เช่น รันโหนดกล้อง หรือรันโหนดควบคุมจอยสติ๊ก
  • roslaunch หรือ ros2 launch (สตาร์ททั้งโรงงาน): เวลาหุ่นยนต์ตัวนึงมี Node เป็นสิบๆ ตัว การมานั่งพิมพ์ rosrun ทีละหน้าต่างคงเป็นฝันร้าย คำสั่งนี้เกิดมาเพื่ออ่านไฟล์สคริปต์ (XML ใน ROS 1 หรือ Python/YAML ใน ROS 2) แล้วสั่งรัน Node ทั้งหมด, ตั้งค่าพารามิเตอร์, และเชื่อมต่อ Network ให้เราอัตโนมัติด้วยคำสั่งเดียว
  • rosnode หรือ ros2 node (สมุดหน้าเหลืองเช็คชื่อพนักงาน): ใช้เพื่อตรวจสอบว่าตอนนี้มี Node อะไรกำลังทำงานอยู่บ้าง (list) หรือเข้าไปดูข้อมูลเชิงลึก (info) ว่า Node ตัวนั้นกำลังคุยกับใครอยู่
  • rostopic หรือ ros2 topic (เครื่องดักฟังข้อมูล): นี่คือคำสั่งที่วิศวกรใช้บ่อยที่สุด! ใช้สำหรับดักฟังข้อมูลที่กำลังไหลเวียนอยู่ (echo), ตรวจสอบความถี่ของเซ็นเซอร์ (hz), หรือแม้แต่การส่งคำสั่งปลอมๆ เข้าไปควบคุมหุ่นยนต์โดยตรง (pub)
รูปประกอบ ROS Command Line Tools

4. 💻 ร่ายมนต์โค้ดและคำสั่ง (Show me the Code)

เพื่อให้เห็นภาพ พี่จะใช้รูปแบบคำสั่งของ ROS 2 เป็นหลักนะครับ (สำหรับน้องที่ทำโปรเจกต์ ROS 1 อยู่ แค่ตัดเลข 2 ออกแล้วพิมพ์ติดกันก็ใช้ได้เหมือนกันครับ)

# 1. การเรียกดูรายชื่อ (List)
ros2 node list    # ขอดูหน่อยว่าตอนนี้มี Node (โปรแกรม) อะไรเปิดอยู่บ้าง?
ros2 topic list   # ขอดูรายชื่อ "คลื่นความถี่ (Topic)" ทั้งหมดที่มีในระบบตอนนี้

# 2. การดักฟังและตรวจสอบ (Introspection)
ros2 node info /camera_driver # เจาะลึกดูว่า Node กล้องกำลัง Publish หรือ Subscribe อะไรอยู่
ros2 topic echo /scan         # ดักฟังข้อมูลจาก LIDAR (พ่นตัวเลขระยะทางออกมาบนจอแบบรัวๆ!)
ros2 topic hz /scan           # จับเวลาดูว่าเซ็นเซอร์ LIDAR ส่งข้อมูลมาด้วยความถี่กี่ Hz (เช่น 10 Hz)

# 3. การรันโปรแกรม (Run & Launch)
# โครงสร้าง: ros2 run <ชื่อ_package> <ชื่อ_executable>
ros2 run turtlesim turtlesim_node # สั่งรันหุ่นยนต์เต่าจำลองขึ้นมา

# โครงสร้าง: ros2 launch <ชื่อ_package> <ชื่อ_ไฟล์_launch>
ros2 launch nav2_bringup navigation_launch.py # สั่งรันระบบนำทางอัตโนมัติทั้งระบบชุดใหญ่!

# 4. การสั่งการหุ่นยนต์ (Publishing)
# โครงสร้าง: ros2 topic pub <ชื่อ_topic> <ชนิด_Message> "<ข้อมูล>"
# ตัวอย่างการสั่งให้หุ่นยนต์เต่าเดินหน้าด้วยความเร็ว 2.0 (รันด้วยความถี่ 1 Hz)
ros2 topic pub -r 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}" #

5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)

  • วิชาตัวเบาด้วยปุ่ม [TAB]: ไม่ต้องจำชื่อ Package หรือ Topic ยาวๆ ให้ปวดหัวครับ! ทันทีที่น้องพิมพ์ ros2 run หรือ ros2 topic echo ให้เคาะปุ่ม [TAB] บนคีย์บอร์ดสองครั้ง ระบบ Auto-complete ของ ROS จะช่วยเดาคำหรือเติมชื่อเต็มให้เราอัตโนมัติ ประหยัดเวลาไปได้เยอะมาก
  • เช็คชีพจรเซ็นเซอร์ด้วย topic hz: ถ้าหุ่นยนต์อยู่ดีๆ ก็เดินชนกำแพง สิ่งแรกที่พี่มักจะทำคือการรัน ros2 topic hz /camera/image_raw หรือ /scan ครับ คำสั่งนี้จะบอกเราว่าเซ็นเซอร์กำลังส่งข้อมูลมาที่ความเร็วเฉลี่ยกี่ครั้งต่อวินาที ถ้าความถี่แกว่ง หรือช้าผิดปกติ (เช่น สเปคบอก 30Hz แต่ออกมาแค่ 5Hz) แปลว่าคอขวดอาจจะอยู่ที่สาย USB หรือ Network แล้ว ไม่ใช่ที่โค้ดอัลกอริทึมเราครับ
  • คู่มือพกพา (-h หรือ --help): จำพารามิเตอร์ไม่ได้ไม่ใช่เรื่องผิดครับ แค่พิมพ์ -h ต่อท้ายคำสั่ง (เช่น ros2 topic pub -h) Terminal จะพ่นคู่มือการใช้งานและตัวอย่างออกมาให้ดูทันที

6. 🏁 บทสรุป (To be continued…)

การใช้ Command Line Tools อย่างคล่องแคล่ว จะเปลี่ยนประสบการณ์การเขียน ROS ของน้องๆ จาก “การนั่งเดา” ไปสู่ “การควบคุมแบบเบ็ดเสร็จ” ครับ เครื่องมือเหล่านี้ช่วยให้เราสามารถจำลองเหตุการณ์ ส่งข้อมูลหลอกๆ หรือดีบักปัญหาเฉพาะจุดได้อย่างรวดเร็ว โดยไม่ต้องเปิด IDE ขึ้นมาแก้โค้ดเลย

ตอนนี้เรามีอาวุธครบมือแล้ว! ในตอนต่อไป พี่จะพาน้องๆ ไปเจาะลึกเทคนิคการบันทึกข้อมูลทุกอย่างที่เกิดขึ้นในหุ่นยนต์เก็บไว้ (Data Logging) ด้วยพระเอกที่ชื่อว่า ROS Bag เพื่อเอาข้อมูลมา Replay เล่นซ้ำที่บ้านได้โดยไม่ต้องมีหุ่นยนต์ของจริง! เตรียมตัวให้พร้อมแล้วเจอกันครับ


ต้องการที่ปรึกษาด้านการออกแบบสถาปัตยกรรมหุ่นยนต์ (Robotics) และระบบ Automation ให้กับองค์กรของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและพัฒนาซอฟต์แวร์แบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p