ros中move_group的参数动态设置

1、写一个配置文件 cfg/ElfinBasicAPIDynamicReconfigure.cfg

#!/usr/bin/env python
PACKAGE = "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 <elfin_basic_api/ElfinBasicAPIDynamicReconfigureConfig.h> //引入头文件

//自定义类中加入成员变量:
dynamic_reconfigure::Server<ElfinBasicAPIDynamicReconfigureConfig> 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 Liu
import rospy
from dynamic_reconfigure.srv import Reconfigure, ReconfigureRequest
from dynamic_reconfigure.msg import DoubleParameter, Config

class 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://github.com/hans-robot/elfin_robot

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值