ROS动态调参(dynamic reconfigure)客户端服务端之C++ Python实现

版权声明: https://blog.csdn.net/u014610460/article/details/79531616

在ROS系统中,我们需要实时修改参数,并能马上看到运行效果。这一功能是通过ros dynamic_reconfigure包实现的。官网教程如下:dynamic_reconfigure/Tutorials

具体操作流程可简述为如下:首先写一个.cfg文件,python语法。然后在CMakeLists.txt文件中添加generate_dynamic_reconfigure_options用于编译刚才写的.cfg文件,并给出正确路径,且一定记得用chmod a+x *.cfg将其变为可执行的文件,这步很关键。最后在源码中包含编译后的头文件,一般是Config.h结尾,就可以开始码代码了。

目前官网给出的例程实现dynamic_reconfigure的客户端只给出了python例程,而服务端给了c++和python两种方法的实现。在rqt_reconfigure中,其源代码也是通过python写的GUI实现的。后来查看了下dynamic_reconfigure的源码,发现在头文件中包含了client.h文件,仔细研究了下,并对比了server.h文件,发现包含该文件即可用C++实现dynamic_reconfigure的客户端。在ros indigo版本中,dynamic_reconfigure包里面可能还没有client.h头文件,建议更新至最新的dynamic_reconfigure包。

以下是具体示例:

在CMakeLists.txt中包含

find_package(catkin REQUIRED roscpp rospy dynamic_reconfigure)
generate_dynamic_reconfigure_options(cfg/config.cfg)    # .cfg文件的名字

...

# make sure configure headers are built before any node using them
add_dependencies({PROJECT_NAME}_node ${PROJECT_NAME}_gencfg)  #添加依赖性也很关键,否则找不到生成的*Config.h文件

服务器端具体实现的关键代码:

    dynamic_reconfigure::Server<my_msgs::tutorialsConfig> server;
    dynamic_reconfigure::Server<my_msgs::tutorialsConfig>::CallbackType f;     //用于回调

    f = boost::bind(&callback, _1, _2);
    server.setCallback(f);

客户端具体实现的关键代码(C++):

    dynamic_reconfigure::Client<my_msgs::tutorialsConfig> client("dynamic_srv", dynCallBack);  //订阅服务,并设置回调函数
    my_msgs::tutorialsConfig config;

注:用C++实现的话,如果所用版本dynamic_reconfigure包中没有client.h头文件,得从github上下载源码,然后将client.h加入到工程当中。

客户端具体实现的关键代码(python):

    rospy.init_node("dynamic_client")
    rospy.wait_for_service("dynamic_srv/set_parameters")
    client = dynamic_reconfigure.client.Client("dynamic_srv", timeout=10, config_callback=callback)

在该客户端中,本人写了一个循环不断去改变参数的值,其效果类似于打开rqt_reconfigure去调节参数,当然也可以做一个GUI界面去改变参数的值。

代码完成后,编译,运行roscore,并设置工作空间的环境变量。

开启服务器端节点,再开启客户端节点(python和c++程序开启一个即可)。

用rqt_configure查看,可以发现里面的参数值在不断变化。截图如下:

工程源码下载地址:

https://github.com/WelinLee/ROS_dynamic_reconfig

Enjoy!

猜你喜欢

转载自blog.csdn.net/u014610460/article/details/79531616
今日推荐