รูปปกบทความ

1. 🎯 ตอนที่ 10: RQT Tools (rqt_graph, rqt_plot) เครื่องมือ Debug แสนสะดวก

สวัสดีครับน้องๆ วิศวกรหุ่นยนต์ทุกคน! ผ่านมาถึงตอนที่ 10 กันแล้ว ก่อนหน้านี้เราได้เรียนรู้วิธีการใช้ Command Line ผ่าน Terminal ในการตรวจสอบหุ่นยนต์กันไปอย่างโชกโชน แต่พี่เชื่อว่าหลายคนคงเริ่มตาลายกับตัวหนังสือสีขาวบนพื้นดำกันแล้วใช่ไหมครับ?

วันนี้พี่จะพาไปรู้จักกับ “มีดพับสวิส” คู่ใจวิศวกรหุ่นยนต์ ที่จะมาเปลี่ยนข้อมูลตัวเลขน่าปวดหัว ให้กลายเป็นหน้าต่างกราฟิก (GUI) สวยงาม ใช้งานง่าย เครื่องมือชุดนี้มีชื่อว่า RQT (ROS Qt GUI toolkit) ครับ เตรียมบอกลาความปวดตา แล้วมาเปิดหน้าต่าง Debugging สุดล้ำกันได้เลย!

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

พี่เคยเจอเหตุการณ์แบบนี้ครับ… พี่เขียนโค้ดให้ Node กล้อง (Publisher) ส่งภาพไปให้ Node ประมวลผล AI (Subscriber) พอกดรันปุ๊บ ปรากฏว่า AI นิ่งสนิท ไม่ยอมทำงาน! พี่พยายามนั่งไล่โค้ดทีละบรรทัดก็หาที่ผิดไม่เจอ สรุปว่าปัญหาเส้นผมบังภูเขามากครับ พี่พิมพ์ชื่อ Topic ฝั่งรับข้อมูลผิดไปแค่ตัวอักษรเดียว! (เช่น ส่งไป /number แต่ไปรอรับที่ /numberr)

ในระบบ ROS 2 ที่หุ่นยนต์หนึ่งตัวอาจจะมี Node ทำงานพร้อมกันเป็นสิบๆ ตัว การมานั่งจำว่าใครคุยกับใครผ่าน Topic ไหนเป็นเรื่องที่แทบจะเป็นไปไม่ได้เลย นี่คือจุดที่เครื่องมืออย่าง rqt_graph จะขี่ม้าขาวมาช่วยเราวาด “แผนผังองค์กร” ให้ดูเลยว่าใครกำลังคุยกับใครอยู่ และถ้าเราอยากเห็นค่าเซ็นเซอร์แบบ Real-time เราก็มี rqt_plot ที่ทำหน้าที่เหมือน “เครื่องวัดคลื่นหัวใจ (EKG)” ให้หุ่นยนต์ของเราครับ!

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

RQT คือเฟรมเวิร์กสำหรับการสร้าง Graphical User Interface (GUI) ใน ROS 2 ซึ่งถูกสร้างขึ้นบนพื้นฐานของไลบรารี Qt ความเจ๋งของ RQT คือมันถูกออกแบบมาเป็นระบบ “ปลั๊กอิน (Plugins)” ครับ หมายความว่าเราสามารถเลือกเปิดหน้าต่างเครื่องมือเฉพาะที่เราอยากใช้ แล้วนำมาจัดเรียงบนหน้าจอเดียวกันได้อย่างอิสระ โดยมี 2 ปลั๊กอินยอดฮิตที่วิศวกรทุกคนต้องใช้เป็นประจำ ได้แก่:

  • rqt_graph (แผนที่เส้นทางข้อมูล): เป็นปลั๊กอินที่ช่วยวาดภาพ ROS 2 Computation Graph ขึ้นมาให้เราดูแบบสดๆ โดยในแผนภาพนี้ Node จะถูกแทนด้วยรูปวงรี (Ellipses) ส่วน Topic จะถูกแทนด้วยรูปสี่เหลี่ยมหรือลูกศร (Rectangles/Arrows) เครื่องมือนี้ช่วยให้เราเห็นภาพรวมของระบบสถาปัตยกรรม (Architecture) ได้ทันที ว่ามีคอขวดตรงไหน หรือมี Node ไหนที่หลุดการเชื่อมต่อ (Dead sinks) ไปบ้าง

  • rqt_plot (เครื่องวาดกราฟแบบ Real-time): เป็นปลั๊กอินสำหรับนำข้อมูลตัวเลข (Numerical/Scalar data) ที่วิ่งอยู่ใน Topic มาพล็อตเป็นกราฟ 2 มิติต่อเนื่องตามเวลา (Time Series) เครื่องมือนี้มีประโยชน์มหาศาลเวลาที่เราต้องการวิเคราะห์สัญญาณเซ็นเซอร์ (เช่น ระยะห่างจาก LIDAR, อุณหภูมิ, ความเร่ง) หรือเวลาที่เราต้องการจูนค่า PID Controller เพื่อดูว่าเส้นกราฟความเร็วของหุ่นยนต์วิ่งเข้าหาเป้าหมาย (Setpoint) ได้นิ่งแค่ไหน

รูปประกอบการทำงานของ rqt_graph และ rqt_plot

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

ก่อนอื่น ถ้าเครื่องน้องๆ ยังไม่ได้ติดตั้งแพ็กเกจ RQT สามารถติดตั้งผ่าน Terminal ได้ด้วยคำสั่งนี้ครับ (ตัวอย่างสำหรับ ROS 2 Foxy/Humble/Jazzy ให้เปลี่ยนชื่อเวอร์ชันตามที่ใช้จริง):

