客户端实现 dr.cfg
本质上是Python文件
#! /usr/bin/env python
"""
动态参数客户端:
1. 导包
2. 创建一个参数生产器
3. 往生成器添加参数
4. 配置节点,并退出
"""
# 导入参数服务器对应的功能包
from dynamic_reconfigure.parameter_generator_catkin import *
# 2. 创建一个参数生产器
gen = ParameterGenerator()
# 3. 往生成器添加参数
# add(name, paramtype, level, description, default=None, min=None, max=None, edit_method="")
gen.add("int_param",int_t,0,"整数参数",10,1,100)
# 4. 配置节点,并退出
# generate(pkgname, nodename, name)
exit(gen.generate("demo02_dr","dr_client","dr"))
动态参数服务端 C++
/*
动态参数服务端流程:
1. 包含头文件
2. 初始化操作
3. 创建服务端对象
4. 回调函数解析修改后的参数
5. spin()
*/
#include"ros/ros.h"
#include"dynamic_reconfigure/server.h"
#include"demo02_dr/drConfig.h"
void cb(demo02_dr::drConfig &config, uint32_t level)
{
ROS_INFO("修改后的整形数据是: %d",config.int_param);
}
int main(int argc, char *argv[])
{
// 2. 初始化操作
setlocale(LC_ALL,"");
ros::init(argc,argv,"dr_server");
// 3. 创建服务端对象
dynamic_reconfigure::Server<demo02_dr::drConfig> server;
// 4. 回调函数解析修改后的参数
// void setCallback(const boost::function<void (demo02_dr::drConfig &, uint32_t level)> &callback)
server.setCallback(boost::bind(&cb,_1,_2));
// 5. spin()
ros::spin();
return 0;
}
动态参数服务端 Python
#! /usr/bin/env python
"""
动态参数服务端: 参数被修改时直接打印
实现流程:
1.导包
2.初始化 ros 节点
3.创建服务端对象
4.回调函数解析函数
5.spin
"""
import rospy
from dynamic_reconfigure.server import Server
from demo02_dr.cfg import drConfig
# 回调函数
def cb(config,level):
rospy.loginfo("python 动态参数服务解析:%d,%.2f,%d,%s,%d",
config.int_param,
config.double_param,
config.bool_param,
config.string_param,
config.list_param
)
return config
if __name__ == "__main__":
# 2.初始化 ros 节点
rospy.init_node("dr_server_p")
# 3.创建服务端对象
# Server(type, callback, namespace="")
# type是类型 callback 回调函数
server = Server(drConfig,cb)
# 4.回调函数解析函数
# 5.spin
rospy.spin()