基于rrt_exploration实现自主建图(ros)

提示:本篇博客适用于想在ros中使用rrt_exploration功能包的人参考。
在ros当中使用rrt_exploration来实现自主建图,官方文档(http://wiki.ros.org/rrt_exploration)说得比较清楚,这篇博客简单地讲解一下流程,主要是针对一些容易掉进坑的地方说明一下,给大家排排雷。

一.下载rrt_exploration功能包
1.打开终端
2.进入你的工作空间/src文件下

$ cd catkin_ws/src#将命令中的catkin_ws更换为你个人的工作空间名

3.下载rrt_exploration功能包
$ git clone https://github.com/hasauino/rrt_exploration.git


二.下载相关依赖包(ros版本为kinetic)
OpenCV(cv2)
$ sudo apt-get install python-opencv

Numpy
$ sudo apt-get install python-numpy

Sklearn
$ sudo apt-get install python-scikits-learn

gmapping
$ sudo apt-get install ros-kinetic-gmapping

navigation
$ sudo apt-get install ros-kinetic-navigation


三.编译工作空间
1.进入你的工作空间
$ cd catkin_ws#将命令中的catkin_ws更换为你个人的工作空间名

2.编译
$ catkin_make

到这一个步骤,如果没有错误,那么rrt_exploration功能包的下载安装已经全部完成,接下来就到了使用阶段,在此,我推荐创建一个launch文件来达到使用自主探索建图功能的目的。我把自主探索建图功能分为两个模块,一个是自主探索功能,一个是建图功能,自主探索功能需要rrt_exploration和move_base,建图这里就采用gmapping。因此你的launch文件内需要包含3个内容:
① rrt_exploration
② move_base
③ gmapping
四.创建自主建图launch文件
1.随意在一个功能包内创建launch文件夹,并在launch文件夹中建立一个rrt_slam.launch文件
文件内容如下:
【基于rrt_exploration实现自主建图(ros)】

文件内容讲解
rrt_exploration
直接使用include包含就行,simple.launch是单机器人使用rrt_exploration的launch文件。
gmapping
也是直接使用include包含就行,gmapping的配置各种参考文档都很多,这里不过多讲解。
move_base
这部分要重点讲解一下,虽然rrt_exploration为单机器人创建了simple.launch文件,但大部分人使用依然会出现问题。原因这里就直接说明了。

大部分使用出现问题都在于这一句,注意到name="move_base_node"这一段,这就是问题根源,rrt_exploration作者是根据这一个命名来写代码的,但大部分ros使用者都是使用move_base这个命名,而作者的源代码采用的是move_base_node(很好奇作者为什么不走寻常路),而且没有在launch文件中给出接口来更改move_base的命名,因此大部分人在使用rrt_exploration的时候会发现move_base无法和rrt_exploraiton连接,导致自主探索功能失败,有两种解决办法:
①像我这样在launch文件中将move_base节点命名为move_base_node,这是最简单快捷的方法,也是我推荐的方法。
②在源代码中修改move_base_node名,这个我不推荐,因为涉及的地方很多,如果有人需要,可以评论在下方,我可以给出更改的位置
move_base配置部分:
本地规划器作者采用的是base_local_planner,我尝试使用过dwa_local_planner,但效果没有base_local_planner好,建议大家也使用base_local_planner。

这一段是作者配置的参数,应该是作者根据算法作出的调试,建议大家就使用作者默认的这一套参数。

这一段是全局代价地图和本地代价地图的设置
全局代价地图和本地代价地图的参数类似
它们前四个参数分别代表
全局坐标名:在作者的设置中全局代价地图采用的是map,本地代价地图采用的是odom,我测试之后感觉本地代价地图改为map效果要好一些,所以我这里采用的是map。
机器人基坐标:这个基本上大家都类似,一般都是base_link或者base_footprint。
传感器坐标名:这个可能会有些区别,可以使用rosrun rqt_tf_tree rqt_tf_tree命令来查看激光的tf名,根据自己机器人的命名情况来修改。
传感器数据话题名:这个大部分应该都是scan,也是根据自己机器人的命名情况来修改。
五.使用基于rrt_exploration的自主探索功能
这里简单地给大家展示一下,跑一跑流程。我这里采用的是turtlebot3的仿真来测试一下。
1.启动turtlebot3仿真
$ roslaunch turtlebot3_gazebo turtlebot3_stage_4.launch $ roslaunch turtlebot3_bringup turtlebot3_remote.launch

2.启动rrt_slam.launch
$ roslaunch rrt_exploration rrt_slam.launch

我这里是把这个launch文件放在rrt_exploration功能包里面的,根据个人情况调整命令即可。
通过rviz中的Publish Point设置四个点(推荐为一个矩形区域的四个顶点)为探索的范围,第五个点设置在机器人附近。
基于rrt_exploration实现自主建图(ros)
文章图片

效果展示:
基于rrt_exploration实现自主建图(ros)
文章图片

自主探索建图的效果还是不错的。

    推荐阅读