# ติดตั้ง RQT และปลั๊กอินพื้นฐานทั้งหมด
sudo apt-get install ros-humble-rqt ros-humble-rqt-common-plugins

1. การใช้งาน rqt_graph: ให้น้องๆ ลองรันโหนดหุ่นยนต์เต่า (turtlesim) ควบคู่กับโหนดควบคุมคีย์บอร์ด แล้วเปิดหน้าต่างกราฟขึ้นมาดูครับ:

# เปิด Terminal ใหม่ แล้วพิมพ์คำสั่งนี้เพื่อเรียก rqt_graph
rqt_graph

# หรือจะเปิดผ่านเฟรมเวิร์กหลักของ rqt แล้วค่อยไปเลือกเมนู Plugins -> Introspection -> Node Graph ก็ได้เช่นกัน
rqt

คอมเมนต์: เมื่อหน้าต่างเปิดขึ้นมา ถ้าระบบมี Node ใหม่เพิ่มเข้ามา น้องๆ สามารถกดปุ่มลูกศรหมุน (Refresh) ที่มุมซ้ายบน เพื่อให้อัปเดตกราฟล่าสุดได้ทันทีครับ

2. การใช้งาน rqt_plot: สมมติว่าเราต้องการดูกราฟความเร็วของข้อต่อหุ่นยนต์ เราสามารถระบุชื่อ Topic พร้อมกับฟิลด์ข้อมูลลงไปตรงๆ ได้เลย:

# พล็อตกราฟข้อมูลตำแหน่ง x และ y ของหุ่นยนต์เต่าแบบ Real-time
# โดยใช้เครื่องหมาย / คั่นเข้าไปในโครงสร้างของ Message
ros2 run rqt_plot rqt_plot /turtle1/pose/x /turtle1/pose/y

# หาก Topic นั้นส่งข้อมูลมาเป็น Array น้องๆ สามารถระบุ Index ในวงเล็บก้ามปู [ ] ได้เลย!
# เช่น ดูกราฟความเร็วของข้อต่อ (Joint) ตัวที่ 0
ros2 run rqt_plot rqt_plot /joint_states/velocity

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

  • ล่าบั๊ก Topic Name Mismatch ด้วย rqt_graph: ปัญหาสุดคลาสสิกเวลาที่เราให้ Publisher กับ Subscriber คุยกันไม่รู้เรื่อง คือการพิมพ์ชื่อ Topic ผิดครับ ถ้าน้องๆ เปิด rqt_graph แล้วเห็นว่า Node ส่งข้อมูลชี้ลูกศรไปที่กล่อง Topic ชื่อ /my_number แต่ Node รับข้อมูลดันมีลูกศรชี้ออกมาจากกล่องที่ชื่อ /numberr แบบแยกกันอยู่คนละฝั่ง… นั่นแหละครับจับตัวคนร้ายได้เลย! การมองภาพกราฟจะช่วยให้เราแก้ปัญหานี้ได้ภายใน 3 วินาที
  • เลือก Plotting Engine ให้เหมาะกับงานใน rqt_plot: เวลาน้องๆ พล็อตค่าเซ็นเซอร์ที่มีความถี่สูงมากๆ (High-frequency data) บางครั้งจะรู้สึกว่ากราฟมันกระตุก หรือกิน CPU เครื่องหนักมาก ในหน้าต่างของ rqt_plot จะมีปุ่มรูปเฟือง (Configuration) ให้เราคลิกเข้าไปเปลี่ยน Plot Type หรือแบ็กเอนด์ที่ใช้ในการวาดกราฟได้ครับ โดยปกติระบบอาจจะใช้ MatPlot แต่พี่แนะนำให้ลองเปลี่ยนไปใช้ PyQtGraph ซึ่งจะประมวลผลได้รวดเร็วและลื่นไหลกว่ามากครับ!
  • การวิเคราะห์ระบบหลายหุ่นยนต์ (Multi-Robot): ใน rqt_graph จะมีตัวเลือกให้ติ๊ก “Group namespaces” ซึ่งมีประโยชน์มากเวลาเราจำลองหุ่นยนต์หลายตัวพร้อมกัน (เช่น /crazyflie1 และ /crazyflie2) ระบบจะช่วยตีกรอบสี่เหลี่ยมครอบ Node ทั้งหมดที่อยู่ใน Namespace เดียวกันให้ ทำให้กราฟดูสะอาดและเป็นระเบียบสุดๆ ครับ

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

เห็นไหมครับว่าเครื่องมือ RQT อย่าง rqt_graph และ rqt_plot นั้นช่วยเปลี่ยนชีวิตวิศวกรหุ่นยนต์ให้ง่ายขึ้นขนาดไหน มันเหมือนเรามีแผงควบคุม (Dashboard) ระดับมืออาชีพที่สามารถดึงข้อมูลลึกๆ ในระบบมาวิเคราะห์ได้ทันที โดยแทบไม่ต้องเขียนโค้ดเพิ่มเลยแม้แต่บรรทัดเดียว

ตอนนี้เราก็มีอาวุธสำหรับวิเคราะห์ข้อมูลแบบกราฟิกครบมือแล้ว แต่เดี๋ยวก่อน… หุ่นยนต์ของเรายังขาดโครงสร้าง “กระดูก” อยู่ครับ! ในตอนต่อไป พี่จะพาน้องๆ ไปลุยกับระบบที่เป็นสถาปัตยกรรมระดับปรมาจารย์ของ ROS นั่นคือ TF (Transform Framework) ที่ใช้ในการอ้างอิงพิกัดสามมิติระหว่างชิ้นส่วนต่างๆ ของหุ่นยนต์ เตรียมยืดเส้นยืดสายรอไว้ได้เลยครับ!


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