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

news2024/10/7 18:28:19

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

  • 占据栅格地图(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

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

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

带入 O d d ( s ∣ z ) Odd(s|z) Odd(sz)中得到
O d d ( 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 ) O d d ( 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(sz)=p(s=0z)p(s=1z)=p(zs=0)p(s=0)/p(z)p(zs=1)p(s=1)/p(z)=p(zs=0)p(zs=1)Odd(s)

对两边取对数得:

l o g O d d ( s ∣ z ) = l o g p ( z ∣ s = 1 ) p ( z ∣ s = 0 ) + l o g O d d ( s ) logOdd(s|z)=log\frac{p(z|s=1)}{p(z|s=0)}+logOdd(s) logOdd(sz)=logp(zs=0)p(zs=1)+logOdd(s)

这样,含有测量值的项就只剩下了 l o g p ( z ∣ s = 1 ) p ( z ∣ s = 0 ) log\frac{p(z|s=1)}{p(z|s=0)} logp(zs=0)p(zs=1)称这个比值为测量值的模型,标记为 l o m e a s lomeas lomeas
测量值的模型只有两种 l o f r e e = l o g p ( 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=0s=0)p(z=0s=1) l o o c c u = l o g p ( 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=1s=0)p(z=1s=1)

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

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

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

例如
假设我们设定 l o o c c u = 0.9 looccu=0.9 looccu=0.9 l o f r e e = − 0.7 lofree=-0.7 lofree=0.7
那么, 一个点状态的数值越大,就表示越肯定它是Occupied状态,相反数值越小,就表示越肯定它是Free状态。
在这里插入图片描述
上图就展示了用两个激光传感器的数据更新地图的过程。在结果中,一个点颜色越深表示越肯定它是Free的,颜色越浅表示越肯定它是Occupied的。

ROS中使用OccupancyGrid

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

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

后续
详情参考 古月居

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复旦大学-华盛顿大学EMBA项目位列全球第9,学术研究连续3年亚洲第一

2022年10月17日,英国《金融时报》(FT)发布全球EMBA项目排名,复旦大学-华盛顿大学EMBA项目位列全球第9位,学术研究连续3年亚洲第一,毕业生薪酬水平全球第六。    复旦大学-华盛顿大学EMBA项目是中国大陆…

JavaWeb三大组件之Filter

目录 1、Filter概述 2、Filter快速入门 2.1、开发步骤 2.2、代码演示 3、Filter执行流程​编辑 4、Filter拦截路径 5、过滤器链 5.1、概述 5.2、代码演示 5.3、问题 6、案例 6.1、需求 6.2、分析 6.3、代码实现 6.3.1、创建Filter 6.3.2、编写逻辑代码 6.3.3、…

SuperMap GIS管线数据处理QA

一、数据简介 传统的以二维平面展现网络数据的方式,在一定程度上限制了信息的表达,尤其是在复杂的空间位置关系上。三维网络是对现实中的网络的真实模拟,而非抽象模拟,因此能够全方位的展现信息。   例如,多层结构的…

python期末复习案例

一.条件判断 1. 判断一个数能否同时被3和7整除 and 两者都要为真 2.判断一个数能同时被3或者7整除 但不能同时被3和7整除 ★要使用not 3.输入年份,看是否为闰年 闰年条件:能被4整除但不能被100整除,或者能被四百整除 定义两个变量 保存一个…

leetcode 464. 我能赢吗 官方代码的一步步演进

这里写自定义目录标题题目示例解题优化1 记忆化搜索优化2:使用二进制代替choosable_list计算复杂性题目 在 “100 game” 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和 达到或超过 100 的玩家…

Kafka - 09 Kafka副本 | Leader选举流程 | Follower故障 | Leader故障

文章目录1. 副本基本信息2. Leader选举流程3. Follower故障4. Leader故障1. 副本基本信息 1)Kafka 副本作用:提高数据可靠性。 2)Kafka 默认副本 1 个,生产环境一般配置为 2 个,保证数据可靠性;太多副本会…

深度学习网络模型——DenseNet模型详解与代码复现

深度学习网络模型——DenseNet模型详解与代码复现1、DenseNet概述2、DenseNet网络结构1、DenseNet中的DenseBlock模块2、DenseNet中的Transition模块3、DenseNet网络结构参数设置4、实验结果对比1、DenseNet概述 2、DenseNet网络结构 1、DenseNet中的DenseBlock模块 2、DenseNe…

内网穿透:针对小白的VSCode+云服务器+本地Ubuntu搭建GPU云服务器

