一起自学SLAM算法:7.4 基于贝叶斯网络的状态估计

news2024/11/16 1:24:05

连载文章,长期更新,欢迎关注:

在7.2.4节中,讨论了表示机器人观测与运动之间依赖关系的概率图模型,主要是贝叶斯网络(实际应用在机器人中的是动态贝叶斯网络)和马尔可夫网络(实际应用在机器人中的是因子图)。在概率图模型表示的基础上,就可以利用可观测量(u_{k}z_{k})推理不可观测量(m_{i}x_{k}),这个概率推理过程也叫状态估计,在7.3节中对基础性的估计理论已经进行了讨论。前面这些关于表示和推理的讨论都是基于一般情况而言,不涉及机器人实际量测数据。本节就来引入机器人实际量测数据,并基于贝叶斯网络表示这些数据的关系,基于这种表示,状态估计很容易进行,一般采用贝叶斯估计。

贝叶斯估计是一种通用框架,具体形式包括最小均方误差估计、最大后验估计等,其核心是在后验概率分布中,最小化误差的期望,这些已经在7.3.2节有讨论。那么,下面就来讨论引入机器人实际量测数据时,后验概率分布的具体形式。假设量测数据由图7-19所示的动态贝叶斯网络表示,可以从图中看出,根据选取估计量的不同,又分为几种估计问题。如果仅对机器人当前位姿状态x_{k}进行状态估计,这就是定位问题,对应的后验概率分布表述如式(7-88)所示。如果除了估计机器人当前位姿状态x_{k},还对地图m同时进行估计,这就是在线SLAM问题,对应的后验概率分布表述如式(7-89)所示。如果要对机器人所有历史位姿状态x_{1:k}和地图m同时进行估计,这就是完全SLAM问题,对应的后验概率分布表述如式(7-90)所示。

 由于(7-88)所示的定位问题和(7-89)所示的在线SLAM问题求解过程都是类似的,也就是所谓的滤波方法。为了使讨论过程更加简洁,就拿式(7-88)来展开分析,由于式(7-88)中的地图条件m是常量可以忽略,那么讨论形式就可以进一步简化为P(x_{k}|z_{1:k},u_{1:k})本节内容旨在通过对P(x_{k}|z_{1:k},u_{1:k})的分析,让大家掌握滤波方法的基础原理。而基于滤波方法基础原理的典型在线SLAM系统实现框架EKF-SLAM将在7.7.1节中详细讨论,基于滤波方法基础原理的典型完全SLAM系统实现框架Fast-SLAM将在7.7.2节中详细讨论。

虽然式(7-90)所示的完全SLAM系统可以用滤波方法求解,比如著名的Fast-SLAM实现框架。但是,贝叶斯网络表示下的完全SLAM系统能很方便地转换成因子图表示,这部分内容已经在7.2.4节中讨论过了。利用因子图表示完全SLAM问题,然后用最小二乘估计进行求解会更方便,这部分内容将在7.5节中展开。

7.4.1 贝叶斯估计

为了后面讨论方便,将后验概率分布P(x_{k}|z_{1:k},u_{1:k})用符号bel(x_{k})替代,bel(x_{k})常常也称为置信度。下面结合机器人量测数据u_{k}z_{k},分析P(x_{k}|z_{1:k},u_{1:k})的具体形式[4] p31~33。首先利用式(7-29)所示的贝叶斯准则将P(x_{k}|z_{1:k},u_{1:k})进行分解,分解结果如式(7-91)所示。式中的分母P(z_{k}|z_{1:k-1},u_{1:k})由量测数据可以直接计算,是一个常数值,因此可以忽略。为了保证P(x_{k}|z_{1:k},u_{1:k})是一个求和为1的概率分布,需要乘以归一化常数\eta保证其合法性。剩下就是P(z_{k}|x_{k},z_{1:k-1},u_{1:k})P(x_{k}|z_{1:k-1},u_{1:k})两项概率分布的乘积。

