卡尔曼滤波器第 1 部分 - 简介

一、说明

        这是卡尔曼滤波器系列的第一部分。但这并不是另一本定义繁重的读物,它会给你带来一堆行话和方程式!在本文中,我们首先关注需要解决方案的问题(当然是卡尔曼滤波器),然后直观地了解卡尔曼滤波器。只有这样我们才会引入方程和数值例子来使我们的想法具体化。

        可是等等!如果没有实现,每个工具都是不完整的 - 在接下来的文章中,我们还将用 Python 构建卡尔曼滤波器。

        因此,本系列分为以下几个:

  1. 直观了解卡尔曼滤波器、Alpha-Beta滤波器;
  2. 形式贝叶斯滤波器和卡尔曼滤波器;
  3. Python 中的一维卡尔曼滤波器从头开始;
  4. Python 中的二维卡尔曼滤波器从头开始。

        在本文中,我们对卡尔曼滤波器有一个直观的理解,并正式介绍构成下一部分卡尔曼滤波器基础的 Alpha-Beta 滤波器。

        让我们从两个现实世界的问题陈述开始,而不是从卡尔曼滤波器的无聊术语定义开始。使用它们,我们建立了对卡尔曼滤波器的直觉。

二、问题陈述

2.1 示例 1 — 机器人定位

        想象一下,巴黎卢浮宫博物馆决定购买一台移动自主机器人,以在夜间巡逻整个博物馆内部。该机器人具有差动运动模型,并配备摄像头。此外,机器人还可以通过使用摄像头图像的先进物体识别系统来识别周围的物体。

        为了完成巡逻任务,机器人需要不断估计自己在环境中的位置,并计算到达目的地的路径,同时避开障碍物。当前的问题是——机器人将如何估计其当前位置?

        解决这个问题的一种可能的方法是每秒积累机器人的运动数据。从初始点 (0,0) 开始,通过将机器人里程计的线性和角运动值相加,可以使用基本数学随时估计机器人的位置。

        然而,事情要复杂得多。研究小组注意到,机器人行进的距离越远,它对自身位置的信念(估计)就越错误。经过仔细检查,发现机器人执行的运动与里程计传感器读取的值略有不同。随着时间的推移,这种差异的积累只会让机器人更加相信自己的位置。以下是里程传感器读取的线性运动值(以米为单位)以及机器人在六次情况下执行的实际线性运动。

        因此,我们无法估计该机器人的位置如何随时间变化,因为传感器信息充满噪音。我们做什么?在提出解决方案之前,我们先看另一个例子。

2.2 示例 2 — 计算机视觉

        想象一下,您正在尝试跟踪视频流中的足球。然而,由于相机噪声、运动模糊和检测噪声等因素,帧中检测到的球位置存在噪声。因此,我们无法准确估计球的位置如何随时间变化。让我们更进一步讨论这个问题。

        在实际场景中,某些帧会存在遮挡。那么,如果我们需要维持每一帧的球位置估计,即使某些帧中存在遮挡,会发生什么?

        现在,让我们让它变得更加困难。如果框架中有 2 个球并且我们想要跟踪它们的移动情况该怎么办?每个球都会有一个ID,我们当然不能更换ID。好吧,如果我们很天真,我们只会继续获得每帧的2 个球位置(检测 1检测 2 )的检测结果。我们可以在每对帧中选择最近的球并分配相同的 ID。但如果其中一项检测缺失 20 帧怎么办?我们没有估计机制来预测 20 帧后球的位置。到那时,在真实情况下,也许球会交叉,我们将无法再比较连续两帧中的位置。如果测量缺失,我们没有可以估计位置的系统。

        为了跟踪球随时间的运动,需要一种可以结合多个帧的信息来更准确地估计球的位置的方法。

三、卡尔曼滤波器——一种直觉

        一般来说,在这两个问题陈述中,我们的目标是估计对象的状态- 示例 1 中的机器人位置和示例 2 中的球位置。

        卡尔曼滤波器是一种工具,可以帮助您高精度地估计状态,即使您正在使用的测量结果有噪声或不确定。它通过使用数学模型根据前一个时间实例t-1中的位置及其移动方式(状态估计)来预测时间实例t的状态值应为多少。然后,它将该预测与在时间t接收到的传感器测量值进行比较,并根据差异调整其估计(状态更新)。

        让这个稍微正式一点,卡尔曼滤波器有两个步骤

  1. 状态预测:根据时间 t-1 的估计值来预测时间 t 的状态值。它使用状态传播/外推模型来预测该值。我们稍后会讨论这个状态外推模型是什么样的。
  2. 状态更新:将状态预测的预测与测量值(均针对时间t)进行比较,并根据差异更新/调整其对时间 t 的最终估计。此步骤使用传感器/探测器。

