ROS 动态参数 实时调参方式

前言:

           开发者常常需要动态调整参数以查看机器人在不同参数下的性能表现; 无论是通过YAML 文件配置参数还是通过节点句柄操作参数,都会面临一个问题,如果节点不主 动查询参数值,就无法获取参数是否已经进行了更新。   

解决办法:

                       ROS 通过 dynamic_reconfigure 程序包提供了动态参数这一功能。

动态参数步骤

步骤1:写 参数配置文件
步骤2: CMakeLists文件修改配置
步骤3: package.xml文件修改配置
步骤4: 编译生成头文件
步骤5: 创建回调函数
步骤6: 利用rqt_reconfigure 调参

一、参数配置文件

编写动态参数配置 Python 脚本 .cfg
添加 ParameterGenerator() 参数生成器
gen.add(name, type, level, description, default, min, max)
gen.generate(PACKAGE,pkgname,cfgname)
 
name:参数名,使用字符串描述;

type:定义参数的类型,可以是int_t, double_t, str_t, 或者bool_t;

level:需要传入参数动态配置回调函数中的掩码,在回调函数中会修改所有参数的掩码,表示参数已经进行修改;

description:描述参数作用的字符串;

default:设置参数的默认值;

min:可选,设置参数的最小值,对于字符串和布尔类型值不生效;

max:可选,设置参数的最大值,对于字符串和布尔类型值不生效;
#!/usr/bin/env python3 
PACKAGE = "example_2"                                               #声明当前的包名
from dynamic_reconfigure.parameter_generator_catkin import *
gen = ParameterGenerator()                                          #参数生成器调用变量gen
gen.add("speed",int_t,0,"speed of car",50,0,120)                    #gen中添加  int 速度   默认 50 最小 0 最大 120 
gen.add("pkg",str_t,0,"package name","example_2")                   # 追加包的名字是example2   
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,2,edit_method=size_enum)
exit(gen.generate(PACKAGE,"example_2","Test"))                     # 生成包 test 文件   关联配置文件的.h动态文件  跨语言的头文件

对应的.cpp文件

#include <ros/ros.h>
#include <dynamic_reconfigure/server.h>
#include "example_2/TestConfig.h"

void callback(example_2::TestConfig &cfg,uint32_t level){
  ROS_INFO("Reconfigure Request: ths speed is %d,%s,the size is %d, the level is %d",
           cfg.speed,
           cfg.pkg.c_str(),
           cfg.size,
           level
           );
}
int main(int argc, char **argv)
{
  ros::init(argc, argv, "param");
  dynamic_reconfigure::Server<example_2::TestConfig> server;          // 服务端动态类型
  dynamic_reconfigure::Server<example_2::TestConfig>::CallbackType f; // 绑定回调函数掩码
  //_1,_2为占位符,表示用实际的第一个、第二个参数替换
  f = boost::bind(&callback,_1,_2);
  server.setCallback(f);
  ros::spin();                             // 不断监听回调函数
  return 0;
}

二、CMakeLists文件修改配置

添加依赖包
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
dynamic_reconfigure
)

#加载配置文件
generate_dynamic_reconfigure_options(
cfg/Test.cfg
)

三、package.xml文件修改配置

<build_depend>message_generation</build_depend>

四、利用rqt_reconfigure调参

rosrun rqt_reconfigure rqt_reconfigure

五、实际操作 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忒懂先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值