理解ROS 2参数

目标: 学习如何在ROS 2中获取、设置、保存和重新加载参数。 [机器人@7812]

教程级别: 初学者 [Alyssa@7088]

时间: 5分钟 [Alyssa@6714]

背景

参数是节点的配置。您可以将参数视为节点设置。节点可以将参数存储为整数、浮点数、布尔、字符串和列表。在ROS 2中,每个节点维护自己的参数。有关参数的更多背景信息,请参见 the concept document[小鱼@7813]

先决条件

本教程使用 turtlesim 功能包[小鱼@7814]

和往常一样,不要忘记在 every new terminal you open 中源文件ROS 2。 [待校准@7566]

任务

1设置 [待校准@7567]

启动两个turtlesim节点, /turtlesim/teleop_turtle[待校准@7815]

打开新终端并运行: [待校准@7339]

ros2 run turtlesim turtlesim_node

打开另一个终端并运行: [待校准@7816]

ros2 run turtlesim turtle_teleop_key

2 ros2参数列表

要查看属于节点的参数,请打开新终端并输入以下命令: [待校准@7818]

ros2 param list

您将看到节点命名空间, /teleop_turtle/turtlesim ,后面是每个节点的参数: [待校准@7819]

/teleop_turtle:
  scale_angular
  scale_linear
  use_sim_time
/turtlesim:
  background_b
  background_g
  background_r
  use_sim_time

每个节点都有参数 use_sim_time ; 它不是turtlesim独有的。 [待校准@7820]

根据它们的名称,看起来 /turtlesim 的参数使用RGB颜色值确定turtlesim窗口的背景颜色。 [待校准@7821]

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

3 ros2参数获取

要显示参数的类型和当前值,请使用以下命令: [待校准@7824]

ros2 param get <node_name> <parameter_name>

让我们找出 /turtlesim 参数 background_g 的当前值: [待校准@7825]

ros2 param get /turtlesim background_g

它将返回参数值: [小鱼@7826]

Integer value is: 86

现在你知道 background_g 有一个整数值。 [待校准@7827]

如果你在 background_rbackground_b 上运行相同的命令,你将分别得到 69255 的值。 [待校准@7828]

4 ros2参数设置

要在运行时更改参数的值,请使用以下命令: [待校准@7830]

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

让我们改变 /turtlesim 的背景色: [待校准@7831]

ros2 param set /turtlesim background_r 150

您的终端应返回以下消息: [待校准@7832]

Set parameter successful

turtlesim窗口的背景应更改颜色: [待校准@7833]

../../_images/set.png

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

5 ros2参数转储 [待校准@7835]

您可以使用以下命令将节点的所有当前参数值 “转储” 到文件中,以便以后保存: [待校准@7836]

ros2 param dump <node_name>

要保存 /turtlesim 参数的当前配置,请输入以下命令: [待校准@7837]

ros2 param dump /turtlesim

您的终端将返回消息: [待校准@7838]

Saving to:  ./turtlesim.yaml

您将在运行工作区的目录中找到一个新文件。如果打开此文件,您将看到以下内容: [待校准@7839]

turtlesim:
  ros__parameters:
    background_b: 255
    background_g: 86
    background_r: 150
    use_sim_time: false

如果将来要使用相同的参数重新加载节点,则转储参数会派上用场。 [待校准@7840]

6 ros2参数加载 [待校准@7841]

您可以使用以下命令将参数从文件加载到当前正在运行的节点: [待校准@7842]

ros2 param load <node_name> <parameter_file>

加载。用 ros2 param dump 生成的/turtlesim.yaml文件转换为 /turtlesim 节点的参数,输入命令: [待校准@7843]

ros2 param load /turtlesim ./turtlesim.yaml

您的终端将返回消息: [待校准@7838]

Set parameter background_b successful
Set parameter background_g successful
Set parameter background_r successful
Set parameter use_sim_time successful

7节点启动时加载参数文件 [待校准@7844]

要使用保存的参数值启动同一节点,请使用: [待校准@7845]

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

这是启动turtlesim时始终使用的相同命令,添加了标记 --ros-args--params-file ,然后是要加载的文件。 [待校准@7846]

停止正在运行的turtlesim节点,以便您可以尝试使用保存的参数重新加载它,使用: [待校准@7847]

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

turtlesim窗口应照常显示,但背景为您之前设置的紫色。 [待校准@7848]

总结

节点具有用于定义其默认配置值的参数。您可以从命令行获取 getset 的参数值。您还可以将参数设置保存到文件中,以便在以后的会话中重新加载它们。 [待校准@7849]

下一步

跳回到ROS 2通讯方法,在下一个教程你将了解 actions[待校准@7850]