卡尔曼滤波公式理解

2023-05-16

卡尔曼滤波

卡尔曼滤波适用于线性高斯系统,即系统满足叠加性、齐次性,噪声满足正态分布。其使用上一次的最优结果预测当前的值(先验估计),同时使用观测值修正当前值,得到最优结果。

卡尔曼、粒子滤波实际应该叫做估计器(Estimator),估计当前值叫滤波(Filtering),估计过去叫平滑(Smoothing),估计未来叫预测(Predicting)。

卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。

Kalman Filter

1. 状态空间模型

卡尔曼滤波假设系统状态与噪声是高斯的,可以用均值和方差来描述。则上述状态空间模型可以被表述为:

  • 系统状态方程

    x k = A x k − 1 + B u k − 1 + w k − 1 x_k = Ax_{k-1} + Bu_{k-1} + w_{k-1} xk=Axk1+Buk1+wk1

    • x k x_k xk 是状态分量的 n 维矢量
    • A A A n × n n \times n n×n 的状体转移矩阵,也就是目标状态转移的猜想模型,是已知的
    • u k − 1 u_{k-1} uk1是新的,让系统可以接受外部控制
    • B B B n × c n \times c n×c 的矩阵,将输入转化为状态的矩阵
    • w k − 1 w_{k-1} wk1 是预测过程中服从高斯分布的噪声,对应了 x k x_k xk 中每个分量的噪声,期望为0,协方差为 Q 的高斯白噪声 w k − 1 ∼ N ( 0 , Q ) w_{k-1} \sim N(0, Q) wk1N(0,Q), Q 即下文过程激励噪声。
  • 系统观测方程
    z k = H x k + v k z_k = H x_k+v_k zk=Hxk+vk

    • H H H m × n m \times n m×n 矩阵,是状态变量(观测)的转移矩阵,表示将状态和观测连接起来的关系,卡尔曼滤波里为线性关系,它负责将m维的测量值转换到 n n n 维,使之符合状态变量的数学形式。
    • v k v_k vk 观测噪声,服从高斯分布 v k ∼ N ( 0 , R ) v_k \sim N(0, R) vkN(0,R) R R R 即下文测量噪声
  • 卡尔曼滤波的两个假设

    • 信息过程的足够精确的模型,是由白噪声所激发的线性( 也可以是时变的) 动态系统;
    • 每次的测量信号都包含着附加的白噪声分量 。当满足以上假设时,可以应用卡尔曼滤波算法。

2. 5个公式

2.1 预测

根据上一时刻( k − 1 k-1 k1 时刻) 的后验估计值来估计当前时刻( k k k 时刻) 的状态,得到 k k k​ 时刻的先验估计值;
x ^ k ‾ = A x ^ k − 1 + B u k − 1 \hat x_{\overline k} = A\hat x_{k-1} + Bu_{k-1} x^k=Ax^k1+Buk1

  • x ^ k ‾ \hat x_{\overline k} x^k k k k 时刻的先验状态估计值,即根据上一时刻( k − 1 k-1 k1时刻)的最优估计预测的 k k k 时刻的结果。
  • x ^ k − 1 \hat x_{k-1} x^k1 表示 k − 1 k-1 k1 时刻的后验状态估计值,也叫最优估计,是滤波的结果之一。
  • A A A:状态转移矩阵,实际上是对目标状态转换的一种猜想模型。
  • u k − 1 u_{k-1} uk1:控制向量
  • B B B:是将控制向量 u k − 1 u_{k-1} uk1转换为状态的矩阵

P k ‾ = A P k − 1 A T + Q P_{\overline k} = AP_{k-1}A^T + Q Pk=APk1AT+Q

  • P k ‾ P_{\overline k} Pk k k k 时刻的先验估计协方差( x ^ k ‾ \hat x_{\overline k} x^k 的协方差)
  • A A A:状态转移矩阵,实际上是对目标状态转换的一种猜想模型。
  • P k − 1 P_{k-1} Pk1 k − 1 k-1 k1 时刻后验估计协方差(即 x ^ k − 1 \hat x_{k-1} x^k1 的协方差,表示状态的不确定度),是滤波的结果之一。
  • Q Q Q: 过程激励噪声协方差(系统过程的协方差)。该参数被用来表示状态转换矩阵与实际过程之间的误差。因为我们无法直接观测到过程信号, 所以 Q Q Q 的取值是很难确定的。是卡尔曼滤波器用于估计离散时间过程的状态变量,也叫预测模型本身带来的噪声。状态转移协方差矩阵
