You're reading the documentation for a development version. For the latest released version, please have a look at Galactic.

理解 ROS2 参数

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

Tutorial level: Beginner

Time: 5 minutes

背景

参数是节点的配置值。您可以将参数视为节点设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在 ROS 2 中,每个节点维护自己的参数。所有参数都是动态可重新配置的,并基于 ROS 2 服务 构建。

先决条件

本教程使用 turtlesim 包

和往常一样,不要忘记在 你打开的每一个新终端中都输入 ROS 2

任务

1 设置

启动两个 turtlesim 节点 /turtlesim/teleop_turtle

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

ros2 run turtlesim turtlesim_node

打开另一个终端并运行:

ros2 run turtlesim turtle_teleop_key

2 ros2 param list

要查看属于您的节点的参数,打开一个新的终端并输入命令:

ros2 param list

您将看到节点名称空间 /teleop_turtle/turtlesim,后面跟着每个节点的参数:

/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 的参数使用 RGB 颜色值确定了 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_rbackground_b 上运行相同的命令,您将分别得到值 69255

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

该命令可以将节点当前所有的参数值“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
    qos_overrides:
      /parameter_events:
        publisher:
          depth: 1000
          durability: volatile
          history: keep_last
          reliability: reliable
    use_sim_time: false

如果您希望在将来用相同的参数重新加载节点,转储参数将非常方便。

6 ros2 param load

使用该命令可以将参数从文件加载到当前运行的节点:

ros2 param load <node_name> <parameter_file>

装载 ./turtlesim.yaml 文件生成的 ros2 参数转储到 /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 在节点启动时加载参数文件

在节点启动时加载参数文件:

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 窗口应该像往常一样显示,但是使用您之前设置的紫色背景。

注解

在这种情况下,参数在启动时被修改,因此指定的只读参数也将生效。

小结

节点有参数来定义它们的默认配置值。您可以从命令行 getset 参数值。您还可以将参数设置保存到一个文件中,以便在以后的会话中重新加载它们。

下一步

跳回到 ROS 2 的通信方法,在下一个教程中,你将学习 actions