博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ros中move_group的参数动态设置
阅读量:7210 次
发布时间:2019-06-29

本文共 2795 字,大约阅读时间需要 9 分钟。

  hot3.png

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、

转载于:https://my.oschina.net/itfanr/blog/1931939

你可能感兴趣的文章
git-入门
查看>>
git命令日常操作
查看>>
无声的吐槽csdn
查看>>
窗体设计器的使用套件
查看>>
android onTrimMemory()和onLowMemory()
查看>>
冒泡排序,选择排序,二分法
查看>>
spoj 694 Distinct Substrings
查看>>
Linux查看PCIe版本及速率# lspci -vvv |grep Width -i
查看>>
MySQL配置文件mysql.ini参数详解、MySQL性能优化
查看>>
java中替换文件内容
查看>>
https://github.com/CshBBrain/CshBBrain
查看>>
【转载】8天学通MongoDB——第八天 驱动实践
查看>>
Flex中Form表单遇到的一个小问题
查看>>
需求分析
查看>>
团队作业七
查看>>
迭代器与泛型for
查看>>
在idea中用tomcat远程部署调试
查看>>
HGE引擎改进
查看>>
存储过程执行失败与sql668n
查看>>
Android面试题3之描写叙述下Android的系统架构
查看>>