自主机器人运动规划|地图相关概念总结
- 地图表示
- 占用栅格地图
- 八叉树地图(Octo-map)
- Voxel hashing(哈希表地图)
- 点云地图
- TSDF map
- ESDF map
地图表示
地图分成两个模块:
- 地图装在数据的数据结构
- 地图信息融合方法
占用栅格地图
使用最为广范的是 Occupancy grid map 占用栅格地图
3D栅格地图
2D栅格地图
2.5d栅格地图
占用栅格地图的特点:
- 最稠密的
- 结构化的
- 直接坐标索引查询
栅格地图资源:https://github.com/ANYbotics/grid_map
八叉树地图(Octo-map)
数据结构
这样的地图数据结构的好处就是可以形成下面的数据类型
可以把上面的正方体考虑为房间,很多地方没有障碍物,则不需要分那么细,有障碍物的地方可以分的细一点。
这样可以减小计算资源消耗
八叉树地图特点:
- 稀疏的
- 结构化的
- 非直接坐标索引查询
基于八叉树的资源:
https://octomap.github.io
用八叉树表示点云地图示例
用八叉树表示不同分辨率点云物体
Voxel hashing(哈希表地图)
与八叉树的思想类似
Voxel的意思就是一个三维的grid
hashing 意思就是用哈希表的形式 把地图存储起来
上图是一个相机对一个障碍物曲面的观测,仅把在障碍物上的格子加入内存,如上面的蓝色和红色的正方格,具体加入内存的方式是用哈希表的方式,把格子的坐标xyz通过函数映射成哈希键值,有了哈希键值则可插入表中,相当于字典查询的方式,进行地图查询。
哈希表地图特点:
- 最稀疏的
- 结构化的
- 非直接坐标索引查询
Voxel hashing 的公开资源:https://github.com/niessner/VoxelHashing
这种地图用的最多的就是在基于RGBD深度相机,构建稠密的地图。
可以参考 infiniTAM的开源工程 http://www.robots.ox.ac.uk/~victor/infinitam/
点云地图
传感器最基本的,原始测量的一个集合。最大的特点就是无序的,不可以进行点索引的查找。
点云可以用来表示障碍物稠密的信息。
点云地图特点:
- 无序的
- 没有索引坐标
点云资源 PCL : http://pointclouds.org/
TSDF map
TSDF的全称是:Truncated Signed Distance Functions 截断的有符号距离函数地图(TSDF map )
如上图,有一个相机在对环境进行一个观测,前方有一个曲面
TSDF会假设曲面和相机直接有一个距离场,相机和曲面之间的距离场里都是正直,表示点到障碍物距离最近的距离。
在曲面后面的,也有一个距离场,每个点也同样表示到障碍物最近的距离,但是是负值。
距离用不用的颜色表示,就形成了下面的图
Truncated 代表的是有截断的
意思就是:相机视场角之外的值是不关心的,并且障碍物距离范围一定的值才是关心的,距离远的点也是不关心的。所以上面的图在离相机很近和视场角之外的点,都没有形成颜色。
典型的应用是 OpenChisel
https://github.com/personalrobotics/OpenChisel 提供了完整的前端的相机信息融合到后端的出TSDF 地图的工程。
ESDF map
ESDF的全称是 Euclidean Signed Distance Functions 欧式带符合的距离函数
ESDF和前面说的TSDF的区别就是:ESDF没有截断,关心所有距离场的值
颜色越深,红色表示离障碍物越近,绿色表示离障碍物越远
开源工具有:
- VoxBlox 以尽量短时间建立 ESDF地图的工具
https://github.com/ethz-asl/voxblox - FIESTA 精度和性能超过VoxBlox
https://github.com/HKUST-Aerial-Robotics/FIESTA - TRR’s Local Map
完整的无人机自主飞行资源,里面用到的相当于构建局部的ESDF地图,FIESTA相当于增量构建全局的ESDF地图
https://github.com/HKUST-Aerial-Robotics/Teach-Repeat-Replan