对于移动机器人中的地图,常见的数据结构包括:
1.栅格地图
将空间中连续的地图在X、Y轴上(3D地图中还包含Z轴)进行离散化,得到一系列栅格,每个栅格只有占据、空闲和未知三个状态。
3D栅格地图
2.5D栅格地图
栅格地图结构化且有序,可以直接使用位置索引查询位置状态,查询的时间复杂度为O(1),其工具箱参考地址为:栅格地图
2.八叉树
使用一种递归、轴对齐且空间间隔的数据结构。假设空间为一个立方体,立方体中有一个小障碍物,将立方体分成八个小立方体,对包含障碍物的地方体急需进行分割,直到达到我们想要的精度为止。当某个节点的所有子节点状态统一时,可以讲它和它的子节点全部剪掉,可以极大的减少占用的内存空间。
八叉树要按照树的结构进行递归查询,工具箱参考地址:八叉树
3.Voxel Hashing
将当前空间的x、y、z通过哈希函数映射为哈希键值。通过哈希表存储地图的block,每个block可以划分为更为精细的voxel,voxel可以表示障碍物。
工具箱参考地址为:VoxelHashing
4. 点云
点云是通过传感器得到的一系列点的集合,属于无序地图,可以表示稠密障碍物的信息,无法通过索引进行查询。
点云数据集开源库:PCL
5.TSDP map
TSDP(Truncated Signed Distance Functions) 表示截断的有符号距离函数。如图所示,曲面外部为正值,内部为负值,并且可以利用距离的大小进行截断。
工具箱地址:TSDF
6.ESDF map
ESDF(Euclidean Signed Distance Functions)表示欧式有符号距离函数,当TSDF不进行阶段时,即为ESDF。
工具箱:ETH的voxblox
港科大的[FIESTA]https://github.com/HKUST-Aerial-Robotics/FIESTA)