รายงานความคืบหน้าครั้งที่ 1 68340700410 พัฒนรัตน์ จีดจีน

การระบุตำแหน่งของหุ่นภายใน 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

สิ่งที่ได้เรียนรู้

  1. โครงสร้างการสื่อสารใน ros2 จะเป็นแบบโหนด ซึ่งแต่ละโหนดจะสื่อสารจะส่งผ่านช่องทางที่เรียกว่า topic (ทีใช้บ่อยๆ ในที่นี้)
  2. การเขียนโปรแกรมแบบ OOP ใน ros frame work การเขียนโค้ดที่เกี่ยวข้องกับ logic หรือการสร้างโหนดจะเป็นการสร้าง class ขึ้นมา 1 class สำหรับความสามารถหรือหน้าที่ของโหนดจะเป็นการเพิ่ม attribute และ method
  3. โครงสร้างการระบุตำแหน่งของ 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 พัฒนรัตน์ จีดจีน