八叉树是一种构建环境地图的方法,顾名思义,就是以八叉树的形式来对环境进行建模。下图是一个八叉树表示环境的例子,左图表示构建的环境,右图表示该环境对应的组织形式。看不懂没关系,下面我们将对八叉树进行详细地讲解。
图1:八叉树示意图
八叉树的基本思想是,递归地把空间分成八个方块,这些方块在内存中以八叉树的形式组织起来,而每个树的节点对应于空间中的一个方块。我们用一个0~1之间的浮点数来描述这个节点被(障碍物)占据的概率,0表示未占据,1表示空闲,0.5表示不确定。当某个节点下的所有子节点的概率都是相同的时候(如都被占据,都是空闲或都是不确定),我们可以将这些子节点通过剪枝修剪掉,只保留父节点,从而节省内存。相对于点云而言,八叉树是一种高效的环境建模方法,大大地减少了内存占用。
说到这里,大家可能对图1的含义有一点粗糙的认识了,其中,根节点对应于最大的立方体,下面八个子节点表示被划分出的八个方块。
这些白色的方块对应于树中的小点,表示不确定。
这些灰色的方块对应于树中的白色正方形,表示空闲。
被进一步递归划分的方块对应于树中的灰色圆,表示有内节点,也就是说,它子节点的概率不是都相等的。
而黑色的小方块表示的表示被占据。
那么,我们为什么要用概率来表示这个节点是否被占据呢?
这是因为环境是一直动态变化的,而且有噪声的存在,比如在第1秒的时候地上有只拖鞋,但是在第3秒的时候拖鞋可能被挪走了,在第5秒的时候又被挪回了原位。
假如雷达恰好在第1秒和第3秒的时候扫描到了拖鞋最初放置的位置,那这个地方到底是被占据着还是空闲的呢?说他被占据或者空闲似乎都不太合适,而用概率来描述是一个比较好的办法了。
实际上,在地图构建的过程中,大多数时候出现的误差是由于测量时周围的噪声造成的,少数时候是因为物体被挪动了位置。高中我们就学过,由于噪声等因素,测量是有误差的,其值是服从正态分布的。