SLAM14讲学习记录-状态估计问题

2024-02-18 21:30

本文主要是介绍SLAM14讲学习记录-状态估计问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经典SLAM模型

x_{k}=f(x_{k-1},u_{k})+w_{k}

z_{k,j}=h(y_{j},x_{k})+v_{k,j}

通常假设两个噪声项w_{k}v_{k,j}满足高斯分布

w_{k}\sim N(0,R_{k}), v_{k,j}\sim N(0,Q_{k,j})

我们希望通过带噪声的数据z和u推断位资x和地图y(以及它们的概率分布),这构成了一个状态估计问题

状态估计问题大致分为两类:

  1. 增量方法,或称滤波器:尽关心当前时刻的状态估计x_{k},对之前的状态则不多考虑,具有马尔可夫性,即下个状态只和上个状态有关。
  2. 批量方法:我们可以把0到k时刻所有的输入和观测数据都放在一起,可以在更大范围达到最优化。

批量方法:

定义机器人位姿和路标点坐标为:

x=\left \{ x_{1},...,x_{N} \right \}y=\left \{ y_{1},...,y_{M} \right \}

用不带下标的u表示所有时刻的输入,z表示所有时刻的观测数据,已知输入数据u和观测数据z,求状态x,y的条件概率分布:

P\left ( x,y|z,u \right )

特别的,当不知道输入,只知道观测数据时,相当与估计P\left ( x,y|z \right ),此问题也成为SfM,即如何从许多图像中重建出三维结构。

利用贝叶斯法则,有:

P\left ( x,y|z,u \right )=\frac{P\left (z,u|x,y \right )P(x,y)}{P(z,u)}\propto P(z,u|x,y)P(x,y)

贝叶斯法则左侧称为后验概率,右侧P(z,u|x,y)成为似然,P(x,y)成为先验。

直接求后验分布是困难的,但求一个状态的最优估计,使得在该状态下后验概率最大化是可行的:

(x,y)_{MAP}^{*}=arg maxP(x,y|z,u)=arg maxP(z,u|x,y)P(x,y)

当没有先验时,可以求解最大似然估计

(x,y)_{MLE}^{*}=arg maxP(z,u|x,y)

似然:在现在的状态(位姿)下,可以产生怎样的观测数据。由于我们知道观测数据,则可以理解为:在什么样的状态(位姿)下,最可能产生现在观测到的数据。

最小二乘的引出:假设噪声项服从高斯分布w_{k}\sim N(0,R_{k})v_{k,j}\sim N(0,Q_{k,j}),则观测与输入数据的条件概率为:

P(z_{k,j}|x_{k},y_{j})=N(h(y_{j},x_{k}),Q_{k,j})

P(u_{k},x_{k-1},x_{k})=N(f(x_{k-1},x_{k}),R_{k})

假设各个时刻的输入与观测互相独立,则:

P(z,u|,x,y)=\prod_{k}P(u_{k}|x_{k-1},x_{k})\prod_{k}\prod_{j}P(z_{k,j}|x_{k},y_{j})

任意高维高斯分布x\sim N(u,\Sigma ),取其概率密度函数展开形式的负对数:

-ln(P(x))=\frac{1}{2}ln((2\pi ^{N})det(\Sigma ))+\frac{1}{2}(x-u)^{T}\Sigma ^{-1}(x-u)

因对数函数是单调增的,所以对原函数取最大值相当与对负对数取最小值,上式第一项与x无关,可以省略。因此,只要最小化右侧的二次型项,就得到了状态的最大似然估计。

二次型成为马哈拉诺比斯距离(马氏距离),高斯分布协方差矩阵之逆称为信息矩阵

带入SLAM模型:

令:

e_{u,k}=x_{k}-f(x_{k-1},u_{k})e_{z,j,k}=z_{k,j}-h(x_{k},y_{k})

得:

minJ(x,y)=\sum_{k}e_{u,k}^{T}R_{k}^{-1}e_{u,k}+\sum_{k}\sum_{j}e_{z,k,j}^{T}Q_{k,j}^{-1}e_{z,k,j}

 这样就得到了一个最小二乘问题,它的解等价于状态的最大似然估计。

 

这篇关于SLAM14讲学习记录-状态估计问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/722509

相关文章

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基