ROS 2 Iron 教程 第一章 CLI Tools 第六节 理解参数
前言
本系列文章是由笔者翻译自ROS 2 官方教程。笔者水平有限,如有错误,还请读者指正。
目标
学会如何得到,设置,保存以及重载 ROS 2 中的参数。
背景
参数是节点的配置值。你可以将参数当作是节点的设置项。一个节点可以将参数储存为整数型,浮点型,布尔型,字符串型,列表型。在 ROS 2 中,每个节点会使用自己的参数。
先决条件
本节教程使用 turtlesim 包。
一如既往,不要忘记在每个新终端中添加 ROS 2 启动文件。
任务
1 Setup (设置)
启动两个 turtlesim 节点, 和 </teleop_turtle> 。
打开一个新终端并运行:
ros2 run turtlesim turtlesim_node
打开另一个终端并运行:
ros2 run turtlesim turtle_teleop_key
2 ros2 param list (ROS 2 参数列表)
为了查看节点的参数,打开一个新终端并输入如下命令:
ros2 param list
你将会看到节点的命名空间,<teleop_turtle> 和 , 命名空间下面跟着每个节点的参数:
/teleop_turtle:
qos_overrides./parameter_events.publisher.depth
qos_overrides./parameter_events.publisher.durability
qos_overrides./parameter_events.publisher.history
qos_overrides./parameter_events.publisher.reliability
scale_angular
scale_linear
use_sim_time
/turtlesim:
background_b
background_g
background_r
qos_overrides./parameter_events.publisher.depth
qos_overrides./parameter_events.publisher.durability
qos_overrides./parameter_events.publisher.history
qos_overrides./parameter_events.publisher.reliability
use_sim_time
每个节点都有use_sim_time
参数;它并不是 turtlesim 所独有的。
基于它们的名字,可以推测出,turtlesim
的参数可以通过 RGB 颜色值来决定 turtlesim 窗口的背景颜色。
为了找到参数类型,你可以使用ros2 param get
。
3 ros2 param get (ROS 2 参数获取)
为了显示参数的当前值和类型,使用如下命令:
ros2 param get <node_name> <parameter_name>
让我们找到/turtlesim
background_g
参数的当前值:
ros2 param get /turtlesim background_g
返回内容为:
Integer value is: 86
现在你知道 background_g
存放着整数型的值。
如果你对background_r
和background_b
运行相同命令,你将会得到 69 和 255。
4 ros2 param set (ROS 2 参数设置)
为了在运行时改变参数的值,使用如下命令:
ros2 param set <node_name> <parameter_name> <value>
让我们改变 背景的颜色:
ros2 param set /turtlesim background_r 150
你的终端应该会返回这个消息:
Set parameter successful
与此同时,你的 turtlseim 窗口的背景颜色将会改变:
使用set
命令设置的参数仅仅在当前会话有效,并不是永久的。但是,你可以保存你的参数并在下次启动节点之前重载它们。
5 ros2 param dump (ROS 2 参数转存)
你可以通过如下命令查看一个节点的当前所有参数值:
ros2 param dump <node_name>
这个命令默认情况下使用标准输出打印,但你也可以将参数保存为文件通过重定位参数值。为了在turtlesim.yaml
文件中保存turtlesim
的当前参数,输入如下命令:
ros2 param dump /turtlesim > turtlesim.yaml
你将会在你的当前 shell 工作目录中发现一个新文件。如果你打开这个文件,你将会看到如下内容:
/turtlesim:
ros__parameters:
background_b: 255
background_g: 86
background_r: 150
qos_overrides:
/parameter_events:
publisher:
depth: 1000
durability: volatile
history: keep_last
reliability: reliable
use_sim_time: false
如果您想在将来使用相同的参数重新加载节点,转储参数会派上用场。
6 ros2 param load (ROS 2 参数加载)
你可以从文件中向运行中的节点加载参数,使用如下命令:
ros2 param load <node_name> <parameter_file>
为了加载ros2 param dump
生成的turtlesim.yaml
文件到turtlesim
节点的参数,输入如下命令:
ros2 param load /turtlesim turtlesim.yaml
你的终端将会返回消息:
Set parameter background_b successful
Set parameter background_g successful
Set parameter background_r successful
Set parameter qos_overrides./parameter_events.publisher.depth failed: parameter 'qos_overrides./parameter_events.publisher.depth' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.durability failed: parameter 'qos_overrides./parameter_events.publisher.durability' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.history failed: parameter 'qos_overrides./parameter_events.publisher.history' cannot be set because it is read-only
Set parameter qos_overrides./parameter_events.publisher.reliability failed: parameter 'qos_overrides./parameter_events.publisher.reliability' cannot be set because it is read-only
Set parameter use_sim_time successful
注意
只读的参数仅仅能在启动时编辑,而不能在启动后编辑,这就是在 "qos_overrides"参数有些警告。
7 Load parameter file on node startup (在节点启动时载入参数)
为了在启动一些节点的时候使用你保存的参数值,使用:
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
这是你启动 turtlesim 时使用的命令,只是多了标志-ros-args
和--params-file
,在它们后面添上你想要加载的文件。
停止运行中的 turtlesim 节点, 随后重载你保存的参数,使用如下命令:
ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml
turtlesim 窗口应该和往常一样出现,但背景颜色变为了之前设置的紫色。
注意
当一个参数文件被用于节点启动,包括可读参数在内的所有参数,将会被更新。
总结
节点使用参数来定义它们的默认设置值。你可使用命令行查看和设置参数值。你也可以将参数保存在文件中,以备在未来载入。