目标: 学习如何在ROS 2 中获取、设置、保存以及重新加载参数。

背景知识

参数是节点的配置,也就是应用的设置。一个节点的参数可以是整型(int)、浮点数(float)、布尔类型(booleans)、字符串(string)以及列表(list)等。在ROS 2中,每个节点都有自己的参数。所有的参数都可以动态进行设置,并且可以跟ROS 2中的服务(service)建立起关系。

前提条件

这个教程,将会使用到turtlesim包,具体的安装过程可以看:turtlesim的安装。还是那句话,不要忘记在每一个新打开的终端source ROS 2的设置文件:设置ROS 2环境。

任务

1. 实验设置

启动两个turtlesim的节点,/teleop_turtle 和 /turtlesim。

打开一个新的终端,并且运行:

ros2 run turtlesim turtlesim_node

打开另外一个终端,并且运行:

ros2 run turtlesim turtle_teleop_key

2. ros2 param list

为了查看属于你的节点的参数,打开一个新的终端,然后输入下面的指令:

ros2 param list

你将会看到节点的命名空间,/teleop_turtle 和 /turtlesim,后面跟着每一个节点的参数:

/teleop_turtle:
  scale_angular
  scale_linear
  use_sim_time
/turtlesim:
  background_b
  background_g
  background_r
  use_sim_time

每个节点都有use_sim_time这个参数,它不是turtlesim独有的。

基于他们的名字,看起来像是/turtlesim的参数决定了小海龟的窗口的背景颜色。

为了了解一个参数的类型,你可以使用:ros2 param get。

3. ros2 param get

为了展示一个参数的类型和当前的值,使用下面的命令:

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

4 ros2 param set

为了能够在运行时改变一个参数的值,可以使用下面的命令:

ros2 param set <node_name> <parameter_name> <value>

让我们来试试改变turtlesim的背景颜色:

ros2 param set /turtlesim background_r 150

你的终端应该会返回下面的信息:

Set parameter successful

并且,你的turtlesim的窗口的背景颜色会改变,类似于下图:

../../_images/set.png

使用set命令来设置参数,只会在你当前的会话中改变它们,不是永久的。但是,你可以将你的改变的设置保存下来,下次启动一个节点的时候,重新加载它们。

5. ros2 param dump

你可以通过下面的命令,将一个节点当前的参数的值保存到一个文件中:

ros2 param dump <node_name>

比如,为了保存当前/turtlesim的参数的配置,输入下面的命令:

ros2 param dump /turtlesim

你的终端会返回下面的消息:

Saving to:  ./turtlesim.yaml

你将可以在你正在运行的工作空间的文件夹中发现一个新的文件。如果你打开这个文件,你将会看到下面的内容:

turtlesim:
  ros__parameters:
    background_b: 255
    background_g: 86
    background_r: 150
    use_sim_time: false

如果你后面想用同样的参数启动这个节点,保存下当前的参数是非常方便的。

6. 加载参数文件

为了使用你保存的参数值启动同样的节点,可以使用下面的命令:

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的窗口会正在打开,但是用的是你之前设置的紫色背景。

总结

节点可以通过参数类改变它的配置。你可以通过命令行来获取和设置参数的值。你还可以保存参数,在未来的启动的会话中加载这个参数文件。

下一步

后面我们再次回到ROS 2 的通讯方法,在下一个教程中,我们将讲解关于actions的内容。

如果你也对ROS 2以及机器人感兴趣,可以关注我或订阅我的专栏ROS 2或者机器人,我会持续进行更新。

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