ตัวอย่างนี้จะเป็นการสร้างหุ่นยนต์เคลื่อนที่ ที่สามารถควบคุมผ่าน wifi ได้ ซึ่งจะเป็นระบบพื้นฐานของหุ่นยนต์เคลื่อนที่แบบอัตโนมัติในพื้นที่ปิด (indoor) ที่มีความสามารถในการสร้างแผนที่และเคลื่อนที่ไปยังตำแหน่งที่ต้องการพร้อมหลบหลีกสิ่งกีดขวางได้โดยอัตโนมัติ
การทำงานจะแยกเป็น 2 ส่วนคือ
- PC ซึ่งทำหน้าที่เป็นตัวรับข้อมูลจากเซนเซอร์ต่างๆบนหุ่นยนต์มาสร้างและแสดงผลแผนที่ รวมทั้งระบุตำแหน่งปัจจุบันของหุ่นยนต์ที่สอดคล้องกับตำแหน่งในแผนที่ โดยคอมพิวเตอร์จะติดตั้ง Ubuntu 22.04 พร้อมกับ ROS2 foxy
- หุ่นยนต์เคลื่อนที่แบบขับเคลื่อนด้วยล้อแยก (Differential Drive) ที่ติดตั้งมอเตอร์ DC จำนวน 2 ตัว และล้อเอนกประสงค์ (Caster Wheel) ที่ด้านหลัง มอเตอร์ DC ทั้งสองตัวติดตั้งตัวเข้ารหัส (Encoder) เพื่อช่วยในการติดตามความเร็วและระยะทางที่หุ่นยนต์เคลื่อนที่ มอเตอร์ถูกควบคุมด้วยโมดูลควบคุมมอเตอร์ L298N ซึ่งรับพลังงานจากแบตเตอรี่ลิเธียม 12 โวลต์ เซนเซอร์สำคัญอีกตัวหนึ่งคือ LiDAR ที่ติดตั้งอยู่ด้านบนของหุ่นยนต์ ซึ่งใช้สำหรับตรวจจับระยะทางและสภาพแวดล้อมรอบตัว ส่วนที่เป็น “สมอง” ของหุ่นยนต์ คือ Raspberry Pi 4 Model B ที่ใช้ในการประมวลผลและควบคุมการทำงานทั้งหมดของระบบ ที่จะทำงานร่วมกับ Arduino ที่ทำหน้าที่อ่านค่าตำแหน่งของมอเตอร์และควบคุมการหมุนของมอเตอร์ โดย Raspberry Pi จะติดตั้ง Ubuntu 22.04 พร้อมกับ ROS2 foxy ไว้เช่นกัน
จากบทความก่อนหน้า ซึ่งทำการทดลองสร้าง command_node และ drive_node เพื่อรับส่งข้อมูลระหว่างกันในขั้นตอนถัดไป จะทำการสร้าง drive_node บน Raspberry Pi เพื่อให้หุ่นยนต์สามารถรับคำสั่งจากการกด Keyboard บน PC ได้
ขั้นตอนที่ 1: การตั้งค่า ROS2 Workspace ใน Rpi
เปิด terminal และสร้าง Workspace Directory ด้วยคำสั่งดังนี้
mkdir -p ~/ros2_ws/src cd ~/ros2_ws |
เริ่มต้น Workspace ด้วยคำสั่ง colcon build
Source Workspace หลังจาก build แล้ว ให้ source workspace: source install/setup.bash
ขั้นตอนที่ 2: การสร้าง ROS2 Package
- ไปที่โฟลเดอร์ src : cd ~/ros2_ws/src
- สร้าง Package : ros2 pkg create MobileRobot_py –build-type ament_python –dependencies rclpy std_msgs
- เข้าไปในโฟลเดอร์ Package: cd MobileRobot_py
ขั้นตอนที่ 3: การสร้าง Node
1. สร้างไฟล์ drive_node.py
mkdir -p MobileRobot_py touch MobileRobot_py/drive_node.py chmod +x MobileRobot_py/drive_node.py |
2. เขียนโค้ดใน drive_node.py ด้วย code เดียวกับตอนที่ 1.0
ขั้นตอนที่ 4: แก้ไขไฟล์ setup.py
from setuptools import setup package_name = ‘MobileRobot_py’ setup( name=package_name, version=’0.0.0′, packages=[package_name], data_files=[ (‘share/ament_index/resource_index/packages’, [‘resource/’ + package_name]), (‘share/’ + package_name, [‘package.xml’]), ], install_requires=[‘setuptools’], zip_safe=True, maintainer=’Your Name’, maintainer_email=’your.email@example.com’, description=’MobileRobot_py project with Command_node and Drive_node.’, license=’Apache License 2.0′, tests_require=[‘pytest’], entry_points={ ‘console_scripts’: [ ‘drive_node = MobileRobot_py.drive_node:main’, ], }, ) |
ขั้นตอนที่ 5: Build Package
- กลับไปยัง Workspace Directory: cd ~/ros2_ws
- Build Package: colcon build
- Source Workspace : source install/setup.bash
ขั้นตอนที่ 6: รัน Node
- Rpi Terminal : รัน drive_node: ros2 run MobileRobot_py drive_node
- PC Terminal: รัน command_node: ros2 run MobileRobot_py command_node
เมื่อรันเรียบร้อย คุณจะสามารถส่งคำสั่งผ่านแป้นพิมพ์เพื่อควบคุมหุ่นยนต์ได้
Note :
- ทั้ง PC และ Rpi จะต้องเชื่อมต่อกับ wifi ตัวเดียวกัน
- สามารถตรวจสอบการรับส่ง message ระหว่าง node ได้จากการใช้คำสั่ง ros2 topic list จะแสดงรายชื่อของ topic ที่มีการ publish ระหว่างแต่ละ node
- ถ้าต้องการดูรายละเอียดของ topic (เช่น ชนิดของข้อความที่ใช้) ทำได้โดยใช้คำสั่ง ros2 topic info <topic_name>
- ถ้าต้องการตรวจสอบข้อมูลในแต่ละ topic สามารถทำได้โดยใช้คำสั่ง ros2 topic echo <topic_name>
สรุป
บทความนี้แสดงให้เห็นขั้นตอนการสร้าง ROS2 Package และ Node อย่างง่าย พร้อมตัวอย่างโค้ดที่ช่วยให้คุณเริ่มต้นใช้งาน ROS2 สำหรับการควบคุมหุ่นยนต์เคลื่อนที่จาก PC ได้ทันที! ในบทความถัดไป จะทดลองเชื่อมต่อคำสั่งจาก drive_node เพื่อควบคุมหุ่นยนต์โดยการเชื่อมต่อกับบอร์ด Arduino และมอเตอร์