2.2 更新

使用当前时刻的测量值来更正预测阶段先验估计值,得到当前时刻的后验估计值。
K k = P k ‾ H T H P k ‾ H T + R K_k = \frac{P_{\overline k }H^T}{HP_{\overline k}H^T + R} Kk=HPkHT+RPkHT

  • K k K_k Kk:滤波增益矩阵,是滤波的中间计算结果,卡尔曼增益,或卡尔曼系数。
  • P k ‾ P_{\overline k} Pk k k k 时刻的先验估计协方差( x ^ k ‾ \hat x_{\overline k} x^k 的协方差)
  • H H H:是状态变量到测量(观测)的转换矩阵,表示将状态和观测连接起来的关系,卡尔曼滤波里为线性关系,它负责将 m 维的测量值转换到 n 维,使之符合状态变量的数学形式,是滤波的前提条件之一。
  • R R R:测量噪声协方差。滤波器实际实现时,测量噪声协方差 R一般可以观测得到,是滤波器的已知条件。

x ^ k = x ^ k ‾ + K k ( z k − H x ^ k ‾ ) \hat x_k = \hat x_{\overline k} + K_k(z_k- H\hat x_{\overline k}) x^k=x^k+Kk(zkHx^k)

  • x ^ k \hat x_{k} x^k 表示 k k k 时刻的后验状态估计值,也叫最优估计,是滤波的结果之一。
  • x ^ k ‾ \hat x_{\overline k} x^k k k k 时刻的先验状态估计值,即根据上一时刻( k − 1 k-1 k1时刻)的最优估计预测的 k k k 时刻的结果。
  • K k K_k Kk:滤波增益矩阵,是滤波的中间计算结果,卡尔曼增益,或卡尔曼系数。
  • z k z_k zk:测量值(观测值),是滤波的输入。
  • H H H:是状态变量到测量(观测)的转换矩阵,表示将状态和观测连接起来的关系。
  • z k − H x ^ k ‾ z_k- H\hat x_{\overline k} zkHx^k:实际观测和预测观测的残差,和卡尔曼增益一起修正先验(预测),得到后验。

P k = ( I − K k H ) P k ‾ P_k = (I - K_kH) P_{\overline k} Pk=(IKkH)Pk

  • P k P_{k} Pk k k k 时刻后验估计协方差(即 x ^ k \hat x_{k} x^k 的协方差,表示状态的不确定度),是滤波的结果之一。

  • I I I:单位矩阵

  • K k K_k Kk:卡尔曼增益,或卡尔曼系数。

  • H H H:是状态变量到测量(观测)的转换矩阵。

  • P k ‾ P_{\overline k} Pk k k k 时刻的先验估计协方差( x ^ k ‾ \hat x_{\overline k} x^k 的协方差)

3. 代码实现

