2025年6月26日 星期四

ROS2 (ros2 run vs ros2 launch ) 啟動 node 比較

 ros2 launchros2 run 是 ROS 2 中常用的兩個命令,但用途不同、適用場景也不同。


以下是詳細差異說明與使用情境比較:


🚀 ros2 run執行單一節點

🔹 功能:

執行某個 已安裝的單一節點(node 可執行檔)

🔹 語法:

bash
ros2 run <package_name> <executable_name>

🔹 使用場景:

  • 測試單一 node

  • 手動啟動簡單的 ROS 程式

  • script 開發測試、除錯

🔹 範例:

bash
ros2 run turtlesim turtlesim_node ros2 run my_package my_node_script

✅ 優點:

  • 快速、簡潔

  • 適合單個 node 測試或除錯


🚀 ros2 launch啟動一組節點或整體 ROS 系統

🔹 功能:

透過 .launch.py 啟動 一個或多個節點與參數配置,可控制 node 啟動順序、參數、namespace、remap、Gazebo、URDF 載入等。

🔹 語法:

bash
ros2 launch <package_name> <launch_file.launch.py>

🔹 使用場景:

  • 載入機器人模型 + Gazebo 模擬

  • 啟動一整套系統(感測器 + 控制 + 可視化)

  • 多 node 同時啟動

  • 整合開發流程

🔹 範例:

bash
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py ros2 launch my_robot_pkg bringup.launch.py

✅ 優點:

  • 統一管理與設定多個 node

  • 可使用參數、條件式邏輯

  • 適合實際部署與模擬使用


📊 總結比較表

功能比較ros2 runros2 launch
啟動內容   單一 node一個或多個 node + 配置
設定參數   不支援(或需手動指定)可使用 launch arguments、YAML 等
啟動 Gazebo 等   ❌ 不行✅ 可以整合 URDF、RViz、Gazebo
適合開發階段   單一 node 測試、除錯整體系統部署、模擬或測試
檔案格式   無需特殊檔案(只需 node)需要 .launch.py 檔案

🛠 補充範例:一個最簡的 launch file

python
# my_package/launch/display.launch.py from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='my_package', executable='my_node', name='my_node', output='screen' ) ])

📌 結論

  • ros2 run
    當你只想快速測試一個 node 是否能動作

  • ros2 launch
    當你要執行整體系統,或需要更複雜的設定(例如機器人模型、模擬、GUI、參數檔)




沒有留言:

張貼留言