机器人导航必备的栅格地图数学模型及使用

  • 占据栅格地图(Occupancy Grid Map)
    • 占用栅格地图基础概念
    • 占据栅格地图的数学模型
    • ROS中使用OccupancyGrid

占据栅格地图(Occupancy Grid Map)

占用栅格地图基础概念


上图就是一个ROS中的占据栅格地图显示

栅格地图定义 :栅格地图就是用一个个栅格组成的网格来代表地图. 栅格里可以存储不同的数值, 代表这个栅格的不同含义.

ROS的栅格地图使用

  • 白色代表空闲,也就是可通过区域,其存储的值为 0;
  • 黑色代表占用,也就是不可通过区域,其存储的值为 100;
  • 灰色代表未知,就是说目前还不清楚这个栅格是否可以通过,其存储的值为 -1.

占据栅格地图的数学模型

占据率(Occupancy)
在通常的尺度地图中,对于一个点,它要么有(Occupied状态)障碍物,要么没有(Free状态)障碍物
在占据栅格地图中,对于一个点,用p(s=0)p(s=0)p(s=0)来表示它是Free状态的概率;

用p(s=1)p(s=1)p(s=1)来表示它是Occupied状态的概率.两者的和为1

引入两者的比值来作为点的状态:Odd(s)=p(s=1)p(s=0)Odd(s)=\frac{p(s=1)}{p(s=0)}Odd(s)=p(s=0)p(s=1)​

对于一个点,新来了一个测量值,之后我们需要更新它的状态,假设测量值来之前,该点的状态为Odd(s)Odd(s)Odd(s),
我们要更新它为:Odd(s∣z)=p(s=1∣z)p(s=0∣z)Odd(s|z)=\frac{p(s=1|z)}{p(s=0|z)}Odd(s∣z)=p(s=0∣z)p(s=1∣z)​
这种表达方式类似于条件概率,表示在发生z的条件下s的状态。

根据贝叶斯公式,我们有:
p(s=1∣z)=p(z∣s=1)p(s=1)p(z)p(s=1|z)=\frac{p(z|s=1)p(s=1)}{p(z)}p(s=1∣z)=p(z)p(z∣s=1)p(s=1)​
p(s=0∣z)=p(z∣s=0)p(s=0)p(z)p(s=0|z)=\frac{p(z|s=0)p(s=0)}{p(z)}p(s=0∣z)=p(z)p(z∣s=0)p(s=0)​

带入Odd(s∣z)Odd(s|z)Odd(s∣z)中得到
Odd(s∣z)=p(s=1∣z)p(s=0∣z)=p(z∣s=1)p(s=1)/p(z)p(z∣s=0)p(s=0)/p(z)=p(z∣s=1)p(z∣s=0)Odd(s)Odd(s|z)=\frac{p(s=1|z)}{p(s=0|z)}=\frac{p(z|s=1)p(s=1)/p(z)}{p(z|s=0)p(s=0)/p(z)}=\frac{p(z|s=1)}{p(z|s=0)}Odd(s) Odd(s∣z)=p(s=0∣z)p(s=1∣z)​=p(z∣s=0)p(s=0)/p(z)p(z∣s=1)p(s=1)/p(z)​=p(z∣s=0)p(z∣s=1)​Odd(s)

对两边取对数得:

logOdd(s∣z)=logp(z∣s=1)p(z∣s=0)+logOdd(s)logOdd(s|z)=log\frac{p(z|s=1)}{p(z|s=0)}+logOdd(s) logOdd(s∣z)=logp(z∣s=0)p(z∣s=1)​+logOdd(s)

这样,含有测量值的项就只剩下了logp(z∣s=1)p(z∣s=0)log\frac{p(z|s=1)}{p(z|s=0)}logp(z∣s=0)p(z∣s=1)​称这个比值为测量值的模型,标记为lomeaslomeaslomeas
测量值的模型只有两种lofree=logp(z=0∣s=1)p(z=0∣s=0)lofree=log\frac{p(z=0|s=1)}{p(z=0|s=0)}lofree=logp(z=0∣s=0)p(z=0∣s=1)​和looccu=logp(z=1∣s=1)p(z=1∣s=0)looccu=log\frac{p(z=1|s=1)}{p(z=1|s=0)}looccu=logp(z=1∣s=0)p(z=1∣s=1)​

这样,如果我们用Odd(s)Odd(s)Odd(s)来表示位置s的状态S的话,我们的更新规则就进一步简化成了:S+=S−+lomeasS^+=S^-+lomeasS+=S−+lomeas
其中S+S^+S+和S−S^-S−分别表示测量值之后和之前的状态。

另外,在没有任何测量值的初始状态下,一个点的初始状态Sinit=logOdd(s)=logp(s=1)p(s=0)=log0.50.5=0S_{init}=logOdd(s)=log\frac{p(s=1)}{p(s=0)}=log\frac{0.5}{0.5}=0Sinit​=logOdd(s)=logp(s=0)p(s=1)​=log0.50.5​=0

经过这样的建模,更新一个点的状态就只需要做简单的加减法了。

例如
假设我们设定looccu=0.9looccu=0.9looccu=0.9 lofree=−0.7lofree=-0.7lofree=−0.7
那么, 一个点状态的数值越大,就表示越肯定它是Occupied状态,相反数值越小,就表示越肯定它是Free状态。

