八叉树地图是一种在导航中比较常用的,本身有较好的压缩性能的地图形式。
点云地图的缺陷
在点云地图中,虽然有了三维结构,也进行了体素滤波以调整分辨率,但是点云有几个明显的缺陷:
1.点云地图通常规模很大,所以pcd文件也会很大。一幅640像素×480像素的图像,会产生30万个空间点,需要大量的存储空间。即使经过一些滤波后,pcd文件也还是很大的。而且重要的是,它的大并不是必须的。点云地图提供了很多不必要的细节。对于地毯上的褶皱,阴暗处的影子,我们并不特别关心这些东西。把它们放在地图里是在浪费空间。由于这些空间的占用,除非降低分辨率,否则在有限的内存中,无法建模较大的环境。然而降低分辨率会导致地图质量下降。
2.点云地图无法处理运动物体。因为我们的做法里只有“添加点”,而没有“当点消失时把它移除”的做法。而在实际环境中,运动物体的普遍存在,使得点云地图变得不够实用。
接下来要介绍的,就是一种灵活的、压缩的、又能随时更新的地图形式:八叉树地图。
八叉树地图
把三维空间建模为许多个小方块(或体素)是一种常见的做法。如果把一个小方块的每个面都平均切成2片,那么这个小块就会变成同样大小的八个小方块。这个步骤可以不断的重复,直到最后的方块大小达到建模的最高精度。在这个过程中,把“将一个小方块分成同样大小的八个”看成”从一个结点展开成八个子节点”,那么整体从最大空间细分到最小空间的过程,就是一颗八叉树。
整个大方块可以看成是根节点,而最小的块可以看作是“叶子节点”。于是在八叉树中,当我们由下一层结点往上走一层时,地图的体积就能扩大为原来的八倍。如果叶子结点的方块大小为1平方厘米,那么当我们限制八叉树为10层时,总共能建模的体积大约为8的10次幂立方厘米,也就是1073平方米。这足够建模一间屋子。由于体积与深度呈指数关系,所以当用更大的深度时,建模的体积会增长的非常快。
为什么八叉树比点云节省空间呢?在点云的体素滤波器中,也限制了一个体素中只有一个点呀?这是因为,在八叉树中,在节点中存储它是否被占据的信息。当某个方块的所有子节点都被占据或都不被占据时,就没必要展开这个节点。例如,一开始地图为空白时,我们就只需要一个根节点,而不需要完整的树。当向地图中添加信息时,由于实际的物体经常连在一起,空白的地方也会常常连在一起,所以大多数八叉树节点都无须展开到叶子层面。