【ROS学习】动态调参

本文介绍了如何利用ROS的dynamic_reconfigure功能包实现移动机器人PID控制器参数的可视化动态调整。通过创建功能包、编写配置文件、配置CMakeList和package.xml,然后编译并运行服务器节点,可以实现实时修改并更新PID参数,大大简化了调试过程。此外,还提到了远程调参的可能性。
摘要由CSDN通过智能技术生成

最近在调试移动机器人的PID参数,我在想如果像以前那样调参的话,每次都要反反复复重新下载代码更新参数,如果有一种可以直接可视化修改参数,并且能实时更新底层控制,那该多好啊!其实这个问题ROS已经为你想好了!那就是非常好用的功能包——dynamic_reconfigure!!!

开始搞起来!

目录

一、创建功能包

1、进入工作空间

2、创建一个新的功能包(名为dynamic_reconfigure_test)

 二、编写配置文件

1、新建一个cfg文件夹

2、新建一个cfg文件(我们的可视化界面内容)

3、编写cfg文件(我创建了一个名为pid.cfg)

4、给配置文件设置权限

三、配置CMakeList文件以及package.xml文件

1、CMakeList文件

2、package.xml文件

四、先进行编译!

五、创建服务器节点

七、运行~!~


一、创建功能包

1、进入工作空间

cd robot_ws/src

2、创建一个新的功能包(名为dynamic_reconfigure_test)

注:后面是需要的依赖功能包

catkin_create_pkg dynamic_reconfigure_test rospy roscpp dynamic_reconfigure

 二、编写配置文件

1、新建一个cfg文件夹

mkdir cfg

2、新建一个cfg文件(我们的可视化界面内容)

touch pid.cfg

 3、编写cfg文件(我创建了一个名为pid.cfg)

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

# 导入dynamic_reconfigure功能包提供的参数生成器(parameter generator)
from dynamic_reconfigure.parameter_generator_catkin import *

# 创建一个参数生成器
gen = ParameterGenerator()

# 定义动态配置的参数

gen.add("KP", double_t, 0, "KP_param", 0.0,  0, 500)
gen.add("KI", double_t, 0, "KI_param", 0.0,  0, 500)
gen.add("KD", double_t, 0, "KD_param", 0.0,  0, 500)

# 退出
exit(gen.generate(PACKAGE, "dynamic_PID", "pid"))

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

  • name:参数名,用字符串表示
  • type:数据类型,(int_t,double_t,str_t,bool_t)
  • level:掩码(可用于查看参数是否修改)默认写0就行
  • description:描述,用于描述该参数的作用,简单明了即可~
  • default:默认值,设置参数的默认值
  • min:参数的最小值
  • max:参数的最大值

4、给配置文件设置权限

我们先查看当前文件的权限:

ll

我们可以发现该文件其实没有可执行的功能!

故我们给它添加可执行的功能!

chmod a+x pid.cfg 

a+x:表示给所有用户添加可执行功能

三、配置CMakeList文件以及package.xml文件

1、CMakeList文件

因为我们一开始创建新的功能包就包含了dynamic_reconfigure 这个功能包,所以已经有了!

如果是后面在自己的原有基础上加功能的话,记得写上!

往下查找可以看到这个,修改成自己的cfg文件名 

继续往下查找,将这一行取消注释即可

如果是后面在自己的原有基础上加功能的话,记得写上!

 2、package.xml文件

 因为我们一开始创建新的功能包就包含了dynamic_reconfigure 这个功能包,所以已经有了!

如果是后面在自己的原有基础上加功能的话,记得写上!

 四、先进行编译!

先进行编译的目的是生成需要的头文件

我们只对该功能包编译,可以这样写:

catkin_make -DCATKIN_WHITELIST_PACKAGES="dynamic_reconfigure_test"

我们可以看到生成的一个名为pidConfig.h的头文件!后面的文件我们需要包含它!

 这样的话我们的配置文件就初步完成了!接下来编写服务器节点!

五、创建服务器节点

1、创建一个cpp文件(名dynamic_test.cpp)

dynamic_test.cpp

#include <ros/ros.h>
#include <dynamic_reconfigure/server.h>
#include <dynamic_reconfigure_test/pidConfig.h>

float KP = 0.0;
float KI = 0.0;
float KD = 0.0;


//回调函数
void Callback(dynamic_reconfigure_test::pidConfig &config)
{
    KP = config.KP;
    KI = config.KI;
    KD = config.KD;

    ROS_INFO("KP KI KD = [%f %f %f]",KP,KI,KD);
}


int main(int argc,char **argv)
{
    //初始化,创建节点
    ros::init(argc,argv,"dynamic_test");

    //创建一个参数动态配置的服务器实例
    dynamic_reconfigure::Server<dynamic_reconfigure_test::pidConfig> server;
    //定义回调函数
    dynamic_reconfigure::Server<dynamic_reconfigure_test::pidConfig>::CallbackType f;

    //将回调函数和服务端绑定,当客户端请求修改参数时,服务器跳转到回调函数进行处理
    f = boost::bind(&Callback,_1);
    server.setCallback(f);

    ros::spin();

    return 0;
}

六、配置CMakeList文件

 开始编译!!

七、运行~!~

roscore
rosrun dynamic_reconfigure_test dynamic_test
rosrun rqt_reconfigure rqt_reconfigure 

 

 这样的话动态调参就OK啦!如果后续想实现远程调参,这可以将数据下发到底层,而底层将数据上报,实现双向数据互换~就可以远程调参啦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值