上图就展示了用两个激光传感器的数据更新地图的过程。在结果中,一个点颜色越深表示越肯定它是Free的,颜色越浅表示越肯定它是Occupied的。

ROS中使用OccupancyGrid

在ros中的数据格式定义如下:(官网链接)

std_msgs/Header header
nav_msgs/MapMetaData info
int8[] data

后续
详情参考 古月居

机器人导航必备的栅格地图数学模型及使用相关推荐

  1. Python实现占用栅格地图的生成(Occupancy Grid Generation)

    本文的算法细节及推导可以参考Sebastian Thrun的<概率机器人>中占用栅格地图构建部分. 1. 导入所需要的库 import numpy as np import math im ...

  2. 【路径规划】基于matlab蚁群优化遗传算法机器人栅格地图最短路径规划【含Matlab源码 1581期】

    ⛄一.简介 路径规划是实现移动机器人自主导航的关键技术,是指在有障碍物的环境中,按照一定的评价标准(如距离.时间.能耗等),寻找到一条从起始点到目标点的无碰撞路径,这里选取最短距离路径规划的评价标准, ...

  3. 【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 119期】

    ⛄一.简介 路径规划是实现移动机器人自主导航的关键技术,是指在有障碍物的环境中,按照一定的评价标准(如距离.时间.能耗等),寻找到一条从起始点到目标点的无碰撞路径,这里选取最短距离路径规划的评价标准, ...

  4. 【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 1580期】

    ⛄一.简介 路径规划是实现移动机器人自主导航的关键技术,是指在有障碍物的环境中,按照一定的评价标准(如距离.时间.能耗等),寻找到一条从起始点到目标点的无碰撞路径,这里选取最短距离路径规划的评价标准, ...

  5. 【路径规划】基于matlab灰狼算法机器人栅格地图最短路径规划【含Matlab源码 2334期】

    ⛄一.灰狼算法的厂房巡检机器人路径规划简介 0 引言 近年来,我国各行各业的不断发展使相关工作流程得到了完善,其中巡检岗位是一个不可或缺的职位,尤其是在电厂.燃气厂房和煤矿等危险领域中的工作,更不能缺 ...

  6. 【路径规划】基于matlab灰狼算法机器人栅格地图最短路径规划【含Matlab源码 1761期】

    ⛄一.灰狼算法的厂房巡检机器人路径规划简介 0 引言 近年来,我国各行各业的不断发展使相关工作流程得到了完善,其中巡检岗位是一个不可或缺的职位,尤其是在电厂.燃气厂房和煤矿等危险领域中的工作,更不能缺 ...

  7. 概率机器人总结——占用栅格地图先实践再推导

    概率机器人总结--占用栅格地图先实践再推导 概率机器人总结--占用栅格地图构建先实践再推导 实践过程 伪代码分析 真代码分析 推导过程 静态二值贝叶斯滤波 概率机器人总结--占用栅格地图构建先实践再推 ...

  8. 机器人学习--栅格地图(occupancy grid map)构建(部分代码解析)

    转自: 占据栅格地图构建(Occupancy Grid Map) - 知乎 占据栅格地图构建(Occupancy Grid Map)_「小白学移动机器人」一个专注分享移动机器人相关知识的公众号!-CS ...

  9. 机器人学习--从路径规划侧面看栅格地图

    移动机器人路径规划--很多种算法,如果有计算机学科基础的话,可以参考数据结构中的深度优先算法或者广度优先算法 https://zhuanlan.zhihu.com/p/51112799 https:/ ...

最新文章

  1. 华为开源CTR Benchmark,学术界SOTAs的照妖镜?
  2. linux 下常见启动文件配置
  3. php答题评分,Thinkphp 答题 评语
  4. C/C++中无条件花括号的妙用
  5. linux华为路由器模拟器,华为路由器模拟器与实验内容.doc
  6. MySQL 企业监控器 2.3.10 正式版发布
  7. date js 半年_moment.js 搜索栏获取最近一周,一个月,三个月,半年,一年时间
  8. 小米5点位图_最新!地铁5号线、6号线部分车站文化墙设计出炉!你选哪个?
  9. DeepLearningAI 学习笔记 1.3 浅层 logistic 神经网络
  10. Spring4.x()--注解通知的写法
  11. css 中引入第三方字体
  12. hdu-5754 Life Winner Bo(博弈)
  13. vue2.x 父组件监听子组件事件并传回信息
  14. ios怎么引入masonry_IOS之Masonry小结
  15. SVN入门教程,超简单,30分钟学会!
  16. Re-parameterizing Your Optimizers rather than Architectures
  17. 【成神之路】Mysql相关面试题
  18. speedoffice使用方法-word怎么添加边框
  19. SHR之员工合同解除
  20. python代码画樱花-如何用Python画出一颗漂亮的樱花

热门文章

  1. PLC FFT变换 快速傅里叶变换 (含博途PLC完整SCL代码)
  2. PMP项目管理 新考纲概述
  3. 分布式数据库中间件——Mycat2
  4. 软件测试过程与方法(2):系统测试,验收测试
  5. 计算机都学什么数学,2019考研计算机数学都考什么?
  6. mkv转mp4格式怎么转,5种便捷工具盘点
  7. 使用with move选项
  8. matlab中struct2,Matlab中struct的用法
  9. python青年大学习一键提醒功能(团支书、辅导员必备)(一)
  10. 传智播客python视频百度云盘下载_传的解释|传的意思|汉典“传”字的基本解释...