การระบุตำแหน่งของหุ่นภายใน maze
ในโมดูลการระบุตำแหน่งหุ่น จะรับข้อมูลข้อมูลจาก LiDAR และให้ผลลัพธ์ออกมาด้วยกัน 2 อย่าง คือ
1. ตำแหน่งปัจจุบันของหุ่น ในรูปแบบของ grid x และ grid y เทียบกับตำแหน่งกริดเริ่มต้น คือ 0, 0
2. ทิศที่หุ่นหันไป เทียบกับทิศทางเริ่มต้น ณ ตอนเปิดเครื่อง
เพื่อตอบโจทย์ความต้องการ เราได้นำ ros2 มาใช้ในส่วนนี้
Data Flow Diagram
ให้ Raspberry PI 5 รับข้อมูลจาก LiDAR ผ่าน USB จากนั้นส่งข้อมูลที่ได้ผ่าน ros2 topic ไปยัง PC station โดยเงื่อนไขที่ PC จะเห็น topic จาก PI คือ อุปกรณ์ทั้งคู่ต้องอยู่ภายใน network เดียวกันและตั้งค่า ros domain id เหมือนกัน จากนั้น PC จะทำหน้าที่แปลงข้อมูลที่ได้เป็นตำแหน่งกริดที่หุ่นอยู่

ในด้าน ros2 จะประกอบด้วยโหนด และโหนดต่างๆมีหน้าที่หลักดังนี้
1. sllidar_node : รับข้อมูลจาก LiDAR และ publish /scan topic
2. static_tf_base_laser : สร้าง static transform ระหว่าง base และ laser
3. odometry_scan_publisher : สร้าง transform ระหว่าง odometry frame และ base
4. slam_toolbox : คำนวณตำแหน่งของหุ่นเทียบกับ map (/pose) หรือสร้าง transform ระหว่าง map และ base
5. pose_converter_node : แปลงตำแหน่งที่ได้จาก /pose ให้อยู่ในรูปของ grid_x, grid_y และ มุมที่หุ่นหันไป

ตัวอย่างการดำเนินงาน/ผลที่ได้
visualize ด้วย rviz

ตัวอย่างค่าที่ได้จาก pose topic

หลังจากแปลงข้อมูลเป็น grid และแปลงมุมให้อยู่ในหน่วย degree

สิ่งที่ได้เรียนรู้
- โครงสร้างการสื่อสารใน ros2 จะเป็นแบบโหนด ซึ่งแต่ละโหนดจะสื่อสารจะส่งผ่านช่องทางที่เรียกว่า topic (ทีใช้บ่อยๆ ในที่นี้)
- การเขียนโปรแกรมแบบ OOP ใน ros frame work การเขียนโค้ดที่เกี่ยวข้องกับ logic หรือการสร้างโหนดจะเป็นการสร้าง class ขึ้นมา 1 class สำหรับความสามารถหรือหน้าที่ของโหนดจะเป็นการเพิ่ม attribute และ method
- โครงสร้างการระบุตำแหน่งของ mobile robot ประกอบด้วย 3 ส่วนหลัก คือ 1) map frame 2) odom frame (จุดเริ่มต้นของหุ่น) และ 3) base (link ของหุ่นที่เราสนใจ) ทั้ง 3 frame นี้สามารถอธิบายความสุมพันธ์ในด้าน translation และ rotation ด้วย transformation matrix
แหล่งข้อมูล
https://github.com/SteveMacenski/slam_toolbox: รายงานความคืบหน้าครั้งที่ 1 68340700410 พัฒนรัตน์ จีดจีน https://github.com/AlexKaravaev/ros2_laser_scan_matcher: รายงานความคืบหน้าครั้งที่ 1 68340700410 พัฒนรัตน์ จีดจีน https://github.com/Slamtec/sllidar_ros2: รายงานความคืบหน้าครั้งที่ 1 68340700410 พัฒนรัตน์ จีดจีน