使用``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

此命令将从特定节点中删除一个参数。但是,请注意,这只能删除动态参数(未声明的参数)。有关更多信息,请参阅 概念文档

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