ROS2 C++ 调参——( 1 ) Param基础命令 和 如何配置 configs.yaml

如若有错,请多指教,哪里有疑惑也可以联系我,看到我会回复的



1 Param 基础命令

由于 ROS2 的 Param 命令相关的文章太多了,本文就不多做赘述了,这里给大家推荐一篇文章 ,这个博主讲的非常棒

2 如何 配置使用参数 和 配置 configs.yaml

config.yaml 的作用在我看来就是可以统一的管理所有参数的默认值,比较方便

2.1 cpp 内创建参数和得到参数

declare_parameter<int>("param_01", 1); // 声明并初始化参数
get_parameter("param_01", param_01);   // 参数的值赋给变量 param_01

这样写就默认会被 ROS2 检测到这个参数,并且各种命令都是可以使用的,通过命令改变参数的值是直接影响到程序中的,此外,本文的下面都是以参数 “param_01” 举例的

2.2 创建 configs.yaml

功能包目录下创建 configs/config.yaml 名字其实无所谓,通常为了规范阅读默认起这个名字
config.yaml 文件格式要这样写:

/Template:            #可执行文件名称,也就是 CMakeList 里 add_executable()函数定义的可执行文件
	ros__parameters:  #固定格式,要加这几句话
		param_01: 123456    #参数名称,冒号,空格,值;
		use_sim_time: false #注意:参数要在节点里面创建好

use_sim_time 参数:
这个参数是每一个节点中默认存在的,是 bool 类型,用于控制节点是否使用模拟时间,用 ROS2 提供的虚拟时间,对于同步和调式很有帮助,ChatGPT 是这样说的,具体目前没有实际使用过 ——2024 3 5 21.59 ICE

2.3 使用 config.yaml 文件

2.3.1 命令行启动

运行节点时候运行 config.yaml 文件
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>      

ros2 run Template Template --ros-args --params-file ./src/Template/configs/config.yaml    
运行节点后运行 config.yaml 文件
ros2 param load <node_name> <parameter_file>   

ros2 param load /Template ./src/Template/configs/config.yaml

2.3.2 Launch 文件启动

1. 配置 CMakeLists.txt 文件

在 CMakeLists.txt 里面导入 configs.yaml 文件

install(FILES configs/config.yaml
DESTINATION share/${PROJECT_NAME}/configs)

2.3.3 配置 Launch 文件

绝对路径配置 Launch 文件
  • 在 Launch 文件启动节点那个下面再加几行代码
parameters=[
	'/home/ice/Template_ICE/src/Template/configs/config.yaml',
],   # 这个是绝对路径,移植性比较差,较为简单

完整代码:

Node(
	package='Template',
	executable='Template',
	name='Template',
	output='screen',
	parameters=[
		'/home/ice/Template_ICE/src/Template/configs/config.yaml',
	],
 ),	
相对路径配置 Launch 文件

使用函数 get_package_share_directory() 来完成这个操作,这个函数是用来获取功能包的路径的

  1. 导入 get_package_share_directory 库
from ament_index_python.packages import get_package_share_directory
  1. 使用 get_package_share_directory() 这个函数获得包的路径并保存在一个变量里面
Template_pkg_share_dir = get_package_share_directory('Template')  # 等号前面的是变量名
  • 这行代码我放在了这里
    在这里插入图片描述
  1. 在 Launch 文件启动节点那个下面再加几行代码
parameters=[
	Template_pkg_share_dir + '/configs/config.yaml', # 这块的 Template_pkg_share_dir 是我上面定义的那个变量  
],

完整代码:

Node(
	package='Template',
	executable='Template',
	name='Template',
	output='screen',
	parameters=[
		Template_pkg_share_dir + '/configs/config.yaml',
	],
 ),	

3 三. Launch 文件不使用 config.yaml 文件操控参数值

  • 在 Launch 文件启动节点那个下面再加几行代码
 parameters=[
	{
		"param_01": 567,
		"use_sim_time": False,
	}
],

完整代码:

Node(
	package='Template',
	executable='Template',
	name='Template',
	output='screen',
	parameters=[
		{
			"param_01": 567,
			"use_sim_time": False,
		}
	],
 ),	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值