ROS中的 arg、param、rosparam

        在ROS(Robot Operating System)中,argparamrosparam 是用于 .launch 文件的不同标签,每个都有其特定的用途和功能。下面是它们的含义及区别:

  1. 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 可以加载整个字典结构的参数,从而可以一次性设置多个参数。
  1. <rosparam file="$(find my_package)/config/parameters.yaml" command="load"/>

总结来说arg.launch 文件中用于定义可配置的输入参数,param 用于设置单个参数值,而 rosparam 用于从文件加载或保存一组参数。这些标签提供了灵活的方式来配置和管理 ROS 系统中的参数和设置。