为什么这两个步骤都很重要-

如果我们没有状态预测步骤,我们将只能受到容易产生噪声的传感器/探测器值的支配。因此我们的估计也容易出现噪声和漂移。

如果我们没有状态更新步骤,我们只会有一个状态外推模型,它告诉我们在理想世界中状态应该如何随时间变化。但世界并不理想。将理想值变为真实值的步骤将会缺失

四、让我们用关于状态预测和状态更新的新知识再次看看我们的两个问题陈述

3.1 示例 1 — 机器人定位

        在示例 1 中,通过向系统添加状态外推模型(此处称为运动模型),机器人的导航算法可以考虑机器人的预期运动,并使用它来纠正里程计读数中的任何错误。

        运动模型通常基于机器人运动的物理原理,例如其速度和加速度,并用于预测机器人随时间的运动。例如,使用等速运动模型是很常见的。使用简单的运动定律,根据机器人在时间t-1的位置和速度,它可以预测机器人在时间 t 的位置。此外,该模型假设两次实例之间的速度恒定,而不是永远恒定。如果机器人的速度或方向发生变化,状态更新步骤将纠正下一个状态预测步骤的速度值。
        然后将预测的运动与里程计传感器测量的实际运动进行比较,并使用任何差异来更新运动模型。通过不断更新运动模型,机器人的估计位置随着时间的推移变得更加准确。

        注意 - 传感器融合是进一步改善定位结果的另一种机制。但这超出了本系列的范围。

3.2 示例 2 — 计算机视觉

        在示例2中,除了每个时间步的状态更新中的检测值之外,添加状态外推模型(状态预测步骤)可以帮助使用运动模型来估计球的位置。

本质上,我们使用状态预测和状态更新步骤来结合我们关于状态应如何数学演化的知识和测量值。嗯,卡尔曼滤波器喜欢来自不同来源的数据。没有数据点是没有用的!

五、重新审视这个概念

        卡尔曼滤波器的工作原理是根据当前状态预测下一个时间实例t的状态。它使用数学模型来做到这一点。 然后,在下一个时间点t,卡尔曼滤波器将其预测与传感器输出进行比较。预测与实际位置之间的差异用于调整球位置的估计,使其更加准确。

        把它想象成和朋友玩猜谜游戏。你的朋友向你扔了一个球,但你看不清楚,因为有其他玩家挡住了。在你的朋友扔球之前,你尝试根据球现在的位置和移动的速度来猜测它会去哪里。然后,当球靠近时,您可以更清楚地看到它,并在您错误的情况下调整您的猜测。当球移动时,你在每个实例中不断执行此操作,并且你可以更好地猜测它会去哪里。

天真地说,你的大脑就像卡尔曼滤波器一样工作。它试图预测下一次球的位置。但是,如果球以意想不到的方式弯曲,您的大脑会将这个数据点与其现有的预测模型合并,并更新模型。这就是卡尔曼滤波器的全部内容!

