19. การใช้งานหุ่นยนต์ Batly R1 (Mapping & Navigation)
ในหัวข้อนี้ เราจะเรียนรู้วิธีการใช้งานหุ่นยนต์ Batly R1 เพื่อสร้างแผนที่จำลองสภาพแวดล้อม (SLAM) และการสั่งงานให้หุ่นยนต์เดินไปยังเป้าหมายโดยอัตโนมัติ (Navigation)
19.1. การสร้างแผนที่ (SLAM - Mapping)
ขั้นตอนแรกคือการนำหุ่นยนต์เดินสำรวจพื้นที่เพื่อสร้างแผนที่ โดยใช้ Lidar Sensor และ Odometry
ขั้นตอนที่ 1: เปิดระบบ Mapping และโปรแกรม Visualization เปิด Terminal แล้วรันคำสั่งเพื่อเริ่มระบบ SLAM และเปิดโปรแกรม RViz
ros2 launch roboverii_nav mapping.launch.py rviz:=true
ขั้นตอนที่ 2: บังคับหุ่นยนต์เดินสำรวจ เปิด Terminal ใหม่ (New Tab) และรันคำสั่ง Teleop เพื่อควบคุมหุ่นยนต์ด้วยคีย์บอร์ด ให้เดินให้ทั่วพื้นที่จนได้แผนที่ที่สมบูรณ์
ros2 run roboverii_bringup teleop_keyboard
(รูปที่ 1: หน้าจอ RViz ขณะเริ่มสร้างแผนที่ แสดงเส้น Lidar)
(รูปที่ 2: การบังคับหุ่นยนต์เดินจริงในพื้นที่)
(รูปที่ 3: แผนที่ที่สร้างเสร็จสมบูรณ์ใน RViz)
ขั้นตอนที่ 3: บันทึกไฟล์แผนที่ (Save Map) เมื่อได้แผนที่ที่ต้องการแล้ว ให้รันคำสั่งนี้เพื่อบันทึกไฟล์แผนที่ลงในเครื่อง (ควรตรวจสอบ path ให้ถูกต้อง)
ros2 run nav2_map_server map_saver_cli -f /home/batly-r1/roboverii_ws/src/ROBOVERII-R1/roboverii_params/maps/mara01 --ros-args -p save_map_timeout:=10000
หมายเหตุ: คำสั่งนี้จะสร้างไฟล์ออกมา 2 ไฟล์คือ
mara01.pgm(รูปภาพแผนที่) และmara01.yaml(ไฟล์ตั้งค่า)
19.2. การนำทางอัตโนมัติ (Navigation)
เมื่อเรามีไฟล์แผนที่แล้ว เราสามารถสั่งให้หุ่นยนต์นำทางไปยังจุดต่างๆ ได้โดยใช้ Nav2 Stack
ขั้นตอนการเริ่มระบบ Navigation
รันคำสั่งต่อไปนี้เพื่อโหลดแผนที่ที่เราเพิ่งสร้าง (mara01.yaml) และเริ่มระบบนำทาง
ros2 launch roboverii_nav nav.launch.py rviz:=true map:=/home/batly-r1/roboverii_ws/src/ROBOVERII-R1/roboverii_params/maps/mara01.yaml
การใช้งานใน RViz:
2D Pose Estimate: ใช้ปุ่มนี้เพื่อระบุตำแหน่งเริ่มต้นของหุ่นยนต์ให้ตรงกับความเป็นจริงในแผนที่
Nav2 Goal: ใช้ปุ่มนี้คลิกเลือกจุดหมายปลายทางและทิศทางที่ต้องการให้หุ่นยนต์เดินไป
(รูปที่ 4: การกำหนดตำแหน่งเริ่มต้น 2D Pose Estimate)
(รูปที่ 5: การสั่งงานจุดหมายปลายทางด้วย Nav2 Goal)
(รูปที่ 6: หุ่นยนต์กำลังเคลื่อนที่ไปยังเป้าหมายตามเส้นทาง global path)