1.什么是ROS2中的parameter参数

ROS2 的参数(parameter)是绑定在节点上的键值对配置项,用来给节点传递静态 / 动态配置,不用改代码、不用重新编译就能修改节点行为。
类似程序的配置文件,每个节点有自己独立的参数空间,不是全局变量。
Parameter:用来配置(颜色、分辨率、采样频率、仿真时间开关)。

2.参数支持的数据类型

类型示例
booltrue/false
int640,100
float1.5,0.01
string“blue”
listint64[], double[], bool[], string[]

3.参数相关命令

像往常一样我们先启动两个官方小海龟节点:

ros2 run turtlesim turtlesim_node

另一个终端打开:

ros2 run turtlesim turtle_teleop_key

3.1 查看参数列表

ros2 param list

作用:列出当前系统里所有节点 + 节点下全部参数
在这里插入图片描述
/turtlesim:节点名称
background_b / background_g / background_r:背景色参数
定单个节点(只看这个节点的参数):

ros2 param list /turtlesim

3.2 查看节点下某个参数的当前值

ros2 param get <node_name> <parameter_name>

在这里插入图片描述

3.3 ros2 param set

作用:运行时修改节点的参数值,不需要重启节点;前提:该节点支持参数动态设置。

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

在这里插入图片描述
在这里插入图片描述
注意:临时生效
ros2 param set 修改只在当前节点进程内存里生效,节点重启就恢复原值,不会自动保存到 yaml 文件。

3.4 ros2 param dump

作用:把一个节点当前运行时的全部参数导出到 YAML 文件,用来备份、复用、调试参数。

ros2 param dump <node_name>

在这里插入图片描述

该命令默认将输出打印到标准输出 (stdout),但您也可以将参数值重定向到文件,保存以供后续使用。要将当前配置的/turtlesim参数保存到文件中turtlesim.yaml,请输入以下命令:

ros2 param dump /turtlesim > turtlesim.yaml

在这里插入图片描述
常用场景

  1. 备份当前调好的参数:ros2 param set 临时改完,dump 保存,不然重启节点就丢失
  2. 作为启动文件参数模板:直接复制这份 yaml 放到 launch 里加载
  3. 对比两次参数差异:dump 两次,用 diff 看哪里被改动
  4. 给其他同类型节点复用参数

3.5 ros2 param load

使用以下命令将参数从文件加载到当前正在运行的节点

ros2 param load <node_name> <parameter_file>
ros2 param load /turtlesim turtlesim.yaml

在这里插入图片描述

只读参数只能在启动时修改,之后不能修改,这就是为什么“qos_overrides”参数会有一些警告的原因。

3.6 节点启动时加载参数文件

作用:启动节点的时候,直接加载 YAML 参数文件

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

和 ros2 param load 的区别:

  • --params-file:启动阶段加载,参数在节点初始化时就读入;很多只读参数只能这种方式设置
  • ros2 param load:节点跑起来之后再动态加载,只读参数改不了
    在这里插入图片描述

4.总结

五个子命令的对比:

子命令作用是否需要节点运行修改是否持久化
ros2 param list列出所有节点及其参数名需要不涉及修改
ros2 param get查看某个节点下指定参数的当前值需要不涉及修改
ros2 param set运行时修改参数值需要否,仅进程内存生效,重启即恢复
ros2 param dump把节点当前全部参数导出为 YAML需要是,写入 YAML 文件后长期保存
ros2 param load把 YAML 文件中的参数加载到运行中的节点需要否,只影响当前进程,重启即恢复

参数与全局变量的区别:

  1. 参数是绑定在某个节点上的键值对,每个节点有自己独立的参数空间,而全局变量在整个程序内共享同一份数据。
  2. 参数有明确的类型约束(bool、int64、float、string、list 等),并且可以通过 ros2 param 命令在运行时查询和修改,全局变量没有这种外部可观测、可配置的接口。
  3. 参数的生命周期跟随节点进程,set 的修改重启即失效,需要靠 dump / load 或 --params-file 才能持久化,而全局变量的生命周期由程序自身的运行过程决定。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