prediction
x ′ = F x + u P ′ = F P F T + Q x^\prime = Fx + u \\ P^\prime = FPF^T + Q x=Fx+uP=FPFT+Q
update
y = z − H x ′ S = H P ′ H T + R K = P ′ H T S − 1 x = x ′ + K y P = ( I − K H ) P ′ y = z-Hx^\prime \\ S = HP^\prime H^T + R \\ K = P^\prime H^T S^{-1} \\ x = x^\prime + Ky \\ P = (I - KH)P^\prime y=zHxS=HPHT+RK=PHTS1x=x+KyP=(IKH)P
code

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卡尔曼滤波公式理解 的相关文章

  • MATLAB神经网络工具箱输入输出预处理相关参数设置

    目录 问题由来预处理相关属性预处理函数预处理参数修改默认映射变换通过exampleInput和exampleOutput进行设置通过configure函数进行设置 结语 问题由来 毕业论文中用到神经网络了 xff0c 我用的MATLAB的神
  • docker 拉取Ubuntu 容器 20.04国内源apt-get update报404

    ubuntu 20 04更换阿里源之后 如下 xff0c apt get update下不下来 apt get update Ign 1 http mirrors aliyun com ubuntu trusty InRelease Get
  • 对于很多公司不使用STL 引发的思考

    有些公司不使用STL xff0c 个人认为大概有以下几种可能 1 这公司应该有针对它们自己特定项目需求的特定东西 2 STL不是每个人都能用好 比如什么时候用vector高效 xff0c 什么时候用list高效 xff0c 这些都要清楚知道
  • 纯C++实现的HTTP请求封装(POST/GET)

    纯C 43 43 实现的HTTP请求 xff08 POST GET xff09 xff0c 支持windows和linux xff0c 进行简单的封装 xff0c 方便调用 实现如下 xff1a span class hljs prepro
  • error LNK2038: 检测到“RuntimeLibrary”的不匹配项的解决办法

    编译cef binary 3 3112 1659 gfef43e0 windows32 xff0c 生成了一个libcef dll wrapper lib xff0c 供另一个工程所用 结果编译的时候报错 错误信息如下 xff1a 1 gt
  • python实现归并排序

    排序算法 xff1a python实现基数排序 python实现归并排序 python实现交换排序 python实现选择排序 python实现插入排序 归并排序 归并 34 是将两个或者两个以上的有序表组成一个新的有序表 假定待排序表含有n
  • 5. 嵌入式OpenWRT入门基础篇-----OpenWRT与电脑之间互传文件

    OpenWRT与电脑之间互传文件方式有多种 xff0c 方法会陆续更新 一 Winscp与OpenWRT互传文件 由于 openwrt 默认开启 scp 服务器 xff0c 所以我们不需要在开发板上安装其他软件 xff0c 即可用scp 协
  • [LeetCode周赛复盘] 第 343 场周赛20230430

    LeetCode周赛复盘 第 343 场周赛20230430 一 本周周赛总结2660 保龄球游戏的获胜者1 题目描述2 思路分析3 代码实现 2661 找出叠涂元素1 题目描述2 思路分析3 代码实现 2662 前往目标的最小代价1 题目
  • 使用Git下载指定分支

    使用Git下载指定分支 使用Git下载指定分支命令为 xff1a git clone b 分支名 仓库地址 使用命令 xff1a git clone b feature v2 1 11 20210129 upgrade http ip gS
  • 调试记录

    1 xff0c 发布失败问题 如果在本机程序运行正常 xff0c 拿到别人同样系统机器上运行失败 xff0c 经常因为缺一些程序运行需要的插件依赖库 2 xff0c 跨平台代码 xff0c 未声明的标识符错误 qt程序在linux下正常编译
  • Nvidia Jetson TX2刷机过程

    近来 xff0c 项目需要 xff0c 实验室配置了TX2 xff0c 有幸能够接触使用 xff0c 下面简单介绍刷机过程 写在前面 a 使用VM虚拟机Ubuntu14 04成功刷机 xff0c 不过听说有的会出现连接不稳定的情况 xff0
  • 梯度向量、Jacobian矩阵、Hessian矩阵

    这里 xff0c 讨论三个概念 xff1a 梯度向量 Jacobian矩阵 Hessian矩阵 xff1b 由自变量x 61 x1 x2 xn T 因变量 xff1a 为一维f x 时 xff0c 此时其一阶导数构成的向量为梯度向量g x
  • 匿名飞控位置估计笔记

    摸着石头过河 xff0c 一边看一边学 感谢两位博主的文章 xff1a 1 px4位置估计 inav 2 根据两点的经纬度求方位角和距离 主要过程如下 1 机体加速度转换2 GPS测量值与推测值误差3 通过测量值与推测值的误差求NED坐标系
  • bmi055六轴传感器获取数据

    BMI055的加速度计和陀螺仪的地址是分开的 xff0c 在读取的时候要分开读取 xff0c 我是用的iic的方式读取的 define ACC ADDRESS 0X18 加速度计的地址 define GYRO ADDRESS 0X68 陀螺
  • 使用arecord、aplay命令实现音频的采集和播放

    arecord和aplay是alsa utils一部分 我们在Linux系统下进行音频开发时经常使用 xff0c 非常方便 先简单介绍一下 arecord 采集原始音频 arecord r 8000 t raw c 1 f S16 BE t
  • centos7安装docker与删除容器实例和镜像

    doker简介 docker是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 xff0c 然后发布到任何流行的linux机器或者windows机器上 xff0c 也可以实现虚拟化 容器是完全使用
  • 刘韧:记者的数字力量

    本文写于2003年09月04日 真正到了收拾物品离开报社的那一刻 xff0c 他才确切感到空落来得如此地具体 从明天起 xff0c 他的稿件将不能再见诸本报 xff1b 从明天起 xff0c 他将失去本报读者 xff1b 从明天起 xff0
  • 刘韧:此时使用文字 只因为文字简练

    以下文字写于2007年 一 此时使用文字只因为文字简练 1 博士说他的女儿有阅读障碍 我说 xff0c 我10多岁的时候 xff0c 也有阅读障碍 我爸让我读杂志上的一篇文章 xff0c 读完 xff0c 问我这篇文章在讲什么 xff0c
  • 刘韧:角色、扮相、知识与历史

    以下文字皆写于2008年1月 一 角色与扮相的欺骗 1 当编辑时 xff0c 最怕向名家约稿 xff0c 名家赏脸写的稿子 xff0c 质量不高 xff0c 不能用 2 喜欢李白的人 xff0c 千万不要买 李白全集 xff0c 全集里有许
  • 刘韧:和人物共同创作人物故事

    编者按 xff1a 本文为DoNews编辑部内训课实录 xff0c 创作于2011年 由传媒见闻谭缘于2020年4月根据录音整理 我从1997年开始人物写作 xff0c 一直写到2003年 5年间 xff0c 无论刮风下雨 xff0c 还是

