======================完成.cfg文件==========================
在包study_dynamic_reconfigure目录下新建文件夹cfg,创建文件three.cfg并编辑
#!/usr/bin/env python
PACKAGE = 'study_dynamic_reconfigure'
from dynamic_reconfigure.parameter_generator_catkin import *
gen = ParameterGenerator()
# name type level description default_setting min max
gen.add('s', str_t, 0, 'string_param', 'default_string')
gen.add('i', int_t, 0, 'int_param', 1, -100, 100)
gen.add('d', double_t, 0, 'double_param', 2., -100.,100.)
gen.add('b', bool_t, 0, 'bool_param', True)
exit(gen.generate(PACKAGE, 'three','three'))
值得注意的是,type不支持float_t,并且bool值是True(python风格)而不是true(c风格)
===============================完成节点的编辑==========
在包/src目录下新建two.cpp并编辑
#include "ros/ros.h"
#include "dynamic_reconfigure/server.h"
#include "study_dynamic_reconfigure/threeConfig.h"
#include <string>
std::string ss ;
int ii ;
double dd ;
bool bb ;
void callback(study_dynamic_reconfigure::threeConfig &config, uint32_t level)
{
ss = config.s;
ii = config.i;
dd = config.d;
bb = config.b;
ROS_INFO("%s,%d,%lf,%s",ss.c_str(),ii,dd,bb?"Ture":"False");
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "nodename_dynamic_reconfig");
//ros::NodeHandle n;
//n.setParam("s","ssstttrrr")
dynamic_reconfigure::Server<study_dynamic_reconfigure::threeConfig> server;
dynamic_reconfigure::Server<study_dynamic_reconfigure::threeConfig>::CallbackType f;
f = boost::bind(&callback, _1, _2);
server.setCallback(f);
ros::spin();
return 0;
}
需要注意的是:
1,#include “study_dynamic_reconfigure/threeConfig.h”中,threeConfig的组成规则是.cfg文件的名称+Config
2,尽管有这一行:ros::spin(); 但每次用命令行修改参数时,例如rosparam set /nodename_dynamic_reconfig/s sdfdf ,回调函数并不会调用(不明白为什么是这样)。
3,使用rqt_reconfigure 修改参数,会触发回调函数
===============完成cmakelist的编辑=========================
没有被注释的代码大概是这样:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
dynamic_reconfigure
generate_dynamic_reconfigure_options(cfg/three.cfg)
catkin_package()
include_directories(
include
${catkin_INCLUDE_DIRS})
add_executable(two src/two.cpp)
add_dependencies(two study_dynamic_reconfigure_gencfg)
target_link_libraries(two ${catkin_LIBRARIES})