参考:
http://wiki.ros.org/dynamic_reconfigure/Tutorials/HowToWriteYourFirstCfgFile
http://wiki.ros.org/dynamic_reconfigure/Tutorials/SettingUpDynamicReconfigureForANode%28cpp%29
1.创建工作空间,功能包
#创建工作空间
mkdir catkin_ws
mkdir catkin_ws/src
cd catkin_ws/src
catkin_init_workspace
#创建功能包
cd catkin_ws/src
catkin_create_pkg --rosdistro ROSDISTRO ROS_Test1 rospy roscpp dynamic_reconfigure
2.创建cfg文件
touch ROS_Test1_cfg.cfg
#!/usr/bin/env python
PACKAGE = "ROS_Test1"
from dynamic_reconfigure.parameter_generator_catkin import *
gen = ParameterGenerator()
gen.add("int_param", int_t, 0, "int parameter", 1, 0, 10);
gen.add("double_param", double_t, 0, "double parameter", .1, 0.0, 1.0);
gen.add("bool_param", bool_t, 0, "bool parameter", True);
gen.add("str_param", str_t, 0, "string parameter", "ROS_Test1");
size_enum = gen.enum([ gen.const("Low", int_t, 0, "Low is 0"),
gen.const("Medium", int_t, 1, "Medium is 1"),
gen.const("High", int_t, 2, "Hight is 2")],
"Select from the list")
gen.add("size", int_t, 0, "Select from the list", 1, 0, 3, edit_method=size_enum)
exit(gen.generate(PACKAGE, "ROS_Test1", "Test1_"))
3.创建节点
touch node_e.cpp
#include "ros/ros.h"
#include <dynamic_reconfigure/server.h>
#include <ROS_Test1/Test1_Config.h>
void callback(ROS_Test1::Test1_Config &config, uint32_t level)
{
ROS_INFO("Reconfigure Request: %d %f %s %s %d",
config.int_param,
config.double_param,
config.str_param.c_str(),
config.bool_param?"True":"False",
config.size);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "node_e_dynamic_reconfigure");
dynamic_reconfigure::Server<ROS_Test1::Test1_Config> server;
dynamic_reconfigure::Server<ROS_Test1::Test1_Config>::CallbackType f;
f = boost::bind(&callback, _1, _2);
server.setCallback(f);
ros::spin();
return 0;
}
4.CmakeList文件
在Cmakelist中添加一下几句,其中cfg文件名和.cpp文件可自由更改
generate_dynamic_reconfigure_options(
cfg/ROS_Test1_cfg.cfg
)
add_executable(node_e src/node_e.cpp)
add_dependencies(node_e ${PROJECT_NAME}_gencfg)
target_link_libraries(node_e ${catkin_LIBRARIES})
改完后编译
5.运行
roscoe
#其结点
rosrun ROS_Test1 node_e
#起rqt
rosrun rqt_reconfigure rqt_reconfigure
可通过rqt调节
可通过命令行调节
$ rosparam list
/node_e_dynamic_reconfigure/bool_param
/node_e_dynamic_reconfigure/double_param
/node_e_dynamic_reconfigure/int_param
/node_e_dynamic_reconfigure/size
/node_e_dynamic_reconfigure/str_param
/rosdistro
/roslaunch/uris/host_172_20_10_4__42553
/rosversion
/run_id
$ rosparam get /node_e_dynamic_reconfigure/double_param
0.1
$ rosparam set /node_e_dynamic_reconfigure/double_param 0.3
$ rosparam get /node_e_dynamic_reconfigure/double_param
0.3