什么是ROS2中的——parameters

135 阅读4分钟

ROS中的参数与各个节点相关联。参数用于在启动时(和运行时)配置节点,而无需更改代码。参数的生存期与节点的生存期相关联(尽管节点可以实现某种持久性以在重新启动后重新加载值)。

参数按节点名称、节点命名空间、参数名称和参数命名空间寻址。提供参数命名空间是可选的。

每个参数由一个键、一个值和一个描述符组成。键是一个字符串,值是以下类型之一:bool、int64、float64、string、byte[]、bool[]、int64[]、float64[] 或 string[]。默认情况下,所有描述符均为空,但可以包含参数说明、值范围、类型信息和其他约束。

背景

参数是节点的配置值。可以将参数视为节点设置。节点可以将参数存储为整数、浮点值、布尔值、字符串和列表。在ROS2中,每个节点都维护自己的参数。

练习使用ROS2中的参数

启动

启动两个turtlesim节点 , /turtlesim and /teleop_turtle.

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

ros2 run turtlesim turtlesim_node

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

ros2 run turtlesim turtle_teleop_key

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

每个节点都有参数use_sim_time;这不是turtlesim独有的。 根据它们的名称,可以看出/turtlesim的参数使用RGB颜色值来确定turtlesim窗口的背景颜色。 要确定参数的类型,可以使用ros2 param get.

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。

ros2 param set

要在运行时更改参数的值,请使用以下语法:

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

改变/turtlesim的背景颜色

ros2 param set /turtlesim background_r 150

终端返回消息:

Set parameter successful

image.png

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

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

如果将来要使用相同的参数重新加载节点,则转储参数非常有用。

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

节点启动时加载参数文件

要使用保存的参数值启动同一节点,请使用:

ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>

通常用于启动turtlesim的命令相同,添加了标志--ros args和--params文件,然后是要加载的文件。 停止运行turtlesim节点,并尝试使用保存的参数重新加载它,使用:

ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml

turtlesim窗口应该像往常一样出现,但背景是之前设置的紫色。

image.png

总结

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