ROS(三)动态参数

======================完成.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})

猜你喜欢

转载自blog.csdn.net/qq_32231743/article/details/74518156