在贝叶斯网络中,有一条很重要的性质就是条件独立性。例如,除了直接指向某节点的原因节点外,其他所有节点与该节点都是条件独立的。利用这个条件独立性,可以进行式(7-92)所示的化简。

 另外,可利用全概率公式P(x)=\int P(x|y)P(y)dy进行式(7-93)所示的化简。

 同样,利用条件独立性,可以进行式(7-94)所示的化简。

 而根据常识,k时刻的控制量u_{k}并不会影响k-1时刻的状态x_{k-1},所以可以进行式(7-95)所示的化简。

 将式(7-94)和(7-95)代入(7-93),化简结果如式(7-96)所示。

 再将式(7-96)和(7-92)代入(7-91),化简结果就是后验概率分布P(x_{k}|z_{1:k},u_{1:k})的最终结果了,如式(7-97)所示。

 那么,后验概率分布P(x_{k}|z_{1:k},u_{1:k})的计算过程可以整理成下式(7-98)所示的形式。其中P(x_{k}|x_{k-1},u_{k})为运动模型的概率分布,P(z_{k}|x_{k})为观测模型的概率分布,计算方法见7.2.2节和7.2.3节,也就是说P(x_{k}|x_{k-1},u_{k})P(z_{k}|x_{k})由机器人量测数据给出。在已知状态初始值x_{0}的置信度后,利用运动数据P(x_{k}|x_{k-1},u_{k})和前一时刻置信度bel(x_{k-1})预测出当前状态置信度\overline{bel(x_{k})},这个过程称为运动预测。由于运动预测存在较大误差,所以还需要利用观测数据P(z_{k}|x_{k})对预测\overline{bel(x_{k})}进行修正,修正后的置信度为bel(x_{k}),这个过程称为观测更新。

很显然,式(7-98)所示计算后验概率分布P(x_{k}|z_{1:k},u_{1:k})的算法是一个递归过程,因此这个算法也称为递归贝叶斯滤波

由于后验概率分布P(x_{k}|z_{1:k},u_{1:k})没有给定确切的形式,也就是说递归贝叶斯滤波是一种通用框架。在给定不同形式的P(x_{k}|z_{1:k},u_{1:k})分布后,递归贝叶斯滤波也就对应不同形式的算法实现。应用最广泛的分布当属高斯分布了,高斯分布能表示复杂噪声的随机性,并且易于进行数学处理,并且满足递归贝叶斯滤波中先验与后验之间共轭特性。按照高斯分布、非高斯分布、线性系统和非线性系统,递归贝叶斯滤波可以划分出如表7-2所示的4种情况。

表7-2  4种情况

高斯分布

非高斯分布

线性系统

线性高斯系统

KF、IF

线性非高斯系统

非线性系统

非线性高斯系统

EKF、UKF、EIF

非线性非高斯系统

HF、PF

 下面的讨论,首先从最简单的线性高斯系统入手,基于矩参数表示高斯分布,引出卡尔曼滤波(KF)。然后讨论更为复杂的非线性高斯系统,引出扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)。当然也可以基于正则参数表示高斯分布,线性高斯系统中对应就是信息滤波(IF)。非线性高斯系统,对应就是扩展信息滤波(EIF)。然而,实际问题往往是非线性非高斯系统这样更一般的情况。如果用概率密度函数f(x_{k},z_{1:k},u_{1:k})来完整表示P(x_{k}|z_{1:k},u_{1:k})的非高斯分布情况,f(x_{k},z_{1:k},u_{1:k})将是一个无限维空间中的函数,显然不现实。另外,高维概率密度函数f(x_{k},z_{1:k},u_{1:k})在非线性系统中运算复杂度非常高,计算代价将难以承受。因此,在非线性非高斯系统中必须进行近似计算以提高效率,虽然近似会带来精度的损失。在非线性非高斯系统中,利用非参数方式表示概率分布,典型实现算法就是直方图滤波(HF)和粒子滤波(PF)。

当然,式(7-98)所示的递归贝叶斯滤波框架,只是给出了后验概率分布P(x_{k}|z_{1:k},u_{1:k})的计算方法。而状态估计是后验概率分布P(x_{k}|z_{1:k},u_{1:k})和估计策略结合的产物。也就是说在讨论递归贝叶斯滤波的具体实现时,还需要讨论估计策略,以保证估计效果足够好。

7.4.2 参数化实现

高斯分布可以用矩参数(均值和方差)进行表示,机器人中涉及的都是多维变量,所以这里讨论多维高斯分布,如式(7-99)所示。其中xn维向量,均值\mun维向量, 协方差矩阵协方差矩阵\Sigman\times n的对称阵。式中\textup{det}(\Sigma )=\left | \Sigma \right |,表示求矩阵\Sigma行列式的运算。

高斯分布也可以用正则参数表示,即信息矩阵\Omega和信息向量\xi。矩参数(\Sigma\mu)与正则参数(\Omega\xi)存在式(7-100)所示的关系。

其实,通过将式(7-99)进行展开,然后将式(7-100)代入展开式中,很容易得到高斯分布的正则参数表示形式,如式(7-101)所示。式中的\eta为归一化常数项。

可以发现,用矩参数表示高斯分布,物理意义更加直观;而用正则参数表示高斯分布,表示形式更加简洁。

