ROS使用动态参数

在ROS系统中实现某个功能时,时常需要外部动态调整参数。例如控制中PID参数的调节,或者需要查看机器人在不同参数下

的性能表现,此时外部参数的动态调节显得极其便利。在ROS中可以通过动态参数功能来实现。接下讲解ROS中动态参数的应用。
1. 创建cfg文件

 roscd ROS_Test1

 mkdir cfg

 vim ROS_Test1_cfg.cfg

 编辑内容如下所示:

#!/usr/bin/env python
PACKAGE = "ROS_Test1"

from dynamic_reconfigure.parameter_generator_catkin import *

gen = ParameterGenerator()

gen.add("int_param", int_t, 0, "int parameter", 1, 0, 10);
gen.add("double_param", double_t, 0, "double parameter", .1, 0.0, 1.0);
gen.add("bool_param", bool_t, 0, "bool parameter", True);
gen.add("str_param", str_t, 0, "string parameter", "ROS_Test1");

size_enum = gen.enum([ gen.const("Low",      int_t, 0, "Low is 0"),
                       gen.const("Medium",     int_t, 1, "Medium is 1"),
                       gen.const("High",      int_t, 2, "Hight is 2")],
                     "Select from the list")

gen.add("size", int_t, 0, "Select from the list", 1, 0, 3, edit_method=size_enum)

exit(gen.generate(PACKAGE, "ROS_Test1", "Test1_"))

 代码解释:

#!/usr/bin/env python
PACKAGE = "ROS_Test1"

from dynamic_reconfigure.parameter_generator_catkin import *

gen = ParameterGenerator()

 以上代码初始化ROS并导入参数生成器。

gen.add("int_param", int_t, 0, "int parameter", 1, 0, 10);
gen.add("double_param", double_t, 0, "double parameter", .1, 0.0, 1.0);
gen.add("bool_param", bool_t, 0, "bool parameter", True);
gen.add("str_param", str_t, 0, "string parameter", "ROS_Test1");

 以上代码为加入不同的参数。其中gen.add(...)格式如下:

 gen.add(name, type, level, description, default, min, max)

 name: 参数的名称

 type: 参数类型

 level:一个传递给回调的位掩码

 description: 一个描述参数

 default: 节点启动的初始值

 min: 参数最小值

 max: 参数最大值

exit(gen.generate(PACKAGE, "ROS_Test1", "Test1_"))

生成必要的文件并退出。上述的cfg中的代码为python代码。

 修改cfg文件的权限

 chmod a+x ROS_Test1_cfg.cfg(或 chmod 777 ROS_Test1_cfg.cfg)
2. 编辑CMakeLists.txt文件

 加入以下代码

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  message_generation
  dynamic_reconfigure
)

 generate_dynamic_reconfigure_options(
   cfg/ROS_Test1_cfg.cfg
 )

3. 编辑cpp文件

 roscd ROS_Test1

 vim node_e.cpp

 编辑内容如下所示

    #include "ros/ros.h"
    #include <dynamic_reconfigure/server.h>
    #include <ROS_Test1/Test1_Config.h>
     
    void callback(ROS_Test1::Test1_Config &config, uint32_t level)
    {
        ROS_INFO("Reconfigure Request: %d %f %s %s %d",
            config.int_param,
            config.double_param,
            config.str_param.c_str(),
            config.bool_param?"True":"False",
            config.size);
    }
     
    int main(int argc, char **argv)
    {
        ros::init(argc, argv, "node_e_dynamic_reconfigure");
        dynamic_reconfigure::Server<ROS_Test1::Test1_Config> server;
        dynamic_reconfigure::Server<ROS_Test1::Test1_Config>::CallbackType f;
        f = boost::bind(&callback, _1, _2);
        server.setCallback(f);
        ros::spin();
        return 0;
    }

4. 编译运行

 cd ~/catkin_ws

 catkin_make

 roscore

 新开终端执行:

 cd ~/catkin_ws

 source devel/setup.bash

 roslaunch ROS_Test1 Test1_node_e

 新开终端执行:

 rosrun rqt_console rqt_console

 运行结果如下所示

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值