用途:调试时(尤其在导航和建图应用中)需要经常修改程序中的参数值,这时无论时修改命令行,还是编写固定修改参数的可执行文件,都无法满足要求。ROS为我们提供了动态参数设置机制。

一、创建cfg文件

创建动态参数ROS包(名字:book_dynamic_param),在创建ros包的时候注意加入依赖项roscpp, rospy, dynamic_reconfigure。在功能包下新建cfg文件夹,并创建DynamicParam.cfg文件,内容如下:

#!/usr/bin/env python
PACKAGE = "book_dynamic_param"from dynamic_reconfigure.parameter_generator_catkin import *gen = ParameterGenerator()gen.add("IntDyParam",int_t,0,"An Int Parameter",0,0,9)
gen.add("DouDyParam",double_t,0,"A Double Parameter",1.5,0,9)
gen.add("StrDyParam",str_t,0,"A String Parameter","Hello,I'm Robot!")
gen.add("BoolDyParam",bool_t,0,"A Bool Parameter",True)student_info = gen.enum([gen.const("Name",str_t,"LiLei","Name Information"),gen.const("Sex",str_t,"Man","Sex Information"),gen.const("Age",str_t,"18","Age Information")],"A set contain a student information")gen.add("StudentInfo",str_t,0,"A studenet information set","LiLei",edit_method=student_info)
exit(gen.generate(PACKAGE,"node_DynamicParam","DynamicParam"))   

该配置文件使用Python语言实现,首先需要导入dynamic_reconfigure功能包提供参数生成器,通过gen = ParameterGenerator()创建生成器。这里定义了四个不同类型的参数:int_t、double_t、str_t、bool_t。使用参数生成器的add(name, type, level, description, default, min, max) 方法生成参数,具体用法如下:

(1)name : 参数名,使用字符串描述

(2)type: 定义参数类型,可以是int_t, double_t, str_t, bool_t。

(3)level: 需要传入参数动态配置回调函数中的掩码,在回调函数中会修改所有参数的掩码,表示参数已经进行修改。

(4)description: 描述参数作用的字符串。

(5)default: 设置参数的默认值。

(6)min: 可选,设置参数的最小值,对于字符串和布尔类型值不生效。

(7)max: 可选,设置参数的最大值,对于字符串和布尔类型值不生效。

然后利用gen.enum方法生成一个枚举类型值,最后通过exit生成所有与C++和python相关的文件并推出程序。

exit(gen.generate(PACKAGE,"node_DynamicParam","DynamicParam")) 中,第二个参数表示动态参数运行的节点名,第三个参数是生成文件所使用的前缀,需要和配置文件DynamicParam.cfg名称相同。

配置文件创建完成后,需要为配置文件添加可执行权限,通过执行如下命令实现:

chmod a+x cfg/DynamicParam.cfg

在CMakeLists.txt文件添加以下内容:

generate_dynamic_reconfigure_options(cfg/DynamicParam.cfg
)
add_dependencies(PubForBeginner ${PROJECT_NAME}_gencfg)
//注意:PubForBeginner 是工作空间已经编译好的可执行节点,我们可以根据自己
//工作空间中的节点任意替换

在....../devel/include/book_dynamic_param文件夹可以看到自动生成的DynamicParamConfig.h

二、创建动态参数设置可执行文件

book_dyparam.cpp

#include "ros/ros.h"
#include "dynamic_reconfigure/server.h"
#include "book_dynamic_param/DynamicParamConfig.h"//define call back function
void paramCallback(book_dynamic_param::DynamicParamConfig& config,uint32_t level)
{ROS_INFO("Request: %d %f %s %s %s",config.IntDyParam,config.DouDyParam,config.StrDyParam.c_str(),config.BoolDyParam?"True":"False",config.StudentInfo.c_str());
}int main(int argc, char** argv)
{//initial and name noderos::init(argc,argv,"node_DynamicParam");//create node handledynamic_reconfigure::Server<book_dynamic_param::DynamicParamConfig> server;dynamic_reconfigure::Server<book_dynamic_param::DynamicParamConfig>::CallbackType f;f = boost::bind(&paramCallback,_1,_2);server.setCallback(f);ros::spin();return 0;
}

注解:

(1)dynamic_reconfigure::Server<book_dynamic_param::DynamicParamConfig> server:创建一个参数动态配置服务端实例,参数配置的类型就是配置文件中描述的类型。该服务端实例会监听客户端的参数配置请求。

(2)dynamic_reconfigure::Server<book_dynamic_param::DynamicParamConfig>::CallbackType f:定义回调函数,并将回调函数和服务端绑定,当客户端请求修改参数时,服务端即可跳转到回调函数中进行处理。回调函数有两个传入参数,一个是新的参数配置值,另一个是表示参数修改的掩码。

三、我的CMakeList.txt文件

