ROS2机器人开发入门|第6课:参数(parameter)是绑定在节点上的键值对配置项
1.什么是ROS2中的parameter参数
ROS2 的参数(parameter)是绑定在节点上的键值对配置项,用来给节点传递静态 / 动态配置,不用改代码、不用重新编译就能修改节点行为。
类似程序的配置文件,每个节点有自己独立的参数空间,不是全局变量。
Parameter:用来配置(颜色、分辨率、采样频率、仿真时间开关)。
2.参数支持的数据类型
| 类型 | 示例 |
|---|---|
| bool | true/false |
| int64 | 0,100 |
| float | 1.5,0.01 |
| string | “blue” |
| list | int64[], 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

常用场景
- 备份当前调好的参数:
ros2 param set临时改完,dump 保存,不然重启节点就丢失 - 作为启动文件参数模板:直接复制这份 yaml 放到 launch 里加载
- 对比两次参数差异:dump 两次,用 diff 看哪里被改动
- 给其他同类型节点复用参数
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 文件中的参数加载到运行中的节点 | 需要 | 否,只影响当前进程,重启即恢复 |
参数与全局变量的区别:
- 参数是绑定在某个节点上的键值对,每个节点有自己独立的参数空间,而全局变量在整个程序内共享同一份数据。
- 参数有明确的类型约束(bool、int64、float、string、list 等),并且可以通过
ros2 param命令在运行时查询和修改,全局变量没有这种外部可观测、可配置的接口。 - 参数的生命周期跟随节点进程,
set的修改重启即失效,需要靠dump/load或--params-file才能持久化,而全局变量的生命周期由程序自身的运行过程决定。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)