myCobot 280 JN + AIKit 3D Vision
บทที่ 10

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.04Ubuntu 20.04+
โครงสร้างMaster-SlaveDDS-based, ไม่มี Master
ความปลอดภัยขาดมี DDS Security
เหมาะกับโปรเจกต์เก่า, ทรัพยากรการศึกษามากโปรเจกต์ใหม่, ระบบ Production
เวอร์ชันบน Jetson NanoROS 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:

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 UI สั้น ๆ

หน้าต่าง 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 MoveIt
roslaunch mycobot_280jn_moveit mycobot_moveit.launch

จะเปิด rviz พร้อม MoveIt motion planning panel (ฝั่งซ้าย) แต่ตอนนี้ ยังไม่ขับหุ่นยนต์จริง เป็นแค่ simulation เปิดอีก terminal เพื่อ sync motion ไปยังหุ่นยนต์จริง:

terminal sync to real robot
rosrun mycobot_280jn_moveit sync_plan.py \
    _port:=/dev/ttyTHS1 _baud:=1000000
ℹ️
ข้อกำหนด firmware/library

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 อยู่ที่ moveit.ros.org และเอกสารเฉพาะ myCobot ที่ Elephant Docs MoveIt

10.6 ROS2 (Foxy)

เครื่องนี้เป็น Ubuntu 20.04 อยู่แล้ว ติดตั้ง ROS2 Foxy เพิ่มได้เลย (ใช้ร่วมกับ ROS Noetic ที่มีอยู่ได้)

ติดตั้ง ROS2 Foxy

terminal
sudo 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 ทรัพยากรเพิ่มเติม