六、Alpha-Beta 滤波器:卡尔曼滤波器的基础

        现在您已经对卡尔曼滤波器是什么以及它的用途有了一个粗略和基本的了解,让我们退后一步,分析一个详细显示每个步骤的实际示例。但在本文中,我们构建了一个更简单版本的卡尔曼滤波器,称为Alpha-Beta 滤波器卡尔曼滤波器是一种带有更多假设的 Alpha-Beta 滤波器。但我们目前使用 Alpha-Beta 滤波器构建正式基础,并在下一部分中将其发展为卡尔曼滤波器。

        让我们想象一下,蜂鸟队正在参加印地自主挑战赛,并且正在其中一场比赛之前进行一项实验。他们的自动驾驶赛车配备了新的后翼,团队希望测量汽车的改进。测试内容是他们的小车匀速直线前进,小车通过天线与团队通信,如下图所示

        天线还用于测量汽车在每个时间戳tᵢ 的距离,其中0 ≤ i ≤ n。天线和赛车之间的距离(以米为单位)由与每个tᵢ相关联的xᵢ表示。我们可以假设,无论汽车有多远,该天线都能够测量距离。

        为了测量距离,天线发送广播信号,汽车接收到该信号后将其发回。通过时间差可以推算出汽车的速度。Δ t表示天线两次测量之间的时间间隔。对于我们的动态运动模型,我们假设汽车以恒定速度移动(注意 - 不要担心!状态更新步骤将考虑实际速度变化)。因此,我们可以将这个例子的系统动态模型描述如下:

        将这两个方程翻译成英语,我们可以说当前机器人的距离xₙ等于过去的距离xₙ₋₁(这里我们累加部分距离,假设机器人从距离 0 开始)加上时间间隔, Δ t乘以 先前的速度。此外,由于我们假设汽车以恒定速度移动,因此前一个时间戳的速度等于当前的速度。

        这两个方程组成了所谓的状态外推方程。这个名字是因为这个方程组将当前状态(汽车和天线之间的距离)推断到下一个状态(预测)。这里需要强调的是,这个方程组因情况而异,因为它取决于系统动力学。一般状态外推方程有一个矩阵表示法,但我们将在本系列的下一篇文章中详细介绍它。

        继续,我们假设这个天线能够每两秒测量一次汽车的距离,Δt = 2。此外,我们说初始距离为0,x₀ = 0 m,估计的汽车速度为55 m/s 。通过状态外推方程,我们可以预测汽车在时间 1 时的目标位置(距离):

        时间 1 的目标速度预测:

        然而,在时间 1,天线测量距离z1等于 95 m,而不是预期的 110 m。预测距离和测量距离之间存在 15 m 的差异。在这种情况下,蜂鸟团队提出了两个可能的原因:

  • 天线测量不精确;
  • 自动赛车在测量之间改变了速度。新的速度将为 (95 — 0)/2 = 47.5 m/s 。

您认为其中哪一个才是真正的原因?让我们来看看。

赛车位置的状态更新方程为:

其中 α 在每次迭代中计算 (αₙ = 1/n)。然而,我们假设 α 因子在本例中是恒定的。

总之,α的大小取决于天线测量精度。对于高精度读数,我们可以选择较高的 α,从而更加重视测量zₙ。如果 α = 1,则估计距离等于测量范围:

另一方面,如果 α = 0,则测量没有意义:

将此方程应用到我们的示例中,对于 α = 0 和 α = 1,我们将分别得到以下公式:

既然引入了α因子,我们继续分析,考虑另一种可能。速度的状态更新方程如下:

β的值与天线的精度水平有关。假设天线所有测量值中大约 69% (1σ) 的精度为 5 m,则预测距离和测量距离之间的 15 m 差距很可能是由于汽车速度的变化造成的,因为该差距高于精度。因此,蜂鸟团队应该将β设置为一个较高的值,例如β=0.9。在这种情况下,估计速度为:

另一方面,假设所有天线测量中 69%(1σ) 的精度为 25 m。那么,15 m 的差异可能是由于天线测量误差造成的。在这种情况下,我们应该为 β 因子定义一个较低的值,因为测量结果不可靠。对于 β = 0.2,我们有:

如果赛车的速度从 55 m/s 变为 47.5 m/s,我们会在六个测量周期后看到这一点(运行上述方程六次,β = 0.1)。如果差异是由测量误差引起的,则连续测量将位于预测位置的前面或后面。因此,平均而言,目标速度不会改变。

通过此分析,我们提出了构成天线状态更新方程的方程组。该方程组又称为α—β航迹更新方程(或α—β航迹滤波方程)。

        在真实的卡尔曼滤波器中,α 和 β 都被卡尔曼增益取代,卡尔曼增益在每次迭代时计算。在此示例中,我们选择了值,但在接下来的文章中,我们将学习如何计算卡尔曼增益。现在,让我们看一个实际的例子。

七、数值例子

        回顾一下,自动赛车正在远离天线,天线每隔 Δ t = 2 秒通过信号强度测量距离。关于参数,我们将使用 α = 0.2 和 β = 0.1。

1) t = 0
初始化:
赛车在以下条件下启动

2) t = 1
此时,我们根据之前的初始化来计算第一个预测。t = 0时的值为:

步骤 1 - 预测:现在我们可以根据t = 1计算预测。应使用状态外推方程将第一个猜测外推到第一个周期:

这意味着赛车在第一次测量中移动了 110 m,而其匀速使其保持相同的 55 m/s。

步骤 2 — 更新:假设天线测量值为z₁ = 89 m。然后我们使用状态更新方程计算当前距离:

3) t = 2
步骤 1 — 预测:使用状态外推方程进行下一个状态估计:

第 2 步 — 测量:假设天线测量为

第 3 步 — 更新:状态更新方程:

4) t = 3
预测、测量和更新

