16. Autonomous Navigation ใน Gazebo

Autonomous Navigation หรือการนำทางอัตโนมัติ เป็นหัวใจสำคัญของหุ่นยนต์เคลื่อนที่อัตโนมัติ (Autonomous Mobile Robot: AMR) ซึ่งต้องสามารถรับรู้สภาพแวดล้อม, วางแผนเส้นทาง และเคลื่อนที่ไปยังจุดหมายโดยอัตโนมัติ โดยอาศัยเซ็นเซอร์ เช่น LiDAR, กล้อง 3D, และ IMU ประกอบกับอัลกอริทึมการนำทาง เช่น SLAM (Simultaneous Localization and Mapping) และ Path Planning
ในหัวข้อที่ 11 เราได้เรียนรู้เกี่ยวกับการติดตั้งแพ็คเกจที่จำเป็น และวิธีใช้งาน Gazebo เพื่อจำลองสภาพแวดล้อมสำหรับหุ่นยนต์ ในบทนี้ เราจะศึกษาเกี่ยวกับการใช้งาน Gazebo ซึ่งเป็นตัวจำลองสภาพแวดล้อมเสมือน (Simulation) ที่สามารถใช้ทดสอบระบบนำทางของหุ่นยนต์โดยไม่ต้องใช้งานฮาร์ดแวร์จริงโดยใช้แพ็กเกจ TurtleBot3 Simulation ในการสาธิต (https://emanual.robotis.com/docs/en/platform/turtlebot3/simulation/)

16.1. สร้างแผนที่ SLAM (Simultaneous Localization and Mapping)

การสร้างแผนที่และวางแผนเส้นทาง โดยใช้ SLAM (Simultaneous Localization and Mapping) เพื่อให้หุ่นยนต์สามารถสร้างแผนที่ของพื้นที่และกำหนดตำแหน่งของตนเองภายในแผนที่

16.1.1. เปิดโลกจำลองใน Gazebo

เปิด Terminator 3 หน้าต่าง (ในกรณีที่มีหน้าต่างอยู่ก่อนหน้าปิดแล้วเปิดใหม่):

_images/16.1.1.1.png

Terminator หน้าต่างที่ 1 รันคำสั่งดังนี้ :

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

เพื่อทำการเปิด Gazebo จำลองในระบบ Simulator จะปรากฏดังภาพ

_images/16.1.1.2.png

16.1.2. รัน SLAM Node

Terminator หน้าต่างที่ 2 รันคำสั่งดังนี้:

ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True

คำสั่งนี้เป็นการ รันระบบ SLAM (Simultaneous Localization and Mapping) โดยใช้แพ็กเกจ turtlebot3_cartographer ใน ROS 2 ที่ชื่อว่า cartographer.launch.py และกำหนดให้ใช้เวลาในโหมดจำลอง (use_sim_time:=True).

จะปรากฏดังภาพ

_images/16.1.2.1.png

16.1.3. ควบคุมหุ่นยนต์ด้วย Teleoperation

เพื่อให้หุ่นยนต์สามารถเคลื่อนที่ไปรอบๆ และสร้างแผนที่ ต้องใช้ Teleoperation Node เพื่อควบคุมหุ่นยนต์

Terminator ที่ 3 รันคำสั่งดังนี้:

ros2 run turtlebot3_teleop teleop_keyboard
_images/16.1.3.1.png

เมื่อรันคำสั่งนี้ จะสามารถใช้ แป้นพิมพ์ เพื่อควบคุมการเคลื่อนที่ของหุ่นยนต์
w : เดินหน้า
x : ถอยหลัง
a : เลี้ยวซ้าย
d : เลี้ยวขวา
space, s : หยุด
(ถ้ากด w, x ซ้ำๆ จะเป็นการเดินหน้าพร้อมกับเร่งสปีดในแนวเชิงเส้น)
(ถ้ากด a, d ซ้ำๆ จะเป็นการเดินหน้าพร้อมกับเร่งสปีดในแนวเชิงมุม)

ภารกิจ : เคลื่อนที่ไปรอบๆ เพื่อให้ LiDAR เก็บข้อมูลและสร้างแผนที่ได้รอบห้องแบบรูปด้านล่าง

_images/16.1.3.2.png

16.1.4. บันทึกแผนที่

เมื่อสามารถเก็บแผนที่ได้ดังรูปด้านบน ให้เปิด Terminator หน้าต่างที่ 4 แล้วรันคำสั่งดังนี้: Terminator ที่ 3 รันคำสั่งดังนี้:

ros2 run nav2_map_server map_saver_cli -f ~/map

เมื่อรันคำสั่งเซฟแผนที่ จะมี ไฟล์ .pgm และ .yaml ปรากฏขึ้นมาใน Home โฟลเดอร์

_images/16.1.4.1.png