Octomap的学习
什么是octomap?
RGBD SLAM的目的有两个:估计机器人的轨迹,并建立正确的地图。地图有很多种表达方式,比如特征点地图、网格地图、拓扑地图等等。在《一起做》系列中,我们使用的地图形式主要是点云地图。在程序中,我们根据优化后的位姿,拼接点云,最后构成地图。这种做法很简单,但有一些明显的缺陷:
- 地图形式不紧凑。
点云地图通常规模很大,所以一个pcd文件也会很大。一张640××480的图像,会产生30万个空间点,需要大量的存储空间。即使经过一些滤波之后,pcd文件也是很大的。而且讨厌之处在于,它的“大”并不是必需的。点云地图提供了很多不必要的细节。对于地毯上的褶皱、阴暗处的影子,我们并不特别关心这些东西。把它们放在地图里是浪费空间。 - 处理重叠的方式不够好。
在构建点云时,我们直接按照估计位姿拼在了一起。在位姿存在误差时,会导致地图出现明显的重叠。例如一个电脑屏变成了两个,原本方的边界变成了多边形。对重叠地区的处理方式应该更好一些。 - 难以用于导航
说起地图的用处,第一就是导航啦!有了地图,就可以指挥机器人从A点到B点运动,岂不是很方便的事?但是,给你一张点云地图,是否有些傻眼了呢?我至少得知道哪些地方可通过,哪些地方不可通过,才能完成导航呀!光有点是不够的!
octomap就是为此而设计的!亲,你没有看错,它可以优雅地压缩、更新地图,并且分辨率可调!它以八叉树(octotree,后面会讲)的形式存储地图,相比点云,能够省下大把的空间。octomap建立的地图大概是这样子的:(从左到右是不同的分辨率)
由于八叉树的原因,它的地图像是很多个小方块组成的(很像minecraft)。当分辨率较高时,方块很小;分辨率较低时,方块很大。每个方块表示该格被占据的概率。因此你可以查询某个方块或点“是否可以通过”,从而实现不同层次的导航。简而言之,环境较大时采用较低分辨率,而较精细的导航可采用较高分辨率。
转载:高翔老师SLAM拾萃(1):octomap - 半闲居士 - 博客园 (cnblogs.com)