使用 ros2 param
ROS 2 中的 parameter 可以通过一组服务(service)来获取、设置、列出和描述,如 概念文档 中所述。
ros2 param 命令行工具封装了这些服务调用,让你可以方便地从命令行操作 parameter。
ros2 param list
Section titled “ros2 param list”此命令将列出给定节点(node)上所有可用的 parameter;如果没有指定节点,则列出所有可发现节点上的 parameter。
要获取给定节点上的所有 parameter:
$ ros2 param list /my_node要获取系统中所有节点上的所有 parameter(在复杂的网络中这可能需要较长时间):
$ ros2 param listros2 param get
Section titled “ros2 param get”此命令用于获取特定 parameter 的值。 它可以查询单个节点,也可以在所有节点中搜索。
要获取所有节点上某个 parameter 的值:
$ ros2 param get use_sim_time这将显示每个设置了该 parameter 的节点对应的 parameter 值。
要获取特定节点上某个 parameter 的值:
$ ros2 param get /my_node use_sim_timeros2 param set
Section titled “ros2 param set”此命令用于在特定节点上设置某个 parameter 的值。 对于大多数 parameter,新值的类型必须与现有类型一致。
要在节点上设置 parameter 的值:
$ ros2 param set /my_node use_sim_time false命令行中传入的值使用 YAML 格式,因此可以使用任意 YAML 表达式。
但这也意味着某些表达式的解释方式可能与预期不同。
例如,如果节点 my_node 上的 parameter 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 parameter 不支持异构列表,因此任何包含多种类型的 YAML 列表都会被解释为字符串。
假设节点 my_node 上的 parameter my_int_array 是整数数组类型,以下命令将不起作用:
$ ros param set /my_node my_int_array '[foo,off,1]'而以下字符串类型的 parameter 则可以正常工作:
$ ros param set /my_node my_string '[foo,off,1]'ros2 param delete
Section titled “ros2 param delete”此命令用于删除特定节点上的某个 parameter。 但请注意,它只能删除动态 parameter(不能删除已声明的 parameter)。 更多详情请参阅 概念文档。
$ ros2 param delete /my_node my_stringros2 param describe
Section titled “ros2 param describe”此命令用于显示特定节点上某个 parameter 的文本描述:
$ ros2 param describe /my_node use_sim_timeros2 param dump
Section titled “ros2 param dump”此命令以 YAML 文件格式输出特定节点上的所有 parameter。 其输出可用于之后以相同 parameter 重新运行该节点:
$ ros2 param dump /my_noderos2 param load
Section titled “ros2 param load”此命令从 YAML 文件加载 parameter 值到特定节点。
也就是说,可以在运行时重新加载由 ros2 param dump 导出的值:
$ ros2 param load /my_node my_node.yaml