2025年7月2日 星期三

ROS 1 和 ROS 2 在 launch 格式的差異

 ROS 1 和 ROS 2 在 launch 格式上確實有很大的差異。

這是一個非常重要的區別,需要理解才能正確地設定和執行機器人應用。

ROS 1 Launch 格式:

  • XML 格式: ROS 1 的 launch 檔案是 XML 文件。
  • param_file 標籤: 允許你載入參數文件。
  • node 標籤: 用於宣告和配置 ROS nodes。
  • 相對較高的複雜度: 由於 XML 格式,launch 檔案通常比較冗長和複雜。

ROS 2 Launch 格式:

  • Python 腳本: ROS 2 的 launch 檔案是 Python 腳本,使用 launch 套件。
  • launch 模組: 導入 launch 模組以使用其提供的功能。
  • 更清晰的結構: Python 腳本通常比 XML 檔案更容易閱讀和理解。
  • launch_nodeslaunch_parameters: 使用這些函數來宣告和配置 ROS nodes。
  • 更強大的功能: Python 腳本允許你使用更複雜的邏輯和條件來設定 launch。

主要差異對比:

特徵
ROS 1 Launch (XML)
ROS 2 Launch (Python)
檔案格式
XML
Python
結構
較複雜
較清晰
參數載入
param_file
load_parameters
Node 定義
node
launch_nodes
可擴展性
有限
更強大
程式邏輯
有限
更靈活

範例:

ROS 1 Launch 檔案 (robot_launch.xml):

xml
<launch>
<param name="/robot_name" value="my_robot"/>
<node pkg="my_package" type="robot_node" name="robot_node" output="screen">
<param name="robot_name" value="/robot_name"/>
</node>
</launch>

ROS 2 Launch 檔案 (robot_launch.py):

python
from launch import LaunchDescription
from launch.substitutions import PathJoinSubstitution
from launch.nodes import Node

def generate_launch_description():
ld = LaunchDescription()

robot_name = "my_robot"

node = Node(
package="my_package",
node_executable="robot_node",
name="robot_node",
parameters={"robot_name": robot_name},
)

ld.add_node(node)
return ld

轉譯:

你必須使用不同的指令來執行 ROS 1 和 ROS 2 的 launch 檔案。

  • ROS 1: roslaunch my_package robot_launch.xml
  • ROS 2: ros2 launch my_package robot_launch.py

轉變注意事項:

  • 在從 ROS 1 遷移到 ROS 2 時,你需要將現有的 launch 檔案重新編寫成 Python 腳本。
  • ROS 2 的 launch 檔案更加結構化,需要更熟悉 Python 程式設計。
  • ROS 2 的 launch 功能更強大,可以提供更靈活的配置選項。

總結來說,ROS 2 的 launch 格式是一個重要的轉變,它提供了更清晰、

更結構化和更強大的配置選項。

 熟悉 ROS 2 的 launch 格式對於開發機器人應用至關重要。



沒有留言:

張貼留言