本博文是基于这个ROS软件包(https://github.com/hrnr/m-explore)的学习笔记
目录
multi robot exploration
这个包名为explore_lite,采用greedy frontier-based exploration。当节点运行时,机器人会贪婪地探索环境,直到找不到边界为止。就是这些机器人会一直把整个区域都探索完。如下图所示
explore_lite不会创建自己的costmap,这使得配置更容易,效率更高(资源更少)。节点简单的订阅nav_msgs/OccupancyGrid 这个消息,机器人运动的命令也直接传到move_base
Node can do frontier filtering (边界滤波) and can operate even on non-inflated maps(非膨胀地图). Goal blacklisting (黑名单) allows to deal with places inaccessible (无法到达的地方) for robot.
下面介绍一下这个功能包的结构。如下图所示。explore_lite采用move_base节点来导航
explore_lite通过订阅nav_msgs/OccupancyGrid和map_msgs/OccupancyGridUpdate的消息来构建地图,确认地图的边界。可以使用由move_base产生的costmap(<move_base>/global_costmap/costmap)或者由SLAM构建的地图。
nav_msgs/OccupancyGrid
http://docs.ros.org/api/nav_msgs/html/msg/OccupancyGrid.html
map_msgs/OccupancyGridUpdate
http://docs.ros.org/api/map_msgs/html/msg/OccupancyGridUpdate.html
move_base
https://www.ncnynl.com/archives/201708/1898.html
关于导航的基本介绍可以参考博文《ROS学习笔记之——移动机器人的导航》
The move_base package provides an implementation of an action that, given a goal in the world, will attempt to reach it with a mobile base. The move_base node links together a global and local planner to accomplish its global navigation task.(move_base节点将全局路径和局部路径规划程序链接在一起,以完成其全局导航任务)
The move_base node provides a ROS interface (接口) for configuring (配置), running(运行), and interacting (交互) with the navigation stack on a robot. 说白了,这个move_base就是实现了试图在用户指定公差范围内实现目标姿势的机器人。而当存在动态障碍物(dynamic obstacles)的时候则通过避障算法来避开障碍物.
move_base节点进程如下所示
-
在机器人上正确运行move_base节点,来让机器人尝试到达在使用者允许的误差范围内目标位置。
-
在没有动态障碍的情况下,move_base节点最终运行结果要么是接近了规划的目标,要么是给用户返回失败信号。
-
当机器人认为它是卡住了,move_base节点可以选择执行修复操作。默认情况下,move_base节点采用如下所述行动来清理出的周围空间:
-
首先,用户指定区域以外的障碍物将从机器人的地图中清除。如果失败,机器人会更激进的将其可以就地旋转的矩形框外面的障碍物全部移除。
-
紧接着下一个就地旋转操作会被继续执行。如果所有这些操作都失效,机器人会认为目标设定不恰当并通知用户放弃操作。
-
这些修复操作可以通过recovery_behaviors参数来配置,也可以recovery_behavior_enabled参数disable。
-
multirobot_map_merge
http://wiki.ros.org/multirobot_map_merge
这个包为多个机器人提供全局地图。它可以合并任意数量机器人的地图。它期望将单个机器人的地图作为ROS主题。如果你在同一个ROS主机下运行多个机器人,那么multirobot_map_merge可直接使用
如果运行在多个多个机器人,需要在机器人之间运行节点的通信,并提供本地主机的机器人地图(在同一主机下)。(multirobot_map_merge does not depend on any particular communication between robots.)
multirobot_map_merge finds robot maps dynamically and new robots can be added to system at any time.结构如下图所示
参考资料
https://github.com/hrnr/m-explore
http://wiki.ros.org/explore_lite