前言 自己实验室的情况: 实验室拥有自己的GPU集群、工作站使用仅限于线下或者远程向日葵(不稳定、速度慢)拥有自己的廉价cpu轻量云服务器(阿里云服务器(2G2*cpu),大概40左右一年) 平时出差、在宿舍等需要远程操作,向…

Python学习笔记-数字类型

目录 1. 数字类型 1.1 整型 1.2 浮点数 1.3 复数 1.4 布尔类型 2. 常用内置数值计算函数库 3. 随机数函数 本文记录python中的基本数字类型信息,以及一些其他的相关知识点。 1. 数字类型 python中用于标识数字或者数值的数据类型,主要有如下分类…

​鸽群卫星(Flock)​介绍

鸽群卫星(Flock)是美国Planet公司[1]研制的3U遥感立方体卫星星座,单颗卫星重约5kg,也被称为“鸽子”(Dove)。鸽群星座主要有两类轨道:空际空间站释放420km高、52度倾角轨道(ISS&…

R语言基于决策树的银行信贷风险预警模型

引言 我国经济高速发展,个人信贷业务也随着快速发展,而个人信贷业务对提高内需,促进消费也有拉动作用。有正必有反,在个人信贷业务规模不断扩大的同时,信贷的违约等风险问题也日益突出,一定程度上制约着我…

力扣(LeetCode)115. 不同的子序列(C++)

动态规划 状态转移方程 f[i,j]{f[i−1,j]f[i−1,j]f[i−1,j−1]if s[i]t[j]f[i,j]\begin{cases} f[i-1,j]\\ f[i-1,j]f[i-1,j-1]&\text{if } s[i]t[j] \end{cases}f[i,j]{f[i−1,j]f[i−1,j]f[i−1,j−1]​if s[i]t[j]​ 无论选不选 s[i]s[i]s[i] , f[i][j]f[i…

解决报错:fatal: in unpopulated submodule *

目录 问题 解决 问题 今天想把两个 Git 工程合并成一个工程,尽管已经将其中一个工程的 .git 目录删除了,但是在合并提交时还是遇到了一个和子模块相关的报错,具体报错信息如下: fatal: in unpopulated submodule * 报错截图如下…

【iMessage苹果相册日历推位置推送】软件安装deviceToken是由APNs生成的

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

SpringBoot+html+vue模板开发

除了对某个表基本的增删改查以外&#xff0c;可能需要额外的增加操作&#xff0c;这里是通过按钮来实现的 1、新增一个测试按钮 <el-button type"primary" class"butT" click"test()">测试</el-button> 2、这个按钮绑定一个方法t…

Android 创建桌面组件Widget——构建应用微件(二)

Android 创建桌面组件Widget——构建应用微件&#xff08;二&#xff09;Android 创建桌面组件Widget——构建应用微件&#xff08;二&#xff09;概览使用 AppWidgetProvider 类接收应用微件广播 Intent固定应用微件设置预览图片完整代码Android 创建桌面组件Widget——构建应…

Spark学习(7)-SparkSQL函数定义

1 SparkSQL 定义UDF函数 目前在SparkSQL中&#xff0c;仅仅支持UDF和UDAF函数&#xff0c;python仅支持UDF。 1.1 定义方式 定义方式有两种&#xff1a; sparksession.udf.register() 注册的UDF可以用于DSL和SQL&#xff0c;返回值用于DSL风格&#xff0c;传参内的名字用于SQ…

如何在Odoo中添加水印?

为了防止信息的泄露&#xff0c;水印作为一种防泄密的方式&#xff0c;被使用的频率越来越高。 那么在Odoo中&#xff0c;如何添加水印呢&#xff1f;其实添加的方法有很多&#xff0c;如利用svg生成背景图&#xff0c;重复的dom元素覆盖等等。 本文主要讲解利用canvas输出背…

不懂单链表? 这篇文章就帮你搞明白

坚持看完&#xff0c;结尾有思维导图总结 链表对指针的操作要求不低链表的概念链表的特性链表的功能(最重要)定义和初始化头插头删细节说明尾插尾删寻找链表元素与打印链表在 某位置后插入删除在某位置的插入删除销毁链表链表的概念 什么是链表 官方概念&#xff1a;链表是一种…

链表(1)

我们以前学过的线性数据结构底层原理都是依托静态数组来实现的&#xff0c;今天我们讲学习一个最简单的动态数据结构---->链表&#xff01; 掌握链表有助于学习更加复杂的数据结构&#xff0c;例如&#xff1a;二叉树、trie 链表的优点是不需要处理固定的问题&#xff0c;…