当前位置: 首页 > news >正文

【深度学习|目标跟踪】快速入门卡尔曼滤波!

卡尔曼滤波详解

  • 申明
  • 一、什么是卡尔曼滤波
    • 1.1 卡尔曼滤波的使用场景
    • 1.2 卡尔曼滤波的定义
  • 二、卡尔曼滤波公式详解(无推导)
  • 三、卡尔曼滤波的简单应用

申明

  本博客参考了b站up主“华南小虎队”的卡尔曼滤波教学视频以及Lauszus Kristian Sloth Lauszus的卡尔曼滤波代码(c++实现),以及关于该代码示例中的博客教程。

一、什么是卡尔曼滤波

1.1 卡尔曼滤波的使用场景

  卡尔曼滤波是一种最优估计的算法,我们可以把他理解成一个矫正算法,或者是一种插值算法。卡尔曼滤波可以根据我们对当前任务场景的运动学建模方程以及前一时刻的状态来估计下一时刻的状态。卡尔曼滤波被广泛应用于定位导航场景中,比如疾行的汽车在隧道中穿行时,由于我们的卫星定位系统会被隧道的山体所屏蔽信号,因此,我们无法通过卫星定位的方式来直观的定位汽车在隧道中的位置,这个时候我们就可以将当前的一些状态量通过传感器获得,比如当前速度以及当前位置等作为状态量传入我们的状态方程中来进行预测,并通过卡尔曼滤波来矫正我们的预测结果。
  在机器人控制场景中,也可以使用卡尔曼滤波来赋能,对于机器人发出的控制指令往往是离散的,这样会使得我们的机器人在执行动作时显得比较“生硬”,此时我们就可以使用卡尔曼滤波来对机器人进行状态的预测来插值,使得机器人的运动变得更加丝滑。当然卡尔曼滤波也不仅局限于以上两种场景,这只是我举得例子。

1.2 卡尔曼滤波的定义

  卡尔曼滤波的适用系统线性高斯系统(这里我们提到的为常规的kalman filter 而非UKF或者EKF)。线性系统即输入与输出满足齐次性叠加性。高斯则是指外部噪声的概率分布满足正态分布的规律。以一个具有着初速度的小车来说,小车在行驶的过程中会受到地面对于轮胎的摩擦力,空气的阻力,这两者都可以算是影响小车最终位置的外部噪声,实际情况是,空气阻力以及地面的摩擦力都不是恒定的值,那么在卡尔曼滤波中,我们将其的分布假定为满足高斯正态分布的,因此我们的小车的位置最终也是满足高斯正态分布的,如下图所示:
在这里插入图片描述

二、卡尔曼滤波公式详解(无推导)

首先我们先明确一下参数:

  • 过程噪声满足均值为0,方差为Q的高斯正态分布;
  • 观测噪声满足均值为0,方差为R的高斯正态分布;

卡尔曼滤波简单可以总结为以下两个步骤:

  • 使用上一时刻的最优结果来得到当前时刻的先验估计。
  • 使用第一步的先验估计以及观测到的状态来对先验估计进行矫正得到这一时刻的最优结果。

具体来说,卡尔曼滤波可以分为两个阶段,一个是预测阶段,一个是更新阶段,如下图所示:
在这里插入图片描述
其中,最优估计的计算我们可以拆解为先验估计 + 增益 *(观测结果 - 先验估计的观测)。 也就是说,我们可以把它看成一个权重问题,即如果我们更相信观测结果(高精度的传感器),那么我们可以将卡尔曼增益的权重增大,来扩大观测结果与先验估计误差对最终估计的影响力,如果我们更相信预测的结果,那么使卡尔曼增益的值减小,来扩大先验估计对最终结果的影响力。具体的如何通过调节参数来改变卡尔曼增益的值,我们在下面会讲到。

三、卡尔曼滤波的简单应用

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 笔记本CPU天梯图(2024年8月),含AMD/骁龙等新CPU
  • 北京青蓝智慧科技:160个项目通过“数据要素×”大赛湖北分赛初赛
  • uniapp 开发公众号 h5(openid,微信支付,订阅通知)
  • C++ -- 负载均衡式在线OJ (一)
  • 大模型 - 分布式训练方法汇总
  • SQL-锁
  • 【算法】最短路径算法思路小结
  • C#中Override与New关键字的运用及实例解析
  • c# 什么是扩展方法
  • Oracle-OracleConnector
  • Linux应用层开发(7):网络编程
  • html+css+js网页设计 找法网2个页面(带js)ui还原度百分之90
  • C语言实现UDP广播
  • 力扣227题基本计算器II(Python实现)
  • Kali Linux——网络安全的瑞士军刀
  • php的引用
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Fastjson的基本使用方法大全
  • JavaScript服务器推送技术之 WebSocket
  • jquery cookie
  • Linux CTF 逆向入门
  • Mysql5.6主从复制
  • Node 版本管理
  • nodejs调试方法
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 给初学者:JavaScript 中数组操作注意点
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 使用putty远程连接linux
  • raise 与 raise ... from 的区别
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​用户画像从0到100的构建思路
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1)bark-ml
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (补充)IDEA项目结构
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)重识new
  • ****三次握手和四次挥手
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET BackgroundWorker
  • .net 无限分类
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET关于 跳过SSL中遇到的问题
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @Responsebody与@RequestBody
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?