占据栅格地图(occupancy grid maps) -- 二值贝叶斯滤波应用

2023-05-16

    其实,我想讲的关键点是二值状态的最优估计问题,而不仅仅是栅格地图。

    Anyway,that is a good example.

    机器人的地图表示方式有多种,如拓扑地图、特征地图、直接表征法、栅格地图等。其中,栅格地图应用广泛,方便用于机器人的导航规划中(我也比较喜欢)。以下地图就是栅格图表示(每一个像素可以认为是一个格子),图一是概率机器人书本中的例子,图二是国内某品牌扫地机的清扫记录(白色为清扫轨迹)。


                                    图一


                                    图二

    接着,咱们来分析下栅格地图是如何构建的(以二维激光雷达为例)。

    二维激光雷达传感器会扫描出空间中某一高度的平面,相当于给整个环境来一刀,得到一个切面(内侧)。栅格图中的线条对应环境中障碍物的内侧边界。

    雷达扫描过程中,光线撞到(hit)的地方所处坐标位置就对应一种灰度值,没有撞到(miss)的地方所处坐标位置对应另外的灰度值。栅格图中,一个格子某一时刻只有两种状态,要么被光线撞到了要么没有;但是该格子可能多次被撞到或多次没被撞到。如果某个格子多次被撞到了,说明它很有可能是被占用了(有障碍物的意思)。因此,咱们可以用概率的方式来表示某个格子有多大的可能被占用了。

    那么问题来了,一方面,格子的概率如何表示?另一方面,格子多次被撞这种事情的概率要怎么算?

    第一个问题,咱们可以利用图像的灰度值来表达概率,只要有一张“灰度 -- 概率”对应表。如下图所示,纵坐标可以换算为八位的灰度值,横坐标为概率值。图中曲线为单调函数,这样就能从灰度图中直观的看出概率大小(颜色越深代表可能性越大/小)。一般情况下,纯黑色(灰度值为0)概率为0,代表占用;灰色(灰度值为127)概率为0.5,代表未知;纯白色(灰度值为255)概率为1,代表空闲。


                                                     图三

    接着,咱们来讨论第二个问题,以及图三灰度 -- 概率”对应表的曲线由来。

    在实际环境中,栅格只有两种状态,要么occupied,要么free。假设已知格子x被hit一次,格子occupied的概率是Po(x) = 0.9,free的概率是Pf(x)= 1 - Po(x) = 0.1;格子x被miss一次,格子occupied的概率是Po(x) = 0.2,free的概率是Pf(x)= 1 - Po(x) = 0.8。如果格子x被连续hit三次,miss一次,那么格子x的概率Po(x)该如何计算? 

    咱们对格子x的概率换一种表达方式,用概率对数的形式:

    p(x) / p(¬x) =p(x)/(1 − p(x)) // 该事件发生的概率除以该事件不发生的概率。(1)

    l(x) := log(p(x)/(1 − p(x))) //对上式取对数,以自然常数e为底数。(2)

    换了这种表达方式后,格子x的置信度(对应原来的概率)取值范围变成(−∞, ∞),同时避免了概率接近0或者1引起的截断问题。

    图三中的曲线就是(2)式的体现,横坐标表示概率值或置信度,纵坐标表示图像灰度值。

    从(2)式中可得,p(x) = 1 - 1 / (1 + exp{l(x)})  (3)

    回到原来的问题,如果格子x被连续hit三次,miss一次,置信度要如何计算? 

    首先给出结论,计算套路如下:


    也就是说,原来求概率的乘法运算,现在变成了加法。

    事实上,任何对测量做出反应的变量的递增和递减都可以解释为贝叶斯滤波的概率对数形式。

    以下引用《Probabilistic Robotics》中对二值贝叶斯滤波的推导过程。(太懒了,就不自己写公式了)

   

    根据(4.20)式子,结合栅格地图定义,可得:




    从贝叶斯定理推导出来的结论(4.20)式子很巧妙,如果想要知道当前时刻格子x被occupied的置信度,只需要知道上一时刻的置信度值(可以认为是已知的,是迭代的过程量),当前时刻的观察信息(格子x被hit或miss),以及初值(一般是常数)即可,避免了求格子x在occupied的条件下,格子被hit的概率值(这种概率就不容易求解了)。

    咱们来计算下格子x被hit三次,miss一次的occupied概率:

    初值L0 = log(0.5 / (1-0.5)) = 0.

    L1 = L0 + log(0.9 / (1-0.9)) - L0 = log9;

    L2 = L1 + log(0.9 / (1-0.9)) - L0 = log9 + log9 ;

    L3 = L2 + log(0.9 / (1-0.9)) - L0 = log9 + log9 + log9 ;

    L4 = L3 + log(0.2 / (1-0.2)) - L0 = log9 + log9 + log9 - log4 ;

    即L4 = log(9*9*9/4) ≈ 5.2。

    由于式子(3): p(x) = 1 - 1 / (1 + exp{l(x)})  

    因此,此时格子x被occupied的概率P(x) ≈ 0.9945,其对应的灰度值就是L4*某系数。

    从L4的计算过程可知,如果格子x被hit一次,加log9,被miss一次,减log4;看起来,求状态的概率的过程就是加加减减。


    二值贝叶斯滤波方法除了能应用在占据栅格地图之外,还可以在其他二值状态估计中应用。比如,扫地机器人的跌落传感器检测。Drop sensor触发一次,机器人处于悬崖边缘的概率是0.9(为什么不是1?一方面sensor有噪声,另外一方面环境有干扰),drop sensor不触发一次,机器人不处于悬崖边缘的概率是0.8,那么drop sensor连续触发三次,第四次不触发,此时机器人处于悬崖边缘的概率是多少?这个问题跟格子x的问题是一样的,答案也是一样的。咱们可以规定,当机器人处于悬崖边缘的概率达到99.9%时,机器人会执行后退动作,保护自己。通过这种估计方法,机器人能很好的过滤噪声,估计出更加可信的状态,以便更合理的执行动作。

    还有很多很多的例子能应用二值贝叶斯滤波方法,这里就不一一赘述了。    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

