【激光SLAM】基于滤波的激光SLAM方法(Grid-based)

Filter-based SLAM

  • 贝叶斯滤波
    • 数学概念
    • 贝叶斯滤波特性
    • 贝叶斯滤波的推导
  • 粒子滤波(Particle filter)
    • 特性
    • 流程
    • 状态传播
    • 权重评估
    • 重采样
    • 算法流程
    • 存在的问题
  • FastSLAM的原理及优化
    • FastSLAM介绍
    • 算法流程
    • FastSLAM优化
      • 存在的问题及优化
      • 进一步优化proposal分布
      • 最终算法流程
  • Gmapping介绍

  • 目前大部分的基于状态估计的算法都是基于贝叶斯滤波的
  • 粒子滤波是贝叶斯滤波的一种实现方式。在视觉SLAM中,滤波器会同时估计机器人的位姿和特征地图,速度慢,只能在小环境内用。在激光SLAM中,把位姿和地图的估计分开了,对稍微大一些的环境也适用。但随着地图增大,会造成粒子耗散的问题。
  • FastSLAM基于粒子滤波

贝叶斯滤波

数学概念

贝叶斯滤波特性

  • 估计的是概率分布(贝叶斯——最大后验估计:估计出数值的后验概率分布,找到最大值的地方),不是具体数值(频率学派——极大似然估计:找到一个数值,使得我当前发生的概率最大)二者在高斯分布的情况下等价。
  • 是一大类方法的统称
  • 是一个抽象的表达形式——对于不同问题有不同的实现方式(卡尔曼、粒子滤波)
  • 迭代估计形式

贝叶斯滤波的推导

预测概率分布为t-1时刻的后验概率分布,结合里程计数据对t时刻进行预测的结果。该结果再通过观测数据进行矫正,得到t时刻的后验概率分布。可以理解为一个迭代估计的过程。

粒子滤波(Particle filter)

特性

  • 贝叶斯估计的一种实现方式
  • 能处理非线性情况
  • 能处理多峰分布的情况(全局定位)
  • 用一系列粒子(particle)近似概率分布
  • 非参滤波器

用一系列例子近似概率分布,可以处理多峰分布的情况,如左图

流程

粒子滤波由一系列粒子来表示分布,权重用于评估假设符不符合真实情况,即观测数据能否与地图匹配上,或者说:用一个假设位姿跟机器人地图的匹配度来评估其权重
左图为权重相等的情况
具体流程如下:


重采样: 用于去除权重小的粒子
权重清零: 如果有n个粒子,则权重清零后,每个粒子的权重为n分之一

每次重采样后,每个粒子的权重都相等。随着新的观测数据进来,粒子就会不断更新,粒子的权重也随之更新。

状态传播


第一条式子得到的是一个分布,而第三条式子对每一个粒子单独去预测,得到的是一个具体的位姿。

粒子传播的方式即为运动学模型:

当没有观测值的时候,粒子云范围会越来越大,最终趋于均匀分布,如右图。当有观测值的情况下,每次进行重采样的时候都会把权重低的粒子去掉,不断缩小粒子云范围,聚集在真实位姿的地方。

权重评估

机器人位姿跟地图的匹配程度

权重评估后,权重的大小与f近似,但是分布仍然与g相似

重采样

重采样的目的:用proposal分布的粒子和观测模型的权重生成符合后验概率分布的粒子群

权重大的粒子会被多次选中,相当于该粒子被多次复制;权重小的粒子选中次数较少或没有被选中,相当于该粒子被删除。
重采样后,权重的分布与f(后验分布)近似,大小归一化

算法流程

存在的问题

  • 粒子耗散问题(多样性散失)
  • 维数灾难
  • 当proposal比较差的时候,需要用很多的粒子才能较好的表示机器人的后延概率分布

FastSLAM的原理及优化

FastSLAM是Gmapping的基础,采用RBPF,用粒子滤波来估计机器人的位姿,然后分别为每一个粒子计算地图。

FastSLAM介绍

这个分解其实就是RB分解

算法流程

FastSLAM优化

存在的问题及优化

问题1: 每一个粒子都包含自己的栅格地图。对于稍微大一点的环境来说,每一个粒子都会占用比较大的内存。如果机器人的里程计误差比较大,即proposal分布跟实际分布相差较大,则需要较多的粒子才能比较好的表示机器人位姿的后验概率分布,会造成内存爆炸。