cmake_minimum_required(VERSION 2.8.3)
project(book_dynamic_param)find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs dynamic_reconfigure)generate_dynamic_reconfigure_options(cfg/DynamicParam.cfg
)
catkin_package(
)include_directories(include ${catkin_INCLUDE_DIRS}
)add_executable(book_dyparamsrc/book_dyparam.cpp
)
add_dependencies(book_dyparam ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(book_dyparam${catkin_LIBRARIES}
)

测试:

nanorobot@ubuntu:~/catkin_test$ rosrun book_dynamic_param book_dyparam

启动可视化界面:

rosrun rqt_reconfigure rqt_reconfigure

界面如下:

如图在可视化界面滑动滑柄并勾选不同参数,可以看到如下信息打印:

[ INFO] [1630324846.122919483]: Request: 2 2.700000 Hello,I'm Robot! True Man
[ INFO] [1630324856.262749374]: Request: 4 2.700000 Hello,I'm Robot! True Man
[ INFO] [1630324857.365995972]: Request: 4 5.400000 Hello,I'm Robot! True Man
[ INFO] [1630324860.309818882]: Request: 4 5.400000 Hello,I'm Robot! False Man
[ INFO] [1630324861.333899967]: Request: 4 5.400000 Hello,I'm Robot! True Man
[ INFO] [1630324862.863199146]: Request: 4 5.400000 Hello,I'm Robot! True 18

refenence:本文参考《ROS机器人编程与SLAM算法解析指南》书中例程实现。

[ROS]动态参数设置-可视化调试-创建cfg文件相关推荐

  1. C++编写Config类ROS动态参数总结

    文章目录 1.C++编写Config类 1.1Config的头文件 1.2Config的cpp文件 1.3调用Config的类读取txt 2.ROS中的Config动态参数 2.1动态参数编写 2.2 ...

  2. postman 动态参数设置

    postman 动态参数设置 1.设置动态参数 2.生成参数脚本代码

  3. yocs_velocity_smoother速度平滑包的动态参数设置

    ROS功能:动态重配置实用程序;浅显说就是在程序外部动态改变变量值,可以不用重新编译程序,就是说可以快速调参,其中需要用参数服务器,服务和主题. 配置文件保存在和src同级的文件夹cfg中,yocs_ ...

  4. 【Android RTMP】音频数据采集编码 ( FAAC 音频编码参数设置 | FAAC 编码器创建 | 获取编码器参数 | 设置 AAC 编码规格 | 设置编码器输入输出参数 )

    文章目录 一. 头文件.成员变量准备 二. 创建 FAAC 编码器 三. 获取并设置 FAAC 编码器参数 四. 设置 FAAC 编码器编码标准 五. 设置 FAAC 编码器 AAC 编码规格 六. ...

  5. 基于libVLC的参数设置可视化视频播放器

    使用libVLC开发的一个简单的图形界面的视频播放器. 程序主要运行代码如下: void CplayerGUIDlg::OnBnClickedStart() {CStringW cstr_url;#i ...

  6. 【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )

    文章目录 安卓直播推流专栏博客总结 一. Android 端数据采集涉及到的相关概念 二. Camera 预览图像尺寸设置 三. 获取摄像头采集的数据格式 安卓直播推流专栏博客总结 Android R ...

  7. 大恒相机开发实践(3)——参数设置

    目录 前言 正文 初始化配置信息 创建Xml节点 创建节点下面的Attribute 总结 前言 这一部分的内容放在如何生成大恒相机的参数,但其实难点并不在我接下去写的部分.难点在于你获得了这个节点的N ...

  8. Postman进阶篇动态参数、自定义动态参数及自定义动态参数全局变量断言

    postman全局变量设置动态参数 1.内置动态参数 2.自定义动态参数设置全局变量 3.自定义动态参数断言(精确断言) 1.内置动态参数 多接口关联时遇见传参数是动态的,这个时候给接口关联设置全局变 ...

  9. ORB-SLAM源码中的相机参数设置

    在github看到很多关于相机参数设置的的讨论, 这一篇就是对看到的内容做一个整理和总结, 一. 易混淆概念 1.Camera.bf 根据文档的注释,这个参数是指的:基线距离(单位:米) * fx(单 ...

最新文章

  1. MindArmour差分隐私
  2. (一)Audio子系统之AudioRecord.getMinBufferSize
  3. Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
  4. 小白科普:Java EE vs J2EE vs Jakarta EE
  5. ubuntu 14.04 如何设置静态ip
  6. 一份详尽的利用 Kubeadm部署 Kubernetes 1.13.1 集群指北
  7. php实现文字向左跑马灯,js实现文字跑马灯效果
  8. syslog打印不带等级_linux下syslog使用说明
  9. php递归实现层级树状展开,PHP递归实现层级树状展开,php递归层级树状_PHP教程...
  10. 地籍cad的lisp程序大集合_超经典CAD_lisp程序集锦、CAD快捷键大全
  11. python 西门子wincc_西门子SIMATIC Manager和SIMATIC WinCC Explorer万能授权
  12. 「离散数学」【试卷一试题与答案】[推荐学习]
  13. 8类必须学会的运营工具
  14. QLabel实现超链接,设置超链接颜色,去掉超链接下划线方法
  15. unity3d内建着色器源码解析(一)
  16. UI设计初学者必入门必看!
  17. 雅诗兰黛公司选出董事会新成员
  18. C语言阿拉伯数字转大写汉字,人民币阿拉伯数字转换为汉字大写 code
  19. 优质ppt模板分享,拿走不谢
  20. nyist120 校园网络 (Tarjan算法 / 强连通分量)

热门文章

  1. JavaScript------你真的会用console来调试打印么?
  2. java实现大气无风环境污染物扩散模拟
  3. EN 15534-1塑料合成复合材料混合物及产品性能测试方法
  4. java从入门到精通5
  5. DropDownMenu
  6. 算法 排序4 统计工龄
  7. Disk Drill — Mac 数据恢复软件试用 教程 恢复删除文
  8. 字符串函数---其他类型的函数(strstr,strtok,strerror函数和字符分类函数字符转换函数)努力积累才能进大厂拿offer
  9. ELF文件详解 ---- 初步认识
  10. linux服务器reiserfs文件系统损坏,你只需学会这个方法就能修复