乐于分享
好东西不私藏

机器人系统——ROS2文档—认识参数

机器人系统——ROS2文档—认识参数

目标:学习如何在 ROS 2 中获取、设置、保存和重新加载参数。教程级别:入门级时间: 5 分钟

目录

  • 背景
  • 前置条件
  • 任务
    • 环境准备
    • 2 ros2 param list
    • 3 ros2 param get
    • 4 ros2 param set
    • 5 ros2 param dump
    • 6 ros2 param load
    • 节点启动时加载参数文件
  • 总结
  • 后续步骤

背景

    参数是节点的配置值。你可以将参数视为节点设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在 ROS2 中,每个节点维护自己的参数。有关参数的更多背景信息,请参阅概念文档

前置条件

本教程使用turtlesim 功能包。和往常一样,别忘了在打开的每个新终端中加载 ROS 2 环境

任务

环境准备

启动两个 turtlesim 节点:/turtlesim/teleop_turtle

打开一个新终端并运行:

$ ros2 run turtlesim turtlesim_node

打开另一个终端并运行:

$ ros2 run turtlesim turtle_teleop_key

2 ros2 param list

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

$ ros2 param list
/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

你会看到节点命名空间/teleop_turtle/turtlesim,后面跟着每个节点的参数。参数及其名称的命名空间使用点分隔,例如parameter_events.publisher.depth

每个节点都有参数use_sim_time;这并不是 turtlesim 独有的。根据名称,/turtlesim的参数似乎使用 RGB 颜色值决定了 turtlesim 窗口的背景颜色。

要确定参数的类型,可以使用ros2 param get

3 ros2 param get

要显示参数的类型和当前值,请使用命令:

$ ros2 param get <node_name> <parameter_name>

你也可以通过省略节点名称来查询所有节点上的参数:

$ ros2 param get <parameter_name>

让我们找出/turtlesim的参数background_g的当前值:

$ ros2 param get /turtlesim background_g
Integer value is: 86

现在你知道background_g保存的是一个整数值。如果你对background_rbackground_b运行相同的命令,你将分别得到值69255

你也可以检查所有节点上的use_sim_time参数:

$ ros2 param get use_sim_time

这将显示每个设置了该参数的节点的参数值。

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

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

总结

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

后续步骤

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

本文档完整翻译自 ROS 2 Lyrical 官方文档,仅用于学习交流。