目的: 要保持粒子的数量在一个比较小的数值。
方法: 提升proposal分布采样的位姿质量。
加上Scan_Matching优化位姿,得到局部最优值

问题2: 粒子耗散问题,因此每一次进行重采样都有一定的随机性。随着重采样次数的加多,粒子的多样性会耗散掉,即最终的所有粒子都来自同一个粒子或者少数的几个粒子的复制。如此一来,就无法通过粒子切换来达到“回环检测”的效果(但是滤波算法本身不具备回环检测的步骤,只是看起来像)。

目的: 尽量缓解粒子耗散的问题。
方法: 减少重采样的次数,用一个量来表示当前估计和真实分布的差异性:

进一步优化proposal分布

上面的优化方式: 首先从proposal分布进行采样,然后进行极大似然估计提升采样的质量。
本次优化方式: 考虑最近一帧的观测,把proposal分布限制在一个狭小的有效区域。然后在正常的对proposal分布进行采样。
假设:
激光雷达的匹配比里程计的测量精确很多,从分布上来说,激光雷达匹配的方差要比里程计模型的方差小很多。如图所示,激光匹配的方差比里程计要小很多,如果proposal分布用激光匹配来表示,则可以把采样范围限制在一个比较小的区域,因此可以用更少的粒子覆盖机器人的概率分布


激光雷达观测模型的方差较小,假设其服从高斯分布:

高斯分布的求解:


最终算法流程


Gmapping介绍

  • 目前使用的最为广泛的2D激光SLAM算法
  • 在较小的环境中能实现较好的建图效果
  • 以FastSLAM为基本原理
  • 在FastSLAM的基础上进行了优化1和优化2

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

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

相关文章

RabbitMQ学习整理————基于RabbitMQ实现RPC

基于RabbitMQ实现RPC 前言什么是RPCRabbitMQ如何实现RPCRPC简单示例通过Spring AMQP实现RPC 前言 这边参考了RabbitMQ的官网,想整理一篇关于RabbitMQ实现RPC调用的博客,打算把两种实现RPC调用的都整理一下,一个是使用官方提供的一个Java cli…

思维模型整合

思维模型整合 4P--- 4C思考模型能力圈模型 4P— 4C思考模型 在竞争激烈的今天,每个赛道都有众多可以为客户提供相同价值的对手,而赛道中的佼佼者之所以能打败大部分人,可能并不是他们能比别人更能讨好大众,而是因为在这个赛道它有…

Jmeter学习系列之六:阶梯加压线程组Stepping Thread Group详解

性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间。 在jmeter中,有这样一个插件,可以帮我们实现这个功能,这个插件就是:Stepping Thread Group 1、下载配置方法 1.1.下载配置 插件下载地址:…

Qt读写局域网共享文件夹

Qt读写局域网共享文件夹 #include "widget.h" #include "ui_widget.h"#include <QDir> #include <QSettings>//Qt读取局域网共享文件夹文件内容 解决不同网段无法访问共享文件夹问题 //使用QDir或QFile等都可以直接访问局域网共享文件. //路径…

Selenium定位不到元素怎么办?一定要这么做

在使用Selenium进行自动化测试时&#xff0c;碰到无法定位元素该怎么办&#xff1f;这里总结了9种情况下的元素定位方法&#xff1a; 1、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位&#xff0c;对于frame/iframe表单内嵌的页面元素无法直接定位。 解决…

Jenkins持续集成Python项目

一、前言   之前学习了很多自动化测试框架&#xff0c;但是写的脚本都是本地执行&#xff0c;多数用来造数据。最近公司掀起一股自动化测试的风&#xff0c;所以就想研究下如何集成jenkins&#xff0c;本次采用pytest&#xff0c;用的是阿里云服务器centos7。 二、服务器环境…

石头剪刀布游戏(C语言)

题目描述 石头剪刀布游戏有 3 种出拳形状&#xff1a;石头、剪刀、布。分别用字母 A , B , C 表示。 游戏规则: 出拳形状之间的胜负规则如下&#xff1a; A > B&#xff1b;B > C&#xff1b;C > A&#xff1b;">"左边一个字母&#xff0c;表示相对优…