随机推荐

  • 刘韧马杰花总:诗歌小说电影游戏都是元宇宙

    时间 xff1a 2021年10月31日晚 访谈 xff1a 花总 xff08 网络红人 xff0c 被 华盛顿邮报 称为 在风险中推动变革的博客 代表 xff09 嘉宾 xff1a 刘韧 xff08 中国著名IT记者 xff09 马杰 x
  • 刘韧:怎样做记者

    编发按 xff1a 2021年11月27日 xff0c CSDN刘韧写作班第一期课后 xff0c 潜山同学说 xff1a 2001年 xff0c 我爸说你给他们培训 xff0c 主题是 怎样做记者 xff0c 他把你当时培训的内容打印出来
  • 尤雨溪Vue登榜GitHub之路看似不难

    本文完成于2022年3月6日 xff0c CSDN首发 xff0c 将在 新程序员 杂志刊登 采访撰稿 xff1a 刘韧 谷磊 林兴陆 李彤等 录音整理 xff1a 谷磊 周扬 林兴陆 鲁飞龙 编辑校对 xff1a 田玮靖 萧少聪 王雪艳
  • ROS:关于xacro模型在gazebo的加载

    ROS xff1a 关于xacro模型在gazebo的加载 这个模型加载问题折磨了我好几天 xff0c 今天总算是找到问题所在 我还一直以为是新版本的问题 xff0c 结果却是自己的问题 不够仔细 因此记录下来 xff0c 引以为戒 1 问
  • 刘韧:元宇宙不需要普通人

    作者 xff1a 刘韧 编辑 xff1a 谷磊 1 躲进小楼成一统 xff0c 我理解是 xff0c 躲进小圈子的小宇宙 xff0c 这个小宇宙基础如果是Web3 0 xff0c 那么就叫元宇宙了 自嘲 鲁迅 运交华盖欲何求 xff1f 未
  • 开源时代:刘韧对话任旭东崔宝秋章文嵩蒋涛

    来源 xff1a 1024程序员节 之 技术英雄会 主题 xff1a 开源英雄共话 我们的开源时代 时间 xff1a 2022年 10月 24日 主持嘉宾 刘韧 xff1a 云算科技董事长 知识英雄 作者 DoNews创始人 对话嘉宾 任旭
  • 刘韧工作手册(2023年版)

    刘韧于2022年9月22日为云算科技做内部演讲 由谭缘整理成文 xff0c 李欣欣编辑 xff0c 朱芳文审定 一 认知篇 01 干中学 xff0c 重复做 学 是为了 习 xff0c 学到的东西是为了下一次习的时候 xff0c 做得更好
  • 个人大于集体

    詹姆斯库克大学新加坡校舍正门 我依旧记得高中时发的一条朋友圈 xff1a 一个人的价值是由他周围的人决定的 十五岁时 xff0c 我一个人离开家乡 xff0c 来到新加坡 半年后 xff0c 把第一所学校的语言班老师骂退休了 xff0c 我
  • Foresight对话:刘韧对谈王建硕、曾映龙、Joy Xue

    Foresight 2023论坛现场 自 2022年 11月上线以来 xff0c OpenAI研发的ChatGPT一度风靡全球 面对这波 AI浪潮 xff0c 有些人拥抱了新趋势 xff0c 有些人则担心会被取代 xff0c 另一些人发掘其
  • 贾扬清开源 AI 框架 Caffe | 开源英雄

    编者按 在开源与人工智能的灿烂星河里 xff0c 贾扬清的名字都格外地耀眼 因为导师 Trevor Darrell 教授的一句 你是想多花时间写一篇大家估计不是很在意的毕业论文 xff0c 还是写一个将来大家都会用的框架 xff1f xff
  • 一个程序员的连续套现

    Fishman xff0c 吴锡桑 28岁 xff0c 中国软件行业协会理事 xff0c 1995年毕业于暨南大学计算机系 致力于多媒体和互联网软件的开发多年 xff0c 著作的软件曾获广东省 34 高校杯 34 软件比赛第一名 xff1b
  • 雷军留名

    影响中关村的50个人 知识英雄 Wednesday December 26 2001 3 29 PM 刘韧 雷军 xff0c 1969年2月16日出生于湖北省仙桃市 xff1b 1991年 xff0c 毕业于武汉大学计算机系 xff1b 1
  • docker load 是个什么东西?

    docker load 是个什么东西 xff1f docker load 是一个用于将 Docker 镜像加载到本地 Docker 环境中的命令 通常 xff0c 我们将 Docker 镜像从 Docker Hub 或者其他镜像仓库中下载到
  • Git同步一直转的解决方法

    之前遇到的一个问题 xff1a 使用VScode软件的Git同步不管怎样都无法拉取推送 xff08 左下角会一直转 xff0c 而且没有报错提示 xff09 但是在对应项目的文件目录下 xff0c 使用控制台就可以 在VSCode的控制台输
  • ROS:关于节点和节点句柄以及命名空间

    ROS xff1a 关于节点和节点句柄以及命名空间 参考资料 xff1a ROS官方文档 首先 xff0c 我们需要明确的是 节点 和 节点句柄 是不同的 一般而言 xff0c 一个cpp文件只能启动一个ROS节点 xff0c 但作为该节点
  • 【操作系统】生产者消费者问题

    生产者消费者模型 文章目录 生产者消费者模型 64 toc 一 生产者消费者问题二 问题分析三 伪代码实现四 代码实现 xff08 C 43 43 xff09 五 互斥锁与条件变量的使用比较 一 生产者消费者问题 生产者消费者问题 xff0
  • VScode中使用git终端,无法识别命令

    提示 xff1a vscode中使用git终端 xff0c 无法识别输入的命令 xff1a vscode版本 xff1a VSCodeUserSetup x64 1 60 1 exe git版本 xff1a 2 32 0 windows 2
  • Ubuntu18.04 VINS-Mono & Fast-Planner

    Ubuntu18 04 VINS Mono amp Fast Planner 官方GIthub 安装依赖 span class token comment 额外ros包 span span class token function sudo
  • Autoware Docker 安装

    1 Ubuntu20 04 Docker 官方教程安装 Docker 官方教程安装 2 安装 nvidia container runtime Access an NVIDIA GPU 官方参考 span class token comme
  • 卡尔曼滤波公式理解

    卡尔曼滤波 卡尔曼滤波适用于线性高斯系统 xff0c 即系统满足叠加性 齐次性 xff0c 噪声满足正态分布 其使用上一次的最优结果预测当前的值 xff08 先验估计 xff09 xff0c 同时使用观测值修正当前值 xff0c 得到最优结