ROS Development
แนะนำการพัฒนาด้วย Robot Operating System (ROS1 + ROS2) บน myCobot 280 JN ทั้ง rviz สำหรับ visualize และ MoveIt สำหรับ motion planning
10.1 ROS คืออะไร?
Robot Operating System (ROS) เป็น meta-OS แบบ open-source สำหรับงานหุ่นยนต์ ที่จัดเตรียม Hardware Abstraction, การควบคุมอุปกรณ์, การสื่อสารระหว่างโปรเซส (Inter-Process Messaging) และระบบจัดการแพ็คเกจ
ROS ทำงานเป็น เครือข่ายของโปรเซสที่สื่อสารกันแบบหลวม ๆ ผ่าน Topics, Services, และ Parameter Server
แผนผังการสื่อสารของ ROS กับ myCobot
รูปที่ 10-1: ROS topic flow Bridge node เป็นศูนย์กลาง รับคำสั่งจาก Python/MoveIt ส่งต่อ Serial ไปหุ่นยนต์ พร้อมส่ง feedback กลับให้ rviz และ MoveIt
Topics (Pub/Sub)
โหนดส่งข้อความผ่าน Topic ส่งครั้งเดียว ใครรับก็รับ เหมาะกับ stream ข้อมูล
Services (RPC)
โหนดถาม-ตอบแบบ Request/Response เหมาะกับคำสั่งที่ต้องการคำตอบ
Parameter Server
เก็บค่า Configuration กลาง ที่ทุกโหนดเข้าถึงได้
10.2 ROS1 vs ROS2 เลือกอันไหน?
| ปัจจัย | ROS1 (Noetic) | ROS2 (Foxy/Humble) |
|---|---|---|
| OS รองรับ | Ubuntu 20.04 | Ubuntu 20.04+ |
| โครงสร้าง | Master-Slave | DDS-based, ไม่มี Master |
| ความปลอดภัย | ขาด | มี DDS Security |
| เหมาะกับ | โปรเจกต์เก่า, ทรัพยากรการศึกษามาก | โปรเจกต์ใหม่, ระบบ Production |
| เวอร์ชันบน Jetson Nano | ROS Noetic (ติดตั้งมาแล้ว) | ต้องติดตั้งเอง |
เครื่องที่มากับชุดเป็น Jetson Nano + Ubuntu 20.04 แนะนำใช้ ROS Noetic
เพราะติดตั้งมาให้แล้ว และมีแพ็คเกจ mycobot_ros รองรับครบ
ส่วน ROS2 (Foxy) ติดตั้งเพิ่มได้เลยบน 20.04 นี้
10.3 แพ็คเกจสำคัญสำหรับ myCobot
mycobot_ros
แพ็คเกจหลักจาก Elephant Robotics มี URDF, controllers, topics สำหรับสั่ง joint และอ่านสถานะ
rviz
เครื่องมือ visualize 3D เห็นโมเดลหุ่นยนต์, frames, sensor data แบบเรียลไทม์
MoveIt
Motion planning framework วางแผนเส้นทาง, หลบสิ่งกีดขวาง, แก้ Inverse Kinematics
10.4 เริ่มต้นกับ ROS1 บน Jetson Nano
ตั้งค่า Environment
เพิ่ม source ใน .bashrc ให้ ROS เข้าใช้งานได้ทุก terminal:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
เปิดโมเดลหุ่นยนต์ใน rviz
มี launch file สำหรับงาน 4 แบบ เลือกตามที่ต้องใช้:
terminal Slider control (drag slider ในแอปเพื่อขยับ joint จริง)roslaunch mycobot_280jn slider_control.launch \
port:=/dev/ttyTHS1 baud:=1000000
terminal Test config (แสดงโมเดล + frames + grid)
roslaunch mycobot_280jn test.launch
terminal Model Follow (โมเดลตามหุ่นยนต์จริงแบบ real-time)
roslaunch mycobot_280jn mycobot_follow.launch
terminal GUI control + Keyboard control
roslaunch mycobot_280jn mycobot_gui_control.launch
# หรือ
roslaunch mycobot_280jn keyboard_teleop.launch
หน้าต่าง rviz แบ่งเป็น 4 ส่วน: Panel ซ้าย = Display list, กลาง = 3D viewport, ขวา = views/cameras, ล่าง = ROS time clock
สั่งจริงจาก ROS
ใช้ Python rospy เชื่อมระหว่าง ROS topic กับ pymycobot:
python example_ros_node.py#!/usr/bin/env python
import rospy
from std_msgs.msg import Float64MultiArray
from pymycobot import MyCobot280
mc = MyCobot280('/dev/ttyTHS1', 1000000)
def angle_callback(msg):
angles = list(msg.data)
mc.send_angles(angles, 50)
if __name__ == "__main__":
rospy.init_node("mycobot_listener")
rospy.Subscriber("/mycobot/angles", Float64MultiArray, angle_callback)
rospy.spin()
10.5 MoveIt Motion Planning
MoveIt เป็น framework สำหรับวางแผนการเคลื่อนที่ของแขนกล แทนที่จะคำนวณ inverse kinematics เอง MoveIt จะหาทางที่ ปลอดภัย (ไม่ชนตัวเอง / สิ่งกีดขวาง) และ เหมาะสม ให้
เปิด MoveIt + rviz
terminal launch MoveItroslaunch mycobot_280jn_moveit mycobot_moveit.launch
จะเปิด rviz พร้อม MoveIt motion planning panel (ฝั่งซ้าย) แต่ตอนนี้ ยังไม่ขับหุ่นยนต์จริง เป็นแค่ simulation เปิดอีก terminal เพื่อ sync motion ไปยังหุ่นยนต์จริง:
terminal sync to real robotrosrun mycobot_280jn_moveit sync_plan.py \
_port:=/dev/ttyTHS1 _baud:=1000000
MoveIt ต้องใช้: Atom firmware ≥ 6.5 + pymycobot ≥ 3.5.3 ถ้าเก่ากว่านี้ ให้ burn firmware ใหม่ใน บทที่ 12.8 ก่อน
ความสามารถ
- ลากปลายแขนใน rviz เพื่อกำหนด goal pose แล้วกด Plan & Execute
- หลบสิ่งกีดขวาง เพิ่ม collision objects ในฉาก MoveIt จะหลบให้
- วาง Waypoints สั่งแขนผ่านลำดับจุดหลาย ๆ จุด
- Cartesian Path เคลื่อนเป็นเส้นตรงในระนาบ XYZ
คู่มืออย่างเป็นทางการของ MoveIt อยู่ที่ moveit.ros.org และเอกสารเฉพาะ myCobot ที่ Elephant Docs MoveIt
10.6 ROS2 (Foxy)
เครื่องนี้เป็น Ubuntu 20.04 อยู่แล้ว ติดตั้ง ROS2 Foxy เพิ่มได้เลย (ใช้ร่วมกับ ROS Noetic ที่มีอยู่ได้)
ติดตั้ง ROS2 Foxy
terminalsudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt install ros-foxy-desktop
ความแตกต่างจาก ROS1
- ใช้
ros2 launchแทนroslaunch - ใช้
ros2 topicแทนrostopic - ไม่ต้องเปิด
roscoreก่อน (DDS-based, ไม่มี Master) - Python API ใช้
rclpyแทนrospy
ก่อนติดตั้งซอฟต์แวร์ระบบเพิ่มเติม (เช่น ROS2) แนะนำ สำรอง TF Card ก่อน (ดู บทที่ 12) เผื่อมีอะไรผิดพลาดจะกู้กลับได้
10.7 ทรัพยากรเพิ่มเติม
- ROS Noetic Wiki official documentation
- ROS2 Foxy Documentation
- github.com/elephantrobotics/mycobot_ros source code
- MoveIt Tutorials
- หนังสือ Learning ROS for Robotics Programming โดย Aaron Martinez