ROS 1 和 ROS 2 在機器人專案的開發流程上有一些 關鍵性的不同,特別是在 通訊架構、開發流程、Gazebo 整合、運行效率等方面。
📌 1️⃣ 主要比較:ROS 1 vs. ROS 2
功能 / 面向 | ROS 1 | ROS 2 |
---|---|---|
開發框架 | 單一進程架構 | 分散式架構(支援多機分佈) |
通訊機制 | 基於 TCPROS,需要 ROS Master | 使用 DDS(去中心化) |
語言支援 | C++, Python | C++, 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 機器人專案
🔹 建立 ROS 1 套件
- ROS 1 使用
catkin_make
來編譯 - 使用
roscore
啟動 ROS Master
- 運行 ROS 1 範例節點
2️⃣ ROS 2 建立專案
📜 典型 ROS 2 機器人專案
🔹 建立 ROS 2 套件
- ROS 2 使用
colcon
來編譯 - 無需
roscore
(因為 ROS 2 無 ROS Master) - 運行 ROS 2 範例節點
📌 3️⃣ ROS 1 vs ROS 2:Gazebo 模擬機器人
1️⃣ ROS 1 + Gazebo
- 使用
gazebo_ros
插件:
- 使用
roslaunch
啟動 URDF:
- 運行控制器
2️⃣ ROS 2 + Gazebo Sim
- 使用
ros_gz_bridge
啟動 Gazebo Sim
- 使用
ros2 launch
加載 SDF
- ROS 2 控制器
- 使用
ros_gz_bridge
連接 Gazebo
🔹 Gazebo Sim 在 ROS 2 中使用 ros_gz_bridge
,無需 ROS Master,速度更快。
📌 4️⃣ ROS 1 vs ROS 2:多機通訊
1️⃣ ROS 1 多機通訊
需要手動設定:
每台機器都要 指定 ROS Master,否則無法通訊。
2️⃣ ROS 2 多機通訊
- ROS 2 使用 DDS,無需 ROS Master
- 所有 ROS 2 節點在同一個網段內 自動發現
🔹 ROS 2 自動支援多機,無需手動設定 ROS_MASTER_URI
。
📌 5️⃣ ROS 1 vs ROS 2:機器人控制
1️⃣ ROS 1 控制系統
- 使用
gazebo_ros_control
- 控制器需要在
roslaunch
文件內加載
2️⃣ ROS 2 控制系統
- 使用
ros2_control
- 控制器透過
ros2 control load_controller
動態加載
📌 6️⃣ ROS 1 vs ROS 2:應用場合
應用場合 | ROS 1 | ROS 2 |
---|---|---|
學術研究 | ✅ | ✅ |
多機機器人 | ❌ 手動配置 | ✅ 原生支援 |
嵌入式系統 | ❌ 不適合 | ✅ 支援 RTOS |
工業應用 | ❌ 低安全性 | ✅ DDS 支援 |
雲端與分散式控制 | ❌ 需手動 | ✅ 原生支援 |
🚀 總結
項目 | ROS 1 | ROS 2 |
---|---|---|
通訊架構 | 需 ROS Master | DDS(無需 Master) |
開發工具 | catkin_make | colcon |
Gazebo 支援 | gazebo_ros | ros_gz_bridge |
多機支援 | 手動設定 ROS_MASTER_URI | 自動發現 |
工業應用 | 限制多 | 支援安全性 (QoS, RTOS) |
🚀 你應該選擇哪個?
✅ 使用 ROS 1
- 如果你已經有 ROS 1 的專案,不想遷移
- 如果你在使用 ROS 1 (Kinetic, Melodic, Noetic)
- 學術研究或簡單機器人專案
✅ 使用 ROS 2
- 如果你開發新的機器人專案
- 如果你需要多機、嵌入式、工業應用
- 如果你要長期維護的專案
沒有留言:
張貼留言