5) t = 4
预测、测量和更新

6) t = 5
预测、测量和更新

7) t = 6
预测、测量和更新

8) t = 7
预测、测量和更新

9) t = 8
预测、测量和更新

10) t = 9
预测、测量和更新

11) t = 10
预测、测量和更新

下表总结了每次迭代的值:

        在下图中,我们可以看到估计(黄色)值如何接近地面实况,即真实值(恒定速度可以更轻松地估计赛车随时间的进展情况)。我们可以看到天线测量值(红色)变化很大,并且预测(蓝色)对这种变化做出“反应”,正如我们从 14 秒到 16 秒看到的那样。在 16 秒时,系统预测汽车将接近 800 m,因为在 14 秒时计算的速度表明汽车将以 50.55 m/s 的速度移动。然而,通过天线测量和预测结果,更新步骤可以正确估计汽车的位置(在 16 秒时更接近地面实况)。估计(黄色)保持不变,几乎模仿了真实情况(绿色)。

        但是如果我们将 α 和 β 值分别更改为 0.8 和 0.4 会怎样?在这种情况下,在两个状态更新方程(距离和速度)中,我们将更加信任测量结果,并且“平滑”程度要低得多。结果是估计和预测将会有更大的差异,如下图所示。比较预测线(蓝色)和估计线(黄色)很有趣。在 8 秒时,系统预测汽车与天线的距离将更远,接近 600 m(因为在 6 秒时,天线测量值与 4 秒时的测量值相比“高”,这意味着汽车会增加它的速度)。然而,在 8 秒进行测量后,系统会考虑预测值和测量值来估计汽车的当前距离,该距离比预测值更接近地面实况。同样的推理适用于14 s ~ 18 s 时段。

        根据这两个图表,您可能想知道我们是否应该始终对 α 和 β 使用较低的值。然而,值得一提的是,这些值取决于测量精度。使用高精度硬件时,建议使用较高的 α 和 β 值,因为预测和估计应遵循传感器进行的精确测量。相反,当使用测量结果不一致的劣质传感器时,α 和 β 的值应该较低,并且滤波器将平滑测量中的不确定性。

八、总结

        在这一部分中,我们从两个问题陈述开始,并建立了对卡尔曼滤波器的直观理解。然后我们正式引入了Alpha-Beta滤波器,它构成了卡尔曼滤波器的基础。

以下是一些注意事项:

— 使用Alpha-Beta 过滤器,我们不会忽略错误/噪声(这不会映射到现实生活中的问题),而是会考虑错误/噪声/不一致来计算估计;

在过滤器需求分析中选择 alpha 和 beta 的值。过滤器是经过设计的,而不是临时选择的。这同样适用于对系统进行“建模”的状态外推方程;

充分理解问题对于设计滤波器很重要;

— 如前所述,状态预测和状态更新步骤对于良好的估计都至关重要

        现在我们已经很好地理解了这些概念,我们将在下一部分中正式讨论贝叶斯滤波器和卡尔曼滤波器。马蒂亚斯·曼泰利

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CDN加速技术:节点部署的专业指南

随着互联网的迅猛发展,网站的访问量也在不断增加。为了提供更快、更稳定的用户体验,许多网站都采用了剑盾上云CDN(内容分发网络)技术。在CDN加速中,节点的合理部署是关键一环,决定了加速效果的优劣。本文将…

美国通胀预期高企,现货黄金价格继续承压下滑

上周五现货黄金持续振荡下滑,金价失守1940美元关口,最低至1933.17美元/盎司,最终收跌1.09%,报1936.51美元/盎司,创10月17日以来新低;今日(周一)截止汉声集团分析师发稿前&#xff0c…

python趣味编程-使用 Tkinter 的数字到单词转换器

数字到单词转换器应用程序是用Python编程语言编写的。该项目包含演示数字到单词转换的编码脚本。在 Python 中使用 Tkinter 的数字到单词转换器应用程序是一个应用程序,其主要目的是将您输入的数字转换为单词。数字到单词转换器应用程序提供学习资源,帮助您更好地了解Python编…

【python自动化】Playwright基础教程(五)事件操作②悬停输入清除精讲

【python自动化】Playwright基础教程(五)事件操作②悬停&输入&清除精讲 本章目录 文章目录 【python自动化】Playwright基础教程(五)事件操作②悬停&输入&清除精讲鼠标悬停 - hover鼠标悬停实战 输入内容 - fill输入内容实战清空内容实战 输入内容 - type模拟…

CSS省略号n行公式

