理解 ROS 2 参数
Parameter(参数)是每个节点在 ROS 计算图中存储的配置值。
本文将带你了解如何使用 ros2 param 命令行工具来查看、修改、保存和重新加载参数。
通过 Turtlesim 的动手练习,你将直观地看到参数如何在运行时控制节点的行为。
领域:Framework | 内容类型:教程 | 经验:初学者
ROS 计算图中的每个节点都存储着自己的一组配置值,称为参数(parameter)。
使用 ros2 param 命令可以在运行时获取、设置、保存和重新加载参数值。
更多信息请参见 关于参数。
你需要安装 turtlesim 功能包。
注意:每打开一个新终端时,不要忘记 source ROS。
更多信息请参见 配置环境。
启动两个 Turtlesim 节点:/turtlesim 和 /teleop_turtle。
打开一个新终端并运行:
$ ros2 run turtlesim turtlesim_node打开另一个终端并运行:
$ ros2 run turtlesim turtle_teleop_key2 查看节点的参数列表
Section titled “2 查看节点的参数列表”要查看节点的参数,打开一个新终端并运行:
$ 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:指定节点使用模拟时间还是计算机的时钟。background_r、background_g和background_b:定义 Turtlesim 窗口背景颜色的 RGB 值。
3 查看参数的类型和值
Section titled “3 查看参数的类型和值”要显示参数的类型和当前值,使用以下命令:
$ 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_r 和 background_b 运行相同的命令,应该分别返回值 69 和 255。
你也可以省略节点名称。
例如,你可以尝试查询 use_sim_time,因为每个节点都有这个参数:
$ ros2 param get use_sim_time该命令会显示每个拥有该参数的节点的值。
注意:省略节点名称仅在 Lyrical、Rolling 及更高版本的发行版中有效。 在较早的发行版中,
ros2 param get需要同时提供节点名称和参数名称。
4 在运行时修改参数值
Section titled “4 在运行时修改参数值”要在运行时修改参数的值,使用以下命令:
$ ros2 param set <node_name> <parameter_name> <value>修改 /turtlesim 的背景颜色:
$ ros2 param set /turtlesim background_r 150终端返回:
Set parameter successfulTurtlesim 窗口的背景颜色应该会发生变化,如下所示:

使用 set 命令设置的参数只在当前会话中生效,不会永久保存。
不过,你可以保存设置并在下次启动节点时重新加载。
参见下文的”将节点的参数保存到文件中”和”在节点启动时加载参数文件”两节。
5 将节点的参数保存到文件中
Section titled “5 将节点的参数保存到文件中”你可以将节点的参数保存到文件中。 当你以后想要使用相同的参数重新加载节点时,这会非常方便。 使用以下命令:
$ ros2 param dump <node_name>该命令默认输出到标准输出(stdout),但你也可以将参数值重定向到文件中以供日后使用。
要将当前 /turtlesim 的参数配置保存到文件 turtlesim.yaml 中,运行:
$ ros2 param dump /turtlesim > turtlesim.yaml当前工作目录下会创建一个新文件。
打开该文件,你会看到以下内容:
/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: false6 从文件加载节点参数
Section titled “6 从文件加载节点参数”你可以使用以下命令从文件向当前运行的节点加载参数:
$ ros2 param load <node_name> <parameter_file>要将使用 ros2 param dump 生成的 turtlesim.yaml 文件加载到 /turtlesim 节点的参数中,运行:
$ ros2 param load /turtlesim turtlesim.yaml终端返回:
Set parameter background_b successfulSet parameter background_g successfulSet parameter background_r successfulSet parameter qos_overrides./parameter_events.publisher.depth failed: parameter 'qos_overrides./parameter_events.publisher.depth' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.durability failed: parameter 'qos_overrides./parameter_events.publisher.durability' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.history failed: parameter 'qos_overrides./parameter_events.publisher.history' cannot be set because it is read-onlySet parameter qos_overrides./parameter_events.publisher.reliability failed: parameter 'qos_overrides./parameter_events.publisher.reliability' cannot be set because it is read-onlySet parameter use_sim_time successful注意: 只读参数只能在启动时修改,之后不能更改,这就是为什么
qos_overrides参数会出现一些failed警告。
7 在节点启动时加载参数文件
Section titled “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.yamlTurtlesim 窗口应该像往常一样出现,但背景颜色是你之前设置的紫色。
注意: 在节点启动时使用参数文件时,所有参数都会被更新,包括只读参数。
更多文章:
参数可以保存哪些类型? 参数可以是整数、浮点数、布尔值、字符串和列表。
参数的修改在节点重启后会保留吗?
不会。使用 ros2 param set 所做的修改仅对当前会话有效。
要使其永久保存,请使用 ros2 param dump 将值保存到 YAML 文件中,并在启动节点时加载该文件。
为什么使用 ros2 param load 加载某些参数会失败?
标记为只读的参数只能在节点启动时设置,不能在运行时设置。
qos_overrides 参数就是只读的,这就是为什么在向运行中的节点加载参数文件时会显示 failed 消息。
ros2 param dump 和 ros2 param load 有什么区别?
ros2 param dump 将节点当前的参数值保存到 YAML 文件。
ros2 param load 读取 YAML 文件并将值应用到当前运行的节点。