概念
这一知识点,应该很好理解,参数就是节点的属性,比如猫科动物,它所拥有的属性(参数)有胡子、能伸缩的爪子、随光线缩放自如的瞳孔、夜视能力、优秀的弹跳力、萌等等。ROS节点中参数支持的数据类型有整型、浮点型、布尔型、字符串以及列表。
动动手
启动小海龟
小海龟又要出场了,我们按下面的命令分别启动小海龟节点和控制节点,
$ros2 run turtlesim turtlesim_node
$ros2 run turtlesim turtle_teleop_key
参数列表
如果想查看我们的活动节点都有哪些参数,我们可以通过下面的命令查看:
$ros2 param list
上图罗列出了/teleop_turtle和/turtlesim节点的所有属性情况,其中use_sim_time是所有ROS节点都拥有的一个参数,不单单/turtlesim和/teleop_turtle这俩节点才具有。另外/turtlesim节点有可以控制背景颜色的参数(background_b、background_g、background_r)。
获取参数值
紧接上文,如果我们想获取到当前小海龟背后的海洋颜色RGB值,该怎么办呢?
$ros2 param get <node_name> <parameter_name>
套用下上面的命令我们来看看小海龟背景中RGB这些个参数值是多少。
$ros2 param get /turtlesim background_g
设置参数值
除了获取参数,我们还能主动设置参数(节点运行时),它的命令是这样的:
$ros2 param set <node_name> <parameter_name> <value>
比如我们改变下小海龟的背景,我们让其显得稍稍紫一点,可以这样:
$ros2 param set /turtlesim background_r 150
当我们动起小心思想把参数值设置成了浮点数的时候(以为能像比如C/C++等语言能自动类型转换),它立即警告我们不能这样,你俩不配!
当前我们修改设置参数都是临时性的(生命为当前这个会话窗口的存活时间),如果想永久性设置参数,我们可以通过把参数保存到某个文件(命令创建的,如xx.yaml)中,在下次节点启动的时候加载这个参数文件即可。我们继续。
节点全参数值
我们要查看某个活动节点的所有参数值,可以通过:
$ros2 param dump <node_name>
来达到目的(原文对该知识点的小标题是dump,我实在没找到合适的词去翻译它,我们取其意即可,所谓信雅达,信(本意)还是在第一位的), 我们试试:
刚刚上一小节也提到了保存参数到文件的事,我们还是可以利用上面的dump命令来实现,只不过我们还需要一个'>',熟悉Linux的同学应该不陌生哈。看看下面,我们将节点参数内容都保存进了一个我们取名为turtlesim.yaml的文件中(保存路径放在了桌面,当然你可以在命令行指定其他路径):
$ros2 param dump /turtlesim > turtlesim.yaml
参数运行时加载
我们来试试加载读取刚刚保存的turtlesim.yaml参数文件,命令如下:
$ros2 param load <node_name> <parameter_file>
但是加载之前,我们手动修改一下该参数文件的一些属性值,比如将background_r改为180,看看加载看看效果:
$ros2 param load /turtlesim turtlesim.yaml
额,看起来是更紫一点了,但是还有几个失败的参数加载,这些参数是只读参数,只能在启动时修改而不能在启动后修改,所以失败。那我们就关掉/turtlesim节点,来一次启动时加载参数文件。
参数启动时加载
$ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
嗯,没错了啊。说明在启动时通过加载读取参数文件的方式,节点所有的参数都会被更新(对于只读参数也是)。
本篇完。