zoukankan      html  css  js  c++  java
  • 占据栅格地图(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表示地图的大小。

      

  • 相关阅读:
    Altium Designer 快捷键,长期更新
    代码: 0x80131500:应用商店崩溃怎么修复
    (转)stm32cubeMx配置使用encoder编码器
    STM32 PWM注意事项
    转载 STM32 使用Cubemx 建一个USB(HID)设备下位机,实现数据收发
    STM32Cube填坑,ST link 下载一次以后无法下载
    SuperSocket 学习笔记-客户端
    python-kaggle之旅
    Leetcode刷题记(9)——移除元素
    Leetcode刷题记(8)——删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/cwyblogs/p/8335064.html
Copyright © 2011-2022 走看看