占据栅格地图(Occupancy Grid Map)(与SLAM构图有关)
本文来自Coursera(Robotics:Estimation and Learning)
主要讲:机器人世界使用的几种地图
占据栅格地图的表示方法与更新方法
利用激光传感器数据构建占据栅格地图
1、机器人地图分类
尺度地图:坐标、经度纬度等
拓扑地图:用于路径规划
语义地图:用于人机交互
2、栅格地图
机器人常用的一种地图表示法。
机器人经常使用激光传感器,但是并不能稳定的观测一个点的距离,比如一个角度下,检测到障碍物时4m,但是下一刻检测的是4.1m,我们不能将两个距离的位置double认为是障碍物,所以我们要采用栅格地图。
对一般的地图来讲,地图上某一个点要么有障碍物要么没有,但是在栅格地图中,对于一个点我们把他是空free的概率表示为p(s = 1),有障碍物表示为p(s = 0),两者的概率和为1.
两个值表达比较麻烦,因为稍后我们可能根据概率把这个点定位占据状态或者空闲状态,我们就用两个概率的比值表示就可以。
,这就是表示空的概率比上占据概率,整个值越大,空概率越高。
对于一个点,现在,来了一个新的测量值,测量值也在这个点上有概率计算。
那么比值公式可以更新一下:
,在新的测量事件下,空的概率,占据的概率,比值大小。
根据贝叶斯公式,
代入比值公式:
通过取对数化简一下:
(个人意见,其实取对数挺好的,之前比值范围是0-无穷,两比值相等的时候是1,现在取完对数后,值范围是负无穷到正无穷,0为中间值)
上面那个含有测量值的项称之为测量值模型,标记为lomeas,测量值的模型有两种,占据和非占据,都为定值:
和
一句话就是位置S的状态,之前的加上lomeas等候之后的S状态。
在没有任何测量下,一个点的初始状态
Sinit=logOdd(s)=log(0.5/0.5)=0;
经过这样一些数学处理后,一个点得状态我们只需要做简单的加减法就可以了。
每一次扫描激光后,每个格子的概率叠加,每个格子概率越大越是占据状态,越小越是空余状态。
3、利用激光传感器构建占据栅格地图
这段讲利用激光传感器构建栅格地图的细节;
编写函数:function maMap = occGridMapping(ranges,scanAngles, pose, param)
其中,scanAngles是一个N*1的数组,表示激光传感器N个方向的夹角,ranges是K*N的数组,表示N个时间采样点激光传感器的读数(距离障碍物距离);pose是3*N的数组,表示N个时间采样点,机器人的位置和朝向信息;param是一些传入参数,param.origin是机器人起点,param.lo_occ和param.lo_free分别表示占据值和空余值,而param.max与param.min 表示位置状态阈值,超过了则为阈值便捷,param.resol表示地图的分辨率,即实际地图中一米所表示的格点数目,param.size表示地图的大小。