ROS2 Jazzy 理解参数:获取、设置、保存和重新加载参数

339 阅读4分钟

背景知识

参数是节点的配置值。你可以把参数看作是节点的设置。一个节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在 ROS 2 中,每个节点都维护着自己的参数。

准备

这一节中,同样不要忘记在使用ROS2前需要先设置环境:

# Replace ".bash" with your shell if you're not using bash
# Possible values are: setup.bash, setup.sh, setup.zsh
source /opt/ros/jazzy/setup.bash

任务

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 节点所独有。 从参数名称来看,/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 运行相同的命令,将分别得到值 69 和 255。

4. ros2 param set 命令

要在运行时更改参数的值,使用以下命令:

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

让我们来更改 /turtlesim 节点的背景颜色:

ros2 param set /turtlesim background_r 150

你的终端应该会返回以下消息:

Set parameter successful

并且 turtlesim 窗口的背景颜色应该会发生变化:

使用 set 命令设置参数只会在当前会话中更改参数值,不会永久更改。不过,你可以保存设置并在下次启动节点时重新加载。

5. ros2 param dump 命令

你可以使用以下命令查看节点的所有参数值:

ros2 param dump <node_name>

该命令默认会将参数值打印到标准输出(stdout),不过你也可以将参数值重定向到一个文件中,以便日后保存使用。比如,要将 /turtlesim 节点的当前参数配置保存到 turtlesim.yaml 文件中,输入以下命令:

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 命令

你可以使用以下命令将文件中的参数加载到当前正在运行的节点中:

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. 在节点启动时加载参数文件

要使用保存的参数值启动相同的节点,可以使用以下命令:

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 窗口应该会像往常一样出现,但背景颜色会是你之前设置的紫色。

需要注意:如果在节点启动时使用参数文件,则所有参数(包括只读参数)都会被更新。

总结

节点通过参数来定义它的默认配置值。你可以从命令行获取和设置参数值。你还可以将参数设置保存到文件中,以便在未来的会话中重新加载。


关注【智践行】公众号,发送 【机器人】 获得机器人经典学习资料