bat 查找文件所在

脚本 在批处理文件&#xff08;.bat&#xff09;中查找文件所在的目录&#xff0c;你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例&#xff0c;演示如何在批处理文件中查找指定文件并输出其所在目录&#xff1a; echo off setlocal enabledelayedexpansio…

Vue 封装的 axios 类的使用(小bug 改进)

http类 import { baseUrl } from "./config"; //引入config.js中的配置 import axios from "axios"; //引入axios import qs from "querystringify"; //form-Data请求时的工具类class Http{axios null;lastRequestIntercept null…

Linux安全基线与加固

基于CIS 基线 GitHub - daniel-armbrust/linux-security-baseline: Linux Security Baseline based on CIS Benchmarks. |----------------[ GNU/Linux安全基线与加固-0.3 ]----------------|0. About this doc1. Routine security baseline1.1 Security fix update1.2 Pass…

开源LLMs导览:工作原理、顶级LLM列表对比

目录 一、开源 LLM 是什么意思&#xff1f;二、开源LLM如何工作&#xff1f;2.1 预训练2.2 代币化2.3 开源LLM的微调2.4 输入编码2.5 训练与优化2.6 推理 三、开源LLM对组织的好处3.1 增强的数据安全和隐私3.2 节约成本3.3 减少供应商依赖性3.4 代码透明度 四、哪种LLM模式最好…

数据可视化在商业领域有哪些重要性?

数据可视化在商业领域的重要性体现在多个方面&#xff0c;它通过将复杂的数据集转化为直观、易于理解的图形和图表&#xff0c;帮助企业和组织做出更明智的决策。以下是数据可视化对商业的一些关键重要性&#xff1a; 提高决策效率&#xff1a;通过直观的图表和图形&#xff0c…

漫漫数学之旅031

文章目录 经典格言数学习题古今评注名人小传 - 经典格言 如果没有数学知识&#xff0c;这个世界的事物是无法搞清楚的。——罗杰培根&#xff08;Roger Bacon&#xff09; 好的&#xff0c;各位看官&#xff0c;让我们来听听罗杰培根这位中世纪的“科学老顽童”是怎么说的&…

罗克韦尔AB的PLC实现ModbusTCP和ModbusRTU协议标签方式通讯

本文是通过IGT-DSER智能网关读写AB罗克韦尔Compact、Control系列PLC的标签数据缓存并转为Modbus从站协议&#xff0c;与上位机通讯的案例。 打开智能网关的参数软件(下载地址)&#xff0c;通过功能->数据转发与平台对接&#xff0c;再选择数据转发与缓存’&#xff0c;进入以…

基于java+springboot+vue实现的城市垃圾分类管理系统(文末源码+Lw)23-191

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本城市垃圾分类管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数…

基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Python模块百科_命令行参数解析argparse

Python模块百科_命令行参数解析模块argparse 一、简介(argparse)二、命令行参数解析器类(ArgumentParser)三、添加命令行参数解析规则(add_argument)3.1 关键字name or flags3.2 关键字action3.2.1 store3.2.2 store_const3.2.3 store_true 和 store_false3.2.4 append3.2.5 ap…

Android 剪切板相关

Android 剪切板相关 本篇文章简单介绍android中的ClipboardManager. 1:简介 ClipboardManager是android中用于管理剪切板一个类.它允许应用程序读取和写入剪切板数据,包括文本,图片等. 2: 获取实例 获取实例也很简单.如下: ClipboardManager clipboardManager (Clipboar…

【UEFI】数字签名的使用

简介 1&#xff09; 数字签名是指附加在数据单元上的一些数据&#xff0c;或是对数据单元所作的密码变换。这种数据或变换能使数据单元的接收者确认数据单元的来源和数据完整性&#xff0c;并保护数据&#xff0c;防止被人伪造。签名机制的本质特征是该签名只通过签名者的私有…

使用python查看官网是否发布新的内容

目录 前言 第一章、python介绍和使用pip install下载包 1.python介绍 2.使用vscode编写python 3.pip install的使用 第二章、查看官网是否发布新的内容 第三章、代码实现 目录结构 代码实现 check_new_news.py files.py news.py main.py file.txt 运行演示 前言 也…