声明:以下内容全为原创,大家有疑问可以留言或直接私信我。
该功能包的所有内容我放到了百度网盘下,大家可以自取下载解压到自己的工作空间下。如下
链接:
提取码: ksdv1.如题,我们知道在c++中,可以通过nodehandle.param从launch文件或yaml文件中获取配置的参数,传入顺序是yaml文件——launch文件——cpp文件。通过这种做法,我们可以直接在yaml文件中很方便的设置变量的值,将其传进cpp里作为具体参数。
2.但这种做法有问题。就是我们在想修改参数的时候。我们都需要找到yaml文件进行修改,然后再重新启动cpp。这样就十分不方便。熟悉navigation导航包的同学会知道,我们在调试真实小车时,可以打开rqt中的dynamic_configure工具去实时调试move_base节点参数的值(如小车的最大加速度,最大速度等),而不需要修改yaml里的默认配置和重新启动节点。
3.那这是怎么做到的呢,接下来我将通过一个简单的例子给大家展示。
4.首先在你的工作空间的src目录下打开终端创建一个功能包(如没有工作空间,新建一个,并新建一个src目录),接下来通过这行命令创建一个功能包
catkin_create_pkg dynamic_test roscpp rospy dynamic_reconfigure
在创建好后,进入该功能包,新建cfg、launch、param文件夹,分别用于存放cfg、launch、yaml配置文件。
5.接下来我们先来创建用于配置动态参数的test.cfg文件,打开文件,输入以下内容。具体解释以及注释在代码段里。
6.接下来我们先来编译刚才配置的动态参数,以产生之后cpp文件里需要用的头文件。
这时打开cmakelists.txt,将我们要编译的cfg文件路径输入,如下(将这行代码插入你cmakelists.txt即可)。
7.好,接下来进入你的工作空间下,使用catkin_make命令进行编译。编译如果没有问题,通过后你会在devel/include/dynamic_test路径下找到一个头文件,这个头文件就是之后我们在cpp中要include进去的。如下图
8.在功能包的src目录下,新建一个test.cpp,将如下内容复制进去。
9.这时,我们需要在cmakelists.txt中加入编译规则,将以下代码添加到你的cmakelists.txt中(我的完整cmakelists.txt在文章末尾)
10.接下来可以进行编译,进入工作空间,然后catkin_make。
11.你会发现这时我们还没有配置launch文件和yaml文件。接下来分别在luanch文件夹和param文件夹下创建test.launch和test.yaml,并分开输入以下内容
12.保存配置,我们之后直接通过启动launch文件来启动cpp源文件。如下编译之后,source一下,然后启动launch文件。
13.启动之后我们会发现终端输出了一些数,如下图
这里的输出就是我们在cpp里cout的。我们分别在main函数和callback函数中输出了acc_x,acc_y,和obtain_name。所以这里输出了6行数据,其值就是我们在yaml文件里设置的值,说明yaml的参数正确传入了cpp中。
13.打开一个新终端,运行rqt_reconfigure工具。rosrun rqt_reconfigure rqt_reconfigure。打开过后界面如下。
从这个工具我们就可以动态设置参数了,并且不会影响我们在yaml文件里设置的默认值,十分方便实时的调试。
如下图,我们调整一次参数,cpp就会执行一次回调函数callback里的代码。
14.我完整的cmakelists.txt大家可以下载百度网盘里的功能包查看。但最好按照我的步骤一步一步来,这样才能学习到东西。
评论(0)
您还未登录,请登录后发表或查看评论