占据栅格地图(occupancy grid maps) -- 二值贝叶斯滤波应用 的相关文章

  • Ubuntu18.04 CoppeliaSim Edu 安装教程 (2022年11月)

    Ubuntu18 04 CoppeliaSim Edu 安装教程 1 软件包下载2 启动 CoppeliaSim3 终端快捷命令 测试平台 xff1a Ubuntu 18 04 测试时间 xff1a 2022年11月10日 本文以 Ubun
  • Ubuntu18.04 安装完成后的开发配置

    Ubuntu18 04 安装完成后的开发配置 1 终端工具2 屏幕录制工具3 屏幕截图工具4 向日葵远程操作与开机自启动设置5 MarkDown笔记工具6 ROS 机器人操作系统安装7 编程开发工具8 机器人仿真环境Gazebo 安装Web
  • Ubuntu 20.04 安装 Latex 并使用 vscode 作为文本编辑器

    Ubuntu 20 04 安装 Latex 并使用 vscode 作为文本编辑器 1 Texlive 下载与安装1 1 镜像文件下载1 2 安装步骤1 3 查看是否安装成功1 4 相关依赖安装 2 安装 windows 字体3 vscode
  • Windows下Keil 4工程默认Keil 5打开的解决办法

    案例背景 xff1a 在安装Keil 4进行51系列单片机学习之后安装Keil 5进阶STM32系列单片机的学习 刚安装完后 xff0c 之前编辑的Keil 4工程还是默认Keil 4打开 xff0c Keil 5的工程默认Keil5打开
  • Python3 利用requests 库进行post携带账号密码请求数据

    span class hljs keyword import span urllib json requests url 61 span class hljs string 39 http 127 0 0 1 8000 account lo
  • Python爬虫 requests使用post请求登录需要验证码的网站

    具体代码为 xff1a import requests span class hljs built in from span bs4 import BeautifulSoup s 61 requests Session get url 61
  • WinSock API网络编程——UDP协议(http://www.impcas.ac.cn/usr/lujun/browse.asp?id=winsock_udp)

    WinSock API网络编程 UDP协议作者 xff1a 陆军 Email xff1a ldlujun 64 163 com 时间 xff1a 2004 11 14UDP协议 xff08 User Datagram Protocol xf
  • Raspberry 静态IP配置

    前言 Raspberry 在使用过程中 xff0c 需要手动设定静态IP地址 xff0c 但是深入下去发现不同的raspberry版本不同 xff0c 设置上也存在差异 etc network interfaces 在之前的文章 Raspb
  • 【硬件】调试经验:串口RS232不通,怎么办

    写作时间 xff1a 2020 07 24 目录 xff1a 1 关键词 2 坑坑坑 xff08 不要跳 xff09 3 小技巧与说明 正文 xff1a 1 关键词 串口 串口助手上位机 usb转232线缆 串口命令 RS232 2 检查点
  • 【Github】git bash无法复制粘贴

    参考教程https www cnblogs com slw0113 p 15602715 html 使用git bash时只能使用手工敲击所有命令 xff0c 非常不方便 1 在屏幕右键打开git bash命令窗口 2 在左上角右键 xff
  • 报错{“msg“:“invalid token“,“code“:401}问题的解决

    报错 msg invalid token code 401 问题的解决 xff1a 解决办法 xff1a 将精确的路由放在最上面 xff0c 模糊的路由放在最下面 xff0c 防止精确的路由被覆盖
  • Android 电池管理系统

    https blog csdn net bhj1119 article details 52947344 Android电池服务的源码结构 Framework base services java com android server Sy
  • eBPF技术介绍

    前言 eBPF起源于linux内核 xff0c 它可以以砂箱程序运行在操作系统内核的特权上下文 xff0c 高效 xff0c 安全 xff0c 易于扩展而不需要修改内核源码或者加载内核模块 操作系统一直是实现观测 xff0c 安全和网络功能
  • eBPF开发工具链

    有几个开发工具链可以帮助开发和管理eBPF程序 它们都满足了用户的不同需求 xff1a bcc BCC是一个框架 xff0c 使用户能够编写嵌入其中的eBPF程序的python程序 该框架主要针对涉及应用程序和系统分析 跟踪的用例 xff0
  • Off-CPU分析

    前言 性能问题可以分为两种类型 xff1a On CPU xff1a 线程花时间在CPU上运行的地方 xff1b Off CPU xff1a 在I O xff0c 锁 xff0c 计数器 xff0c 分页 交换上阻塞等待的时间 Off CP
  • uint8_t / uint16_t / uint32_t /uint64_t数据类型详解

    https blog csdn net bruce 0712 article details 72805903
  • 什么是系统调用?为什么要用系统调用?

    什么是系统调用 Linux内核中设置了一组用于实现各种系统功能的子程序 xff0c 称为系统调用 用户可以通过系统调用命令在自己的应用程序中调用它们 从某种角度来看 xff0c 系统调用和普通的函数调用非常相似 区别仅仅在于 xff0c 系
  • android的surfaceflinger原理学习

    概念 SurfaceFlinger是一个系统服务 xff0c 如 xff1a audioflinger xff0c audiopolicyservice等等 xff0c 系统的主要服务通过这个文章进行了解 xff0c Android的系统服
  • labview界面分隔和自定义窗口大小

    gt gt gt gt gt gt 我的博客目录导航 转自 statemic LabVIEW程序界面的布局 控件的显示效果与监视器是密切相关的 xff0c 因此在程序设计时需要考虑目标监视器的颜色 分辨率等因素 xff0c 并明确运行该应用
  • CAN通信矩阵的理解(CAN报文信号的属性)

    CAN通信矩阵 1 CAN通信矩阵是什么 CAN通信矩阵 xff08 CAN Communication Matrix xff09 通常由整车厂完成定义 xff0c 车辆网络中的各个节点需要遵循该通讯矩阵才能完成信息的交互和共享 我们知道C

随机推荐

  • Android OMX介绍(总括)

    一 OpenMax简介 xff08 缩写为 xff1a OMX xff09 OpenMAX是一个多媒体应用程序的标准 由NVIDIA公司和Khronos 在2006年推出 它是无授权费的 跨平台的C语言程序接口序列 xff0c 这些接口对音
  • 从此以后谁也别说我不懂LDO了

    LDO是个很简单的器件 xff0c 但是我跟客户沟通的过程中 xff0c 发现客户工程师的技术水平参差不齐 xff0c 有的工程师只是follow 别人以前的设计 xff0c 任何原理和设计方法都不懂 xff0c 希望大家看完这篇文章都能成
  • 屏下指纹技术实现方案与原理

    1月24日 xff0c 全球第一台量产的屏幕指纹手机vivo X20 Plus屏幕指纹版正式在北京亮相 据悉 xff0c 该手机屏幕指纹版已经支持支付宝和微信的指纹支付 vivo X20 Plus屏下指纹 xff0c 其原理是利用光电反射技
  • linux系统的休眠与唤醒简介

    系统挂起 xff08 Suspend xff09 是电源管理 xff08 APM amp ACPI xff09 的一个特性 xff0c 给用户带来了很大的方便 Linux在2 6系列核心中对电源管理有了较好的支持 xff0c 下面就谈谈Li
  • 奇偶校验的概念

    奇偶校验 Parity Check 是一种校验代码传输正确性的方法 根据被传输的一组二进制代码的数位中 34 1 34 的个数是奇数或偶数来进行校验 采用奇数的称为奇校验 xff0c 反之 xff0c 称为偶校验 采用何种校验是事先规定好的
  • HTTP Basic, Session, Token 三种认证方法简介

    1 概述 本文简介 HTTP Basic xff0c Session xff0c Token 三种认证方法 Basic 认证 xff1a 户籍部门已给你签发了一张身份证 你每次去办事 xff0c 都要带上身份证证 xff0c 后台要拿你的身
  • 车路协同、智能网联方面的英文专业词汇

    车路协同系统 Cooperative Vehicle Infrastructure System xff08 CVIS xff09 车辆对基础设施 Vehicle to Infrastructure V2N 车辆对网络 Vehicle to
  • 国内外知名激光雷达企业盘点

    https mp weixin qq com s KBOZfM qP9y oCAB6FxZxQ 国外知名产品 品牌 图示 所属国家 核心产品 Velodyne 美国 机械式激光雷达 HDL 64E HDL 32E VLP 16 车规级 激光
  • 激光雷达的性能指标-以大疆livox-Mid40激光雷达为例

    xff08 看了一下 xff0c 有网上列表的探测范围数据与本文截图不太一致 xff0c 本文截图来自livox官网手册 xff09 有人问我 这个参数是什么意思 xff0c 在此解释一下 xff1a 激光打到不同的射物上 xff0c 能反
  • 《FlowNet3D》(CVPR2019)--直接从点云中估计场景流

    暴走兔学习了CVPR 2019的论文 xff1a FlowNet3D Learning Scene Flow in 3D Point Clouds xff0c 为了更好的理解该论文 xff08 年纪大了容易忘 xff09 xff0c 在此做
  • 增量式PID和位置式PID

    转自 panpan 0315的博客 原文地址 http www eefocus com panpan 0315 blog 10 08 194022 25161 html 1 先介绍几个概念 xff0c 首先是比例带 比例带是一个无量纲的纯数
  • 需要基于消失点标定资料的亲们注意啦!(Especially for私信和留言给我的小伙伴)

    需要基于消失点标定资料的亲们注意啦 xff01 xff08 Especially for私信和留言给我的小伙伴 xff09 截图为我调研和筛选之后的经典文献 xff0c 已上传至CSDN xff0c 请移步到该链接下载 https down
  • 解决error:OpenCV4.3.0 无法解析的外部符号 void __cdecl cv::imshow

    今天用opencv 4 3 0写demo xff0c 遇到编译错误 xff1a error LNK2019 无法解析的外部符号 void cdecl cv imshow xff0c 反复检查了几次VS的配置 xff0c 确定自己包含了头文件
  • 毫米波雷达和视觉融合简记

    毫米波雷达和视觉传感器融合笔记 毫米波雷达和摄像头概述毫米波雷达和视觉传感器融合时间融合空间融合 写在前面 xff1a 1 按照信息抽象的五个层次 xff0c 融合可分成五个级别 xff0c 即 xff1a 检测级融合 位置级融合 属性 x
  • 多目标跟踪-DeepSort分析(一)论文解读及代码架构

    先引入多目标跟踪DeepSort的论文地址及代码链接 xff08 Python版 xff09 xff1a 论文地址 xff1a https arxiv org pdf 1703 07402 pdf 代码链接 xff1a https gith
  • stm32f4xx 加密

    文章参考http www 61ic com Technology embed 201311 50853 html xff0c 一 ID获取 34 设备电子签名 电子签名存储在 Flash 区 可以使用 JTAG SWD 或 CPU 对其进行
  • C++为什么要学习STL和Boost库

    最近一年我电话面试了数十位 C 43 43 应聘者 xff0c 惯用的暖场问题是 工作中使用过 STL 的哪些组件 xff1f 使用过 Boost 的哪些组件 xff1f 得到的答案大多集中在 vector map 和 shared ptr
  • 智能硬件新产品开发逻辑

  • 移动机器人入门介绍

    移动机器人技术应用 xff1a 天上飞的 xff0c 水里游的 xff0c 地上跑的 xff0c 都可以应用移动机器人领域的技术 比如说 xff0c 1 工业机器人 xff0c 搬运机器人 xff08 AGV xff09 xff1b 2 商
  • 占据栅格地图(occupancy grid maps) -- 二值贝叶斯滤波应用

    其实 xff0c 我想讲的关键点是二值状态的最优估计问题 xff0c 而不仅仅是栅格地图 Anyway xff0c that is a good example 机器人的地图表示方式有多种 xff0c 如拓扑地图 特征地图 直接表征法 栅格