平台:gazebo+ros+rviz(最好ubuntu20)
开发语言:c++
场景建模,机器人建模:
场景一:未知方形区域,内部有若干路标,障碍物(简单场景)
场景二:未知方形区域,内部有墙壁,房间,障碍物,路标(复杂场景)
注:路标形式不固定,可以是带有颜色的小方块,或者其他什么物体,特征只有位置和角度。
机器人数量:4个,8个(不同机器人数量)。机器人形式:自定义小车或trutlebot或其他
传感器:激光传感器
任务(干什么事):多个机器人在一个室内未知环境下,携带激光传感器,进行协同探索路标并建图。
初始化模块:
@输入:未知地图大小、地图中已知障碍物位置/已知路标位置、各个机器人初始位置
@输出:划分后的区域,机器人分组,不同区域内的单元格
@首先根据地图中已知障碍物或已知路标位置,将地图划分为若干区域,机器人就近分配给各个区域,被分配到同一个区域的机器人为一个小组,在该区域进一步按一定分辨率划分为若干个单元格,随机指定一个机器人作为队长负责在该区域执行探索模块,探索点只能是单元格中心或者路标,并将探索点按距离代价分配给组内机器人。
探索模块:
@输入:地图中已知路标信息熵、单元格信息熵、地图信息熵
@输出:探索点(路标/单元格)
@基于信息熵的探索算法提供机器人探索点,信息熵定义、算法流程由我们提供。
多机协作模块:
@输入:当前区域信息熵、其他区域的探索点
@输出:迁移点,迁移区域
@如果当前区域信息熵降低至某一水平,则判断该区域已基本探索,则该区域机器人队长会在其他区域的探索点集合中选取离自身平均距离最近的点作为迁移点,所有组内的机器人都会迁移到该区域该点进行新的探索任务。
路标关联和融合模块:
@输入:当前区域内一段时间内的所有对路标的激光观测数据(位置,角度的观测数据矩阵)
@输出:不同路标的融合后信息(位置、角度)
@将所有这些输入的路标信息(位置,角度)构建为节点,路标之间的相对观测作为边,构建一个图,利用谱聚类算法进行数据关联,之后将关联为同一个路标的数据进行加权融合,具体公式定义和算法流程我们提供。
路径规划导航模块:
@输入:各个机器人-探索点矩阵、已知地图(障碍物等)
@输出:各个机器人-导航路径
Slam模块:
@常用的slam算法,用于估计自身位置和建图。
通信模块:
@简单的通信机制,或者不考虑通信问题
效果一:未知区域被划分为若干个区域,不同机器人被分配到指定区域
效果二:各个机器人在指定区域进行探索并建图。
1. 以路标点为目标的(把该路标标出来)
2. 以单元格为目标的(把单元格重心标出来)
效果三:指定区域探索任务完成后,迁移到新区域过程
效果四:最终建完的整体地图效果,地图中路标的不确定性范围(路标周围画一个圈来表示)