## การใช้งานหุ่นยนต์ Batly R1 (Mapping & Navigation) ในหัวข้อนี้ เราจะเรียนรู้วิธีการใช้งานหุ่นยนต์ Batly R1 เพื่อสร้างแผนที่จำลองสภาพแวดล้อม (SLAM) และการสั่งงานให้หุ่นยนต์เดินไปยังเป้าหมายโดยอัตโนมัติ (Navigation) ### การสร้างแผนที่ (SLAM - Mapping) ขั้นตอนแรกคือการนำหุ่นยนต์เดินสำรวจพื้นที่เพื่อสร้างแผนที่ โดยใช้ Lidar Sensor และ Odometry **ขั้นตอนที่ 1: เปิดระบบ Mapping และโปรแกรม Visualization** เปิด Terminal แล้วรันคำสั่งเพื่อเริ่มระบบ SLAM และเปิดโปรแกรม RViz ```{code-block} bash ros2 launch roboverii_nav mapping.launch.py rviz:=true ``` **ขั้นตอนที่ 2: บังคับหุ่นยนต์เดินสำรวจ** เปิด Terminal ใหม่ (New Tab) และรันคำสั่ง Teleop เพื่อควบคุมหุ่นยนต์ด้วยคีย์บอร์ด ให้เดินให้ทั่วพื้นที่จนได้แผนที่ที่สมบูรณ์ ```{code-block} bash ros2 run roboverii_bringup teleop_keyboard ``` *(รูปที่ 1: หน้าจอ RViz ขณะเริ่มสร้างแผนที่ แสดงเส้น Lidar)* ```{image} images/c19/19.1.png :width: 100% :align: center ``` *(รูปที่ 2: การบังคับหุ่นยนต์เดินจริงในพื้นที่)* ```{image} images/c19/19.2.png :width: 100% :align: center ``` *(รูปที่ 3: แผนที่ที่สร้างเสร็จสมบูรณ์ใน RViz)* ```{image} images/c19/19.3.png :width: 100% :align: center ``` **ขั้นตอนที่ 3: บันทึกไฟล์แผนที่ (Save Map)** เมื่อได้แผนที่ที่ต้องการแล้ว ให้รันคำสั่งนี้เพื่อบันทึกไฟล์แผนที่ลงในเครื่อง (ควรตรวจสอบ path ให้ถูกต้อง) ```{code-block} bash 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` (ไฟล์ตั้งค่า) --- ### การนำทางอัตโนมัติ (Navigation) เมื่อเรามีไฟล์แผนที่แล้ว เราสามารถสั่งให้หุ่นยนต์นำทางไปยังจุดต่างๆ ได้โดยใช้ Nav2 Stack **ขั้นตอนการเริ่มระบบ Navigation** รันคำสั่งต่อไปนี้เพื่อโหลดแผนที่ที่เราเพิ่งสร้าง (`mara01.yaml`) และเริ่มระบบนำทาง ```{code-block} bash ros2 launch roboverii_nav nav.launch.py rviz:=true map:=/home/batly-r1/roboverii_ws/src/ROBOVERII-R1/roboverii_params/maps/mara01.yaml ``` **การใช้งานใน RViz:** 1. **2D Pose Estimate:** ใช้ปุ่มนี้เพื่อระบุตำแหน่งเริ่มต้นของหุ่นยนต์ให้ตรงกับความเป็นจริงในแผนที่ 2. **Nav2 Goal:** ใช้ปุ่มนี้คลิกเลือกจุดหมายปลายทางและทิศทางที่ต้องการให้หุ่นยนต์เดินไป *(รูปที่ 4: การกำหนดตำแหน่งเริ่มต้น 2D Pose Estimate)* ```{image} images/c19/19.4.png :width: 100% :align: center ``` *(รูปที่ 5: การสั่งงานจุดหมายปลายทางด้วย Nav2 Goal)* ```{image} images/c19/19.5.png :width: 100% :align: center ``` *(รูปที่ 6: หุ่นยนต์กำลังเคลื่อนที่ไปยังเป้าหมายตามเส้นทาง global path)* ```{image} images/c19/19.6.png :width: 100% :align: center ```