记得改图中的n,这是你需要的几行省略号!复制中间的5行就行了。 .text {overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: n; //n为你想省略的行数,需要改-webkit-box-orient: vertical; } 这是…

单链表(8)

单链表的特点 可以发现,在单链表的for循环里,初始化就总结为这两种情况 上图中 用第一条(要改变链表的结构,增加,减少结点个数等)的有:尾插,插入,删除pos位置值&#x…

应用开发平台集成表单设计器系列之2——深入了解与技术验证

背景 上一篇,对表单设计器进行了技术预研,在三款组件form-generator、FormMaking、form-create-designer中初步选择了form-create-designer,接下来的工作,是需要深入了解,进行技术验证,确保该组件功能基本…

安防视频监控EasyCVR平台使用海康ehome接入,配置信息不对是什么原因?该如何将解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

VMware ubuntu 新虚拟机的创建

根据自己指定的路径安装好vm后。 创建新的虚拟机。 记录一下,下次用到别再忘记了。 如需转载,注明出处! 点赞收藏关注我 以资鼓励 打开vm 软件,点击创建新的虚拟机 选择典型,点击下一步 选择你的ubuntu镜像iso文件 …

【算法训练-链表 零】链表高频算法题看这一篇就够了

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目 题目题干直接给出对应博客链接,这里只给出简单思路、代码实现、复杂度分析 反转链表 依据难度等级分别为反转链表、…

Window安装MongoDB

三种NOSQL的一种,Redis MongoDB ES 应用场景: 1.社交场景:使用Mongodb存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能 2.游戏场景:使用Mongodb存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问…

Python 如何实现访问者设计模式?什么是访问者(Visitor)模式?实际案例中有什么作用?

什么是访问者设计模式?访问者(Visitor)设计模式介绍: 访问者(Visitor)设计模式是一种行为设计模式,用于在不修改被访问对象的前提下定义新的操作。它通过将操作封装到独立的访问者类中&#xf…

JumpServer管理虚拟机

环境准备 1.虚拟机192.168.1.111在线安装JumpServer https://blog.csdn.net/tongxin_tongmeng/article/details/1340166222.虚拟机192.168.1.112创建用户changwq、wangwj useradd changwq && passwd changwq、useradd wangwj && passwd wangwj3.虚拟机192.168.…

springboot容器

1.主要指的是servlet容器 servlet组件由sevlet Filter Listener等 2.自动配置原理 通过ServletWebServerFactoryAutoConfiguration 配置这些内容 (自动配置类开始分析功能) conditionalOnclass开启条件 ServletRequest类 import导入嵌入式的tomcat Jetty等 这些是配置类&…

本地化工具:Soluling Localization Crack

Soluling 是一个本地化工具,包含本地化项目所需的所有功能。Solling 使本地化变得非常容易。Soluling 是桌面应用程序和命令行工具的组合 。Solling支持100多种文件格式。通过 Soluling,您可以本地化桌面应用程序、移动应用程序、Web 应用程序、文档和在…

如何在thingsboard的规则链中对一个遥测属性进行求平均值

背景 有这样一个需求,一个温度传感器每5秒,上传一次数据。要求算出该设备2分钟内的平均温度,如果超过某个值,则发送告警邮件。 具体操作实现 下面在规则链中实现求平均值。 使用的节点是 配置如下 必填 Timeseries keys,是要求的平均值的属性名。 我这里求的是四个…

【教学类-17-03】20231105《世界杯随机参考图七巧板 3份一页》(大班)

效果展示: 单页效果 多页效果 预设样式: 背景需求: 2022年11月24日,大1班随机抽取的9位幼儿制作了9张拼图,发现以下三个问题: 1、粉红色辅助纸选择量多——9份作业有4位幼儿的七巧板人物是粉红色的 2、…

嵌入式杂记 -- MCU的大小端模式

MCU的大小端模式 大端模式小端模式大小端模式测试联合体概念MCU大小端模式测试大端模式测试小端模式测试 大小端模式转换 在进行MCU开发的时候,我们需要注意MCU的数据存储模式,在嵌入式中有两种不同的存储模式,分别是 大端模式和小端模式。 …

dameng数据库数据id decimal类型,精度丢失

问题处理 这一次也是精度丢失,但是问题呢还是不一样,这一次所有的id都被加一了,只有id字段被加一,还有的查询查出来封装成对象之后对象的id字段被减一了,数据库id字段使用的decimal(20,6)&…

Apache Airflow (六) :DAG catchup 参数设置

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…
最新文章