Understanding parameters:理解参数(Parameter)


参考官方文档: Understanding parameters

背景

参数是一个节点的配置值。你可以把参数看成是节点的设置。节点可以将参数存储为整数、浮点数、布尔值、字符串和列表。在ROS 2中,每个节点都维护自己的参数。关于参数的更多背景,请看About parameters in ROS 2

1. 准备环境

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

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_r 和 background_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 ,后面是你要加载的文件。

例如:

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

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

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

猜你喜欢

转载自blog.csdn.net/qq_35395195/article/details/129638087
今日推荐