使用“ros2 param”命令行工具

ROS 2 中的参数可以通过一组服务来获取、设置、列出和描述,如 概念文档 中所述。 ros2 param 命令行工具是这些服务调用的包装器,可以轻松地从命令行操作参数。

ros2 param list

此命令将列出给定节点上的所有可用参数,如果未指定节点,则列出所有可发现节点上的所有可用参数。

要获取给定节点上的所有参数:

ros2 param list /my_node

获取系统中所有节点的所有参数(在复杂的网络上这可能需要很长时间):

ros2 param list

ros2 param get

此命令将获取特定节点上特定参数的值。

要获取节点上参数的值:

ros2 param get /my_node use_sim_time

ros2 param set

此命令将设置特定节点上特定参数的值。 对于大多数参数,新值的类型必须与现有类型相同。

要设置节点上参数的值:

ros2 param set /my_node use_sim_time false

命令行上传递的值是 YAML 格式的,因此可以使用任意 YAML 表达式。 但是,这也意味着某些表达式的解释可能与预期不同。 例如,如果节点“my_node”上的参数“my_string”是字符串类型,则以下操作将不起作用:

ros2 param set /my_node my_string off

这是因为 YAML 将“off”解释为布尔值,而“my_string”是字符串类型。 可以通过使用 YAML 语法明确设置字符串来解决此问题,例如:

ros param set /my_node my_string '!!str off'

此外,YAML 支持异构列表,包含(例如)字符串、布尔值和整数。 但是,ROS 2 参数不支持异构列表,因此任何具有多种类型的 YAML 列表都将被解释为字符串。 假设节点“my_node”上的参数“my_int_array”是整数数组类型,则以下操作将不起作用:

ros param set /my_node my_int_array '[foo,off,1]'

以下字符串类型的参数可以起作用:

ros param set /my_node my_string '[foo,off,1]'

ros2 param delete

此命令将从特定节点中删除参数。 但请注意,这只能删除动态参数(而不是声明的参数)。 有关更多信息,请参阅:doc:概念文档<../Concepts/Basic/About-Parameters>。

ros2 param delete /my_node my_string

ros2 param describe

此命令将提供特定节点上特定参数的文本描述:

ros2 param describe /my_node use_sim_time

ros2 param dump

此命令将以 YAML 文件格式打印出特定节点上的所有参数。 然后可以使用此命令的输出稍后使用相同的参数重新运行该节点:

ros2 param dump /my_node

ros2 param load

此命令将把 YAML 文件中的参数值加载到特定节点中。 也就是说,此命令可以在运行时重新加载由“ros2 param dump”转储出的值:

ros2 param load /my_node my_node.yaml