การส่งข้อมูลตำแหน่งหุ่นยนต์ผ่าน MQTT
จากครั้งก่อนหน้าเราได้รับข้อมูลตำแหน่งของหุ่นมาในรูปแบบ ros masage เพื่อให้สามารถส่งต่อข้อมูลเหล่านี้ไปยังโมดูลอื่นที่ไม่ใช่ ros ได้ จึงเลือกส่งข้อมูลผ่าน mqtt
ขั้นตอนการทำมีดังนี้
- สร้าง node แล้วให้ node นี้ subscribe topic ที่ต้องการจะส่งไปยังโมดูลอื่น
- แปลงข้อมูลให้อยู่ใน format ที่กำหนด
- เรียกใช้งาน ros2 mqtt_bridge เพื่อแปลง ros2 masage เป็น mqtt masage

State ของหุ่นยนต์
ประกอบไปด้วย 3 สเตท แต่ละสเตทหุ่นจะทำงานต่างกันดังนี้
- STOP : เข้าสเตทนี้เมื่อผู้ใช้ป้อนตัวแปร stop ผ่าน ros2 parameter ให้เท่ากับ 1 หุ่นจะหยุดวิ่ง
- SOLVE : เข้าสเตทนี้เมื่อผู้ใช้ป้อนตัวแปร solve ผ่าน ros2 parameter ให้เท่ากับ 1 หุ่นจะเริ่ม solve maze วิ่งไปยัง grid ที่ต้องการ
- RETURN : เข้าสเตทนี้เมื่อหุ่นไปถึง grid ที่ต้องการแล้วหุ่นจะวิ่งกลับมาที่เดิม และหยุดการทำงาน

ตัวอย่าง
ให้ stop = true สเตทจะเข้าสู่ STOP

ให้ solve = true สเตทจะเข้าสู่ SOLVE

เมื่อ current grid (x, y) = target grid (x,y) ในที่นี้ คือ (3,0) สเตทจะเข้าสู่ return

ความรู้ที่ใช้
- OOP: inheritance –> การสร้าง node ใน ros2
- Function: if elif else –> finite state machine
- Date structure: array –> ส่งข้อมูลไปยัง mqtt
สิ่งที่ได้เรียนรู้
- การส่งข้อมูลข้าม framework จาก ros base ไปยัง non ros base ผ่าน MQTT โดยการใช้ ros2 mqtt bridge
- การเขียนโปรแกรมแบบ finite state machine
แหล่งข้อมูล
https://github.com/ika-rwth-aachen/mqtt_client: รายงานความคืบหน้าครั้งที่ 2 68340700410 พัฒนรัตน์ จีดจีน https://auth0.com/blog/state-pattern-in-python/#Advantages-and-Disadvantages: รายงานความคืบหน้าครั้งที่ 2 68340700410 พัฒนรัตน์ จีดจีน