之前博文已经介绍过机器人exploration以及多机器人SLAM map merage《ROS学习笔记之——多机器人探索环境》《ROS仿真笔记之——基于gazebo的多机器人探索环境仿真》《ROS仿真笔记之——多移动机器人SLAM地图融合》《ROS仿真笔记之——移动机器人自主探索式地图构建》之前的都是基于功能包()
目录
原理
该包的基本原理是,基于2D的,通常采用图像算法的边缘检测来检测已知区域与未知区域的边界。基于Rapidly-exploring Random Trees的探索策略。由于RRT基本上是朝向未知区域的(unexplored and unvisited),并且RRT可以扩展到更高维区域。同时采用local tree与global tree来检查边缘点,使得机器人的exploration更加高效。
一旦检测到边缘后,就会取其中心为目标点,然后让机器人去探索该点。而为了检测边缘点,需要对整张地图进行处理,而这个操作通常是耗时的,为此大量的研究人员focus在检测frontier edges的效率上。
本包中,RRT树只是用于search边缘点,而检测到的边缘点经过滤波就会依次安排给机器人。当机器人接收到point时,就会运动到对应的点。在此期间,机器人上的传感器将会扫描建图。
而通过多个独立的RRT树来加速边缘点的检测,则是本包的创新点。
如下图所示,主要分为三个模块。
而本包还需要与SLAM及path planning模块相结合来使用
关于global与local detector。如下图所示。当检测到一个边界点时,local detector会reset,并且会基于机器人当前的位置重新生长。这带来两个好处:1、检测边界点更快。因为机器人总是会向着边界点移动,而如果RRT树从机器人当前的位置开始,那么它到达未知区域的概率更高。2、机器人可能会miss掉一些地图上边角的小的边界点,而为了解决这个问题,就通过global detector。但随着地图的变大,global detector会越来越慢(或者说,随着树的变大,exploration会变慢),为此需要local detector
而关于assigner,其基于以下几个要素来分配机器人导航的目标点:
仿真
而本博文基于rrt_exploration包来进行仿真。网上也有大把基于此包的博客。但是本人实现时都无法跑动(可能是版本的原因?老显示tf无法链)为此,更改了原包的机器人模型为turtlebot3 waffle并且调了一些路径规划的参数,终于调出来了,效果如下视频所示~
single kobuki robot slam based on rrt
单机器人自主探索建图
单机器人自主探索建图(1)
换成kobuki模型效果好很多~
运行命令:
roslaunch rrt_exploration_tutorials single_simulated_house.launch
roslaunch rrt_exploration single.launch
注意要保证move base的开启
single_simulated_house.launch
move_baseSafe.launch
robot.launch.xml
single.launch
实验
实验效果及视频如下:
(experiment) single kobuki robot slam based on rrt
参考资料
发表评论