使用RQT 动态配置ROS程序参数

针对于文件为例

该文件名称为:pose_detection.cfg

#!/usr/bin/env python
PACKAGE = "pole_based_localization" #名称需要相同
#导包过程
from dynamic_reconfigure.parameter_generator_catkin import *  #引入dynamic_reconfigure的头文件 使用/usr/bin/env下的python编译器进行解析

gen = ParameterGenerator()  #用于创建生成一个参数生成器 并通过下面的.add函数增加动态配置的参数

gen.add("use_gps", bool_t, 0, "Toggle use of gps sensor", True)
gen.add("max_positional_correction", double_t, 0, "max applied positional correction per step [m]", 0.2, 0.0, 1.0)
gen.add("max_angular_correction", double_t, 0, "max applied angular correction per step [rad]", 0.0002, 0.0, 0.05)
gen.add("pose_correction_dampening", double_t, 0, "dampening of cached positional correction [%]", 2.5, 0, 10)

exit(gen.generate(PACKAGE, "pole_based_localization", "pole_position_correction"))

ROS-dynamic_reconfigure动态参数可以使程序在运行中实时的更改参数的大小——使用cfg需要更改文件的读写权限
cfg文件与yaml文件的区别:

能够在调试机器人的时候动态的修改机器人的参数,不需要重新进行编译,这也是区别于在静态读取本地yaml文件的参数的区别

chmod a+x ./pose_detection.cfg

创建cfg动态参数配置文件

PACKAGE: PACKAGE = “pole_based_localization”。这里需要明确:这里双引号中的package name需要与CMAKELIST中的package的名称相同,也就是project(pole_based_localization)
gen = ParameterGenerator(): 用于创建动态参数的生成器,方便后面能够通过**.add**函数添加动态配置的参数信息。
.add函数的格式:

.add(name,parmeterType,level,description,default,min,max)
gen.add("max_positional_correction", double_t, 0, "max applied positional correction per step [m]", 0.2, 0.0, 1.0)
//创建的动态参数名称为name(max_positional_correction)
//动态参数的存储值类型为parmeterType(double_t)
//level - 稍后将传递给动态重新配置回调的位掩码。当回调被调用时,所有已更改参数的级别值将被或运算在一起,并将结果值传递给回调。
//这个参数是一个位掩码(bitmask),用于指定参数的行为。在这个例子中,0表示没有任何特殊的行为。位掩码是一种用于启用或禁用某些特性的方法,每个位代表一个特性,可以通过设置不同的位来启用或禁用相应的特性。
//description 对应于:这是参数的描述,它会在动态重配置的界面中显示,帮助用户理解这个参数的作用。
// default对应于:这是参数的默认值,如果用户没有修改它,那么这个参数就会使用这个值。
//min: 这是参数的最小值,用户不能将参数设置得低于这个值。
//max: 这是参数的最大值,用户不能将参数设置得高于这个值。

在这里插入图片描述
**gen.generate函数:**第一个参数是pakcage功能包的名称(生成的config文件的命名空间,用来调用相关的参数),第二个参数是可以在其中运行的节点的名称,第三个参数是生成的文件名称的前缀
第二个是对应于launch中的name运行节点的名称,第三个就是我们在.cpp中用来饮用condig编译生成后的.h头文件的前缀名称
在这里插入图片描述

实现在CMakeList中成功编译.cfg文件

首先需要在对应的cmakelist文件中的find_package函数以及catkin_package中加入dynamic_reconfigure包的依赖,用来成功找到dynamic_reconfigure包以及在catkin_make中调用dynamic_reconfigure包,同时需要在package.xml文件中添加dynamic_reconfigure包的依赖

find_package(catkin REQUIRED COMPONENTS
	geometry_msgs
	rospy
	sensor_msgs
	std_msgs
	visualization_msgs
	roscpp
    geodesy
	pcl_ros
	pcl_conversions
	message_generation
	tf2
	tf2_ros
	tf2_msgs
    dynamic_reconfigure
)


catkin_package(
	CATKIN_DEPENDS
	message_runtime
	sensor_msgs
	dynamic_reconfigure
)

调用generate_dynamic_reconfigure_options函数,在括号内加入我们自定义的.cfg信息,其实原理与msg相同,该函数用来生成动态配置参数的配置信息

generate_dynamic_reconfigure_options(
  cfg/pole_detection.cfg
  cfg/pole_recognition.cfg
  cfg/pole_position_correction.cfg
)

然后在add_dependencies中添加依赖项,也就是针对于通过add_executable中的可执行文件的节点,添加依赖项目信息

add_library(${PROJECT_NAME}_recognizer_nodelet
	src/pole_recognition/Recognizer.cpp
)
add_dependencies(${PROJECT_NAME}_recognizer_nodelet ${PROJECT_NAME}_gencfg)

最后在.cpp主函数文件中引入通过dynamic_reconfigure参数服务器生成的动态参数头文件
在这里插入图片描述

#include <dynamic_reconfigure/server.h>
#include <pole_based_localization/pole_recognitionConfig.h>

代码的第一行:第一个是dynamic_reconfigure服务器的头文件,用于创建服务器
代码的第二行:我们自己写的.cfg文件生成的头文件,用于使用我们定义的参数(config名称空间/gen.generate第三个参数的头文件文件名前缀.h)

    boost::shared_ptr<dynamic_reconfigure::Server<pole_based_localization::pole_position_correctionConfig> > mConfigServer;
exit(gen.generate(PACKAGE, "pole_based_localization", "pole_position_correction"))

pole_based_localization::pole_position_correctionConfig的由来来自于PACKAGE::pole_position_correctionConfig
使用rqt_reconfigure需要调用调试参数的回调函数,因此需要自己编写。
顶一下
参考

参考

这里注意,在CLION中即使在terminal编译通过的项目,可能在clion中打开,仍然显示找不到msg以及cfg生成的头文件,此时需要找到对应的窗口,根据cmakelist中的gencfg以及genmsg的package node的名称编译一下,就可以排除报错!!!
在这里插入图片描述点小锤子build一下即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值