1.卡尔曼滤波

 (先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

2.信息滤波

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

7.4.3 非参数化实现

虽然已经用矩参数和正则参数表示高斯分布,得到了处理线性高斯系统的线性卡尔曼滤波和线性信息滤波,和处理非线性高斯系统的扩展卡尔曼滤波、无迹卡尔曼滤波和扩展信息滤波。然而,实际问题往往是非线性非高斯系统这样更一般的情况。如果用概率密度函数f(x_{k},z_{1:k},u_{1:k})来完整表示P(x_{k}|z_{1:k},u_{1:k})的非高斯分布情况,f(x_{k},z_{1:k},u_{1:k})将是一个无限维空间中的函数,显然不现实。另外,高维概率密度函数f(x_{k},z_{1:k},u_{1:k})在非线性系统中运算复杂度非常高,计算代价将难以承受。因此,在非线性非高斯系统中必须进行近似计算以提高效率,虽然近似会带来精度的损失。在非线性非高斯系统中,利用非参数方式表示概率分布,典型实现算法就是直方图滤波和粒子滤波。

在卡尔曼滤波和信息滤波中,需要用矩参数或正则参数对高斯分布进行参数化表示,然后对这些参数进行闭式递归计算。然而,当分布不是高斯分布这种特殊形式时,就需要用一个无限维概率密度函数f(x_{k},z_{1:k},u_{1:k})描述,这这种参数化显然不现实。这里介绍两种非参数化方法来表示这种非高斯分布,即直方图和粒子。

1.直方图滤波

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

 2.粒子滤波

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

参考文献

【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

 

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

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

相关文章

fpga实操训练(lcd字符显示)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 用fpga编写屏幕显示,和c语言编写有很大的不同。用c语言开发,很大程度上是遵循soc ip提供的规范进行编写。而用fpga开发的话,则需要考虑不同信号的时序关系。但是,用fpga开发也有…

c++ 优先级队列priority_queue的使用

c priority_queue是对其他容器元素顺序的调整包装; 堆的原理 1.定义 priority_queue<Type, Container, Functional> q; 其中&#xff0c;Type是数据类型&#xff0c;Container是低层容器&#xff0c;如vector, stack, deque等. Functional是比较函数&#xff1b;默认可…

day25-类加载器反射

1.类加载器 1.1类加载器【理解】 作用 负责将.class文件&#xff08;存储的物理文件&#xff09;加载在到内存中 1.2类加载的过程【理解】 类加载时机 创建类的实例&#xff08;对象&#xff09;调用类的类方法访问类或者接口的类变量&#xff0c;或者为该类变量赋值使用反…

NodeJS 之 HTTP 模块(实现一个基本的 HTTP 服务器)

NodeJS 之 HTTP 模块&#xff08;实现一个基本的 HTTP 服务器&#xff09;参考描述HTTP 模块搭建 HTTP 服务器http.createServer()监听检测服务器端口是否被占用终端Error Code超时处理处理客户端的请求request 事件http.IncomingMessagehttp.ServerResponse中文乱码问题问题解…

Java EE之线程编(进阶版)

这些锁策略能适用于很多中语言&#xff0c;博主是学Java的&#xff0c;所以下面的代码会用Java去写&#xff0c;请大家见谅&#xff0c;但是处理的方法是大差不差的。 一、常见锁和锁策略&#xff1a; (一)、乐观锁和悲观锁 1、何为乐观锁和悲观锁呢&#xff1f; 答&#…

Linux服务器常见运维性能测试(3)CPU测试super_pi、sysbench

Linux服务器常见运维性能测试&#xff08;3&#xff09;CPU测试常见性能测试软件CPU测试&#xff1a;super_pi &#xff08;计算圆周率&#xff09;CPU测试&#xff1a;sysbench&#xff08;CPU功能测试部分&#xff09;下载安装sysbench综合测试功能执行CPU测试最近需要测试一…

Java面试题含答案,最新面试题(1)

Java 中 InvokeDynamic指令是干什么的&#xff1f; JVM字节码指令集一直比较稳定&#xff0c;一直到Java7中才增加了一个InvokeDynamic 指令&#xff0c;这是JAVA为了实现『动态类型语言』支持而做的一种改进&#xff1b;但是在Java7中并没有提供直接生成InvokeDynamic 指令的…

自定义类型:结构体,枚举,联合

目录一、结构体内存对齐二、位段2.1 什么是位段2.2 位段内存分配规则2.3 位段的跨平台问题三、枚举四、联合体4.1 联合类型的定义4.2联合的特点4.3 联合大小的计算4.4 练习一、结构体内存对齐 struct s {char c1;int i;char c2; }; int main() {printf("%d\n", size…

【Hadoop】HDFS体系结构分析

文章目录1. NameNode2. Secondary NameNode3. DataNodeHDFS主要包含NameNode、Secondary NameNode和DataNode三部分&#xff0c;且这三部分在分布式文件系统中分属不同的机器&#xff0c;其中Secondary NameNode不是必须的&#xff0c;在HA架构中Standby NameNode可以替代它。 …

【深度学习】详解 SimCLR

目录 摘要 一、引言 二、方法 2.1 The Contrastive Learning Framework 2.2. Training with Large Batch Size 2.3. Evaluation Protocol 三、用于对比表示学习的数据增广 3.1 Composition of data augmentation operations is crucial for learning good representa…

5-2中央处理器-指令周期的数据流

文章目录一.指令周期二.数据流向1.取指周期2.间址周期3.执行周期4.中断周期三.指令执行方案1.单指令周期2.多指令周期3.流水线方案一.指令周期 指令周期&#xff1a;CPU从主存中每取出并执行一条指令所需的全部时间。 此处&#xff1a;取指周期取指令指令译码 指令周期常用若…

SSM整合(Spring + SpringMVC + MyBatis)

SSM Spring SpringMVC MyBatis 准备数据库 SET FOREIGN_KEY_CHECKS0; DROP TABLE IF EXISTS user; CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(20) NOT NULL COMMENT 用户名,password varchar(255) NOT NULL COMMENT 密码,real_name varchar(…

Linux常用命令——startx命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) startx 用来启动X Window 补充说明 startx命令用来启动X Window&#xff0c;实际上启动X Window的程序为xinit。 语法 startx(参数)参数 客户端及选项&#xff1a;X客户端及选项&#xff1b;服务器及选项&a…

[LeetCode周赛复盘] 第 329 场周赛20230122

[LeetCode周赛复盘] 第 329 场周赛20230122 一、本周周赛总结二、 [Easy] 6296. 交替数字和1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6297. 根据第 K 场考试的分数排序1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6298. 执行逐位运算使字符串相等1. 题目描述2. 思路…

深入理解 OpenMP 线程同步机制

深入理解 OpenMP 线程同步机制 前言 在本篇文章当中主要给大家介绍 OpenMP 当中线程的同步和互斥机制&#xff0c;在 OpenMP 当中主要有三种不同的线程之间的互斥方式&#xff1a; 使用 critical 子句&#xff0c;使用这个子句主要是用于创建临界区和 OpenMP 提供的运行时库…

连续系统的数字PID控制仿真-1

被控对象为一电机模型传递函数&#xff1a;式中&#xff0c;J 0.0067;B0.10。采用M函数的形式&#xff0c;利用ODE45的方法求解连续对象方程&#xff0c;输入指令信号为yd(k)0.50sin(2*3.14*t)&#xff0c;采用PID控制方法设计控制器&#xff0c;其中kp20.0 ,kd0.50。PID正弦跟…

12个开源的后台管理系统

1. D2admin 开源地址&#xff1a;https://github.com/d2-projects/d2-admin 文档地址&#xff1a;https://d2.pub/zh/doc/d2-admin/ 效果预览&#xff1a;https://d2.pub/d2-admin/preview/#/index 开源协议&#xff1a;MIT 2. vue-element-admin 开源地址&#xff1a;htt…

Kettle(3):快速入门

1 需求 有一个txt文件&#xff0c;内容如下&#xff1a; id,name,age,gender,province,city,region,phone,birthday,hobby,register_date 392456197008193000,张三,20,0,北京市,昌平区,回龙观,18589407692,1970-8-19,美食;篮球;足球,2018-8-6 9:44 267456198006210000,李四,2…

Vue3 – Composition API

1、认识CompositionAPI 1.1、Options API的弊端 在Vue2中&#xff0c;我们编写组件的方式是Options API&#xff1a; Options API的一大特点就是在对应的属性中编写对应的功能模块&#xff1b;比如data定义数据、methods中定义方法、computed中定义计算属性、watch中监听属性…

【快速简单登录认证】SpringBoot使用Sa-Token-Quick-Login插件快速登录认证

一、解决的问题 Sa-Token-Quick-Login 可以为一个系统快速的、零代码 注入一个登录页面 试想一下&#xff0c;假如我们开发了一个非常简单的小系统&#xff0c;比如说&#xff1a;服务器性能监控页面&#xff0c; 我们将它部署在服务器上&#xff0c;通过访问这个页面&#xf…