welcom ! Handel home

2025年2月6日 星期四

ROS 1 vs ROS 2:建立與執行機器人專案的比較

 ROS 1 和 ROS 2 在機器人專案的開發流程上有一些 關鍵性的不同,特別是在 通訊架構、開發流程、Gazebo 整合、運行效率等方面


📌 1️⃣ 主要比較:ROS 1 vs. ROS 2

功能 / 面向ROS 1ROS 2
開發框架單一進程架構分散式架構(支援多機分佈)
通訊機制基於 TCPROS,需要 ROS Master使用 DDS(去中心化)
語言支援C++, PythonC++, Python, Rust
多機通訊需要手動設定 ROS_MASTER_URI內建 DDS,無需 Master
Gazebo 整合使用 gazebo_ros使用 ros_gz_bridge(更快)
實時性支援 RTOS、硬體加速
Lifecycle無狀態管理內建狀態機(Lifecycle Nodes)
安全性無加密支援 QoS、加密
行業應用研究為主商業與工業級應用(如自動駕駛)

📌 2️⃣ ROS 1 vs ROS 2:機器人專案開發流程

1️⃣ ROS 1 建立專案

📜 典型 ROS 1 機器人專案

bash
mkdir -p ~/ros1_ws/src cd ~/ros1_ws catkin_make source devel/setup.bash

🔹 建立 ROS 1 套件

bash
cd ~/ros1_ws/src catkin_create_pkg my_robot std_msgs rospy roscpp cd ~/ros1_ws catkin_make source devel/setup.bash
  • ROS 1 使用 catkin_make 來編譯
  • 使用 roscore 啟動 ROS Master
bash
roscore
  • 運行 ROS 1 範例節點
bash
rosrun my_robot talker.py rosrun my_robot listener.py

2️⃣ ROS 2 建立專案

📜 典型 ROS 2 機器人專案

bash
mkdir -p ~/ros2_ws/src cd ~/ros2_ws rosdep install --from-paths src --ignore-src -r -y colcon build source install/setup.bash

🔹 建立 ROS 2 套件

bash
cd ~/ros2_ws/src ros2 pkg create --build-type ament_cmake my_robot cd ~/ros2_ws colcon build source install/setup.bash
  • ROS 2 使用 colcon 來編譯
  • 無需 roscore(因為 ROS 2 無 ROS Master)
  • 運行 ROS 2 範例節點
bash
ros2 run my_robot talker ros2 run my_robot listener

📌 3️⃣ ROS 1 vs ROS 2:Gazebo 模擬機器人

1️⃣ ROS 1 + Gazebo

  • 使用 gazebo_ros 插件:
bash
roslaunch gazebo_ros empty_world.launch
  • 使用 roslaunch 啟動 URDF:
bash
roslaunch my_robot_description my_robot.launch
  • 運行控制器
bash
rosrun gazebo_ros_control joint_state_controller

2️⃣ ROS 2 + Gazebo Sim

  • 使用 ros_gz_bridge 啟動 Gazebo Sim
bash
ros2 launch gazebo_ros gazebo.launch.py
  • 使用 ros2 launch 加載 SDF
bash
ros2 launch my_robot_description my_robot.launch.py
  • ROS 2 控制器
bash
ros2 control load_controller --set-state start joint_state_broadcaster
  • 使用 ros_gz_bridge 連接 Gazebo
bash
ros2 run ros_gz_bridge parameter_bridge /cmd_vel@gz.msgs.Twist@geometry_msgs/msg/Twist

🔹 Gazebo Sim 在 ROS 2 中使用 ros_gz_bridge,無需 ROS Master,速度更快。


📌 4️⃣ ROS 1 vs ROS 2:多機通訊

1️⃣ ROS 1 多機通訊

需要手動設定:

bash
export ROS_MASTER_URI=http://192.168.1.100:11311 export ROS_HOSTNAME=192.168.1.101

每台機器都要 指定 ROS Master,否則無法通訊。


2️⃣ ROS 2 多機通訊

  • ROS 2 使用 DDS,無需 ROS Master
  • 所有 ROS 2 節點在同一個網段內 自動發現
bash
ros2 topic echo /odom

🔹 ROS 2 自動支援多機,無需手動設定 ROS_MASTER_URI


📌 5️⃣ ROS 1 vs ROS 2:機器人控制

1️⃣ ROS 1 控制系統

xml
<transmission> <type>transmission_interface/SimpleTransmission</type> <joint name="joint1"> <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface> </joint> </transmission>
  • 使用 gazebo_ros_control
  • 控制器需要在 roslaunch 文件內加載

2️⃣ ROS 2 控制系統

xml
<ros2_control> <hardware> <plugin>ros2_control_demo_hardware/GenericSystem</plugin> </hardware> </ros2_control>
  • 使用 ros2_control
  • 控制器透過 ros2 control load_controller 動態加載
bash
ros2 control load_controller --set-state start joint_state_broadcaster

📌 6️⃣ ROS 1 vs ROS 2:應用場合

應用場合ROS 1ROS 2
學術研究
多機機器人❌ 手動配置✅ 原生支援
嵌入式系統❌ 不適合✅ 支援 RTOS
工業應用❌ 低安全性✅ DDS 支援
雲端與分散式控制❌ 需手動✅ 原生支援

🚀 總結

項目ROS 1ROS 2
通訊架構ROS MasterDDS(無需 Master)
開發工具catkin_makecolcon
Gazebo 支援gazebo_rosros_gz_bridge
多機支援手動設定 ROS_MASTER_URI自動發現
工業應用限制多支援安全性 (QoS, RTOS)

🚀 你應該選擇哪個?

使用 ROS 1

  • 如果你已經有 ROS 1 的專案,不想遷移
  • 如果你在使用 ROS 1 (Kinetic, Melodic, Noetic)
  • 學術研究或簡單機器人專案

使用 ROS 2

  • 如果你開發新的機器人專案
  • 如果你需要多機、嵌入式、工業應用
  • 如果你要長期維護的專案

沒有留言: