前言:
开发者常常需要动态调整参数以查看机器人在不同参数下的性能表现; 无论是通过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