在ROS(Robot Operating System)中,arg
、param
和 rosparam
是用于 .launch
文件的不同标签,每个都有其特定的用途和功能。下面是它们的含义及区别:
-
arg
:arg
用于定义启动文件的输入参数。它们类似于函数的参数,可以在.launch
文件中多处使用。- 这些参数可以在启动文件中被设置默认值,也可以在运行时从外部传递给
.launch
文件。 arg
提供了一种方式来自定义启动过程,使得同一个.launch
文件可以在不同的情况下重复使用,每次使用不同的参数。
举个例子:
假设我们有一个机器人应用,需要在不同的模式下启动:模拟模式和实际硬件模式。我们可以使用 arg
来定义一个参数,比如叫做 mode
,然后根据这个参数的值来决定启动哪些节点。
<launch>
<!-- 定义一个参数 'mode',默认值为 'simulation' -->
<arg name="mode" default="simulation"/>
<!-- 使用条件语句根据 'mode' 参数的值决定执行哪些操作 -->
<group if="$(eval arg('mode') == 'simulation')">
<!-- 如果模式是 'simulation',启动模拟器相关节点 -->
<include file="$(find my_robot_package)/launch/simulator.launch"/>
</group>
<group unless="$(eval arg('mode') == 'simulation')">
<!-- 如果模式不是 'simulation',启动实际硬件相关节点 -->
<include file="$(find my_robot_package)/launch/hardware.launch"/>
</group>
<!-- 其他通用的节点或设置 -->
</launch>
-
param
:param
用于设置 ROS 参数服务器上的参数值。一旦设置,这些参数可以被 ROS 网络中的任何节点访问和使用。param
常用于为特定的节点提供配置信息,如机器人的特性或算法的调整参数。
举个例子:
假设我们有一个名为 robot_driver
的节点,它负责控制一个机器人,并且我们需要为这个节点设置一些特定的参数,例如机器人的最大速度和加速度。
<launch>
<!-- 设置 'robot_driver' 节点的参数 -->
<node name="robot_driver" pkg="my_robot_package" type="robot_driver">
<!-- 设置最大速度参数 -->
<param name="max_velocity" value="1.5" />
<!-- 设置最大加速度参数 -->
<param name="max_acceleration" value="0.8" />
<!-- 也可以加载参数文件中的参数 -->
<rosparam file="$(find my_robot_package)/config/robot_params.yaml" command="load"/>
</node>
</launch>
-
rosparam
:rosparam
用于从 YAML 文件加载参数到 ROS 参数服务器,或者将参数服务器上的参数保存到 YAML 文件中。- 它提供了一种便捷的方法来批量设置或保存大量参数,特别是对于复杂的配置。
rosparam
可以加载整个字典结构的参数,从而可以一次性设置多个参数。
-
<rosparam file="$(find my_package)/config/parameters.yaml" command="load"/>
总结来说,arg
在 .launch
文件中用于定义可配置的输入参数,param
用于设置单个参数值,而 rosparam
用于从文件加载或保存一组参数。这些标签提供了灵活的方式来配置和管理 ROS 系统中的参数和设置。