1、写一个配置文件 cfg/ElfinBasicAPIDynamicReconfigure.cfg
#!/usr/bin/env pythonPACKAGE = "elfin_basic_api"from dynamic_reconfigure.parameter_generator_catkin import *gen = ParameterGenerator()gen.add("velocity_scaling", double_t, 0, "the max velocity scaling", 0.4, 0.01, 1.0)exit(gen.generate(PACKAGE, PACKAGE, "ElfinBasicAPIDynamicReconfigure"))
2、cmake自动产生 ElfinBasicAPIDynamicReconfigureConfig.h头文件
find_package(catkin REQUIRED COMPONENTS dynamic_reconfigure)generate_dynamic_reconfigure_options( cfg/ElfinBasicAPIDynamicReconfigure.cfg)
3、使用dynamic_reconfigure::Server
#include//引入头文件//自定义类中加入成员变量:dynamic_reconfigure::Server dynamic_reconfigure_server_;//绑定回调函数dynamic_reconfigure_server_.setCallback(boost::bind(&ElfinBasicAPI::dynamicReconfigureCallback, this, _1, _2));void ElfinBasicAPI::dynamicReconfigureCallback(ElfinBasicAPIDynamicReconfigureConfig &config, uint32_t level){ setVelocityScaling(config.velocity_scaling);}void ElfinBasicAPI::setVelocityScaling(double data){ velocity_scaling_=data; teleop_api_->setVelocityScaling(velocity_scaling_);}
于是,elfin_basic_api自动启动了serice:
/elfin_basic_api/set_parameters
和topic:
/elfin_basic_api/parameter_descriptions/elfin_basic_api/parameter_updates
4、move_group动态修改参数
void ElfinTeleopAPI::setVelocityScaling(double data){ velocity_scaling_=data; joint_speed_=joint_speed_default_*velocity_scaling_; cart_duration_=cart_duration_default_/velocity_scaling_; group_->setMaxVelocityScalingFactor(velocity_scaling_);}
python脚本修改参数
设置elfin_basic_api相关的动态参数,例如: velocity scaling example: set_parameters() in elfin_robot_bringup/script/set_velocity_scaling.py
python源码:
# author: Cong Liuimport rospyfrom dynamic_reconfigure.srv import Reconfigure, ReconfigureRequestfrom dynamic_reconfigure.msg import DoubleParameter, Configclass SetVelocityScaling(object): def __init__(self): self.request=ReconfigureRequest() self.velocity_scaling_goal=0.6 self.elfin_basic_api_ns='elfin_basic_api/' self.set_parameters_client=rospy.ServiceProxy(self.elfin_basic_api_ns+'set_parameters', Reconfigure) def set_parameters(self): config_empty=Config() velocity_scaling_param_tmp=DoubleParameter() velocity_scaling_param_tmp.name='velocity_scaling' velocity_scaling_param_tmp.value=self.velocity_scaling_goal self.request.config.doubles.append(velocity_scaling_param_tmp) self.set_parameters_client.call(self.request) self.request.config=config_empty if __name__ == "__main__": rospy.init_node('set_velocity_scaling', anonymous=True) svc=SetVelocityScaling() svc.set_parameters() rospy.spin()
参考: 1、