理解卡尔曼滤波

2023-05-16

卡尔曼滤波被广泛的应用于运动估计中,在飞行器中多有应用,区别于普通滤波如低通滤波,卡尔曼滤波具有不延时的优点,即普通的低通滤波在过滤噪声的同时也会引入信号滞后,而卡尔曼滤波则可以实时估计对象状态,不产生滞后。与普通滤波不同,卡尔曼滤波基于对象的数学模型进行设计。

关于卡尔曼滤波的介绍参考如下

https://zh.wikipedia.org/wiki/卡尔曼滤波

或者英文网站

https://en.wikipedia.org/wiki/Kalman_filter

列出应用于对象的卡尔曼滤波的全部公式

1. 对象模型

假设对象符合如下模型

        {\textbf {x}}_{​{k}}={\textbf {F}}_{​{k}}{\textbf {x}}_{​{k-1}}+{\textbf {B}}_{​{k}}{\textbf {u}}_{​{k}}+{\textbf {w}}_{​{k}}
        {\textbf {z}}_{​{k}}={\textbf {H}}_{​{k}}{\textbf {x}}_{​{k}}+{\textbf {v}}_{​{k}}

其中,{\textbf {x}}_{​{k}}为状态变量,{\textbf {z}}_{​{k}}为输出,{\textbf {w}}_{​{k}}{\textbf {v}}_{​{k}}分别为状态和输出的噪声。并假定它们符合一定协方差{\textbf {Q}}_{k}{\textbf {R}}_{k}的多元正态分布

        {\textbf {w}}_{​{k}}\sim N(0,{\textbf {Q}}_{k})
        {\textbf {v}}_{​{k}}\sim N(0,{\textbf {R}}_{k})

2. 卡尔曼滤波

卡尔曼滤波的公式如下

a)预测

        \mathbf{x}_{k} = \mathbf{F}_{k} \mathbf{x}_{k-1} + \mathbf{B}_{k} \mathbf{u}_{k} + \mathbf{w}_{k}
        \mathbf{P}_{k\mid k-1} = \mathbf{F}_{k} \mathbf{P}_{k-1\mid k-1} \mathbf{F}_{k}^{\text{T}} + \mathbf{Q}_{k}

b)更新

        \tilde{\mathbf{y}}_k = \mathbf{z}_k - \mathbf{H}_k\hat{\mathbf{x}}_{k\mid k-1}
        \mathbf{S}_k = \mathbf{H}_k \mathbf{P}_{k\mid k-1} \mathbf{H}_k^T + \mathbf{R}_k
        \mathbf{K}_k = \mathbf{P}_{k\mid k-1}\mathbf{H}_k^T \mathbf{S}_k^{-1}

        \hat{\mathbf{x}}_{k\mid k} = \hat{\mathbf{x}}_{k\mid k-1} + \mathbf{K}_k\tilde{\mathbf{y}}_k
        \mathbf{P}_{k|k} = (I - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k|k-1}

除了对象数学模型,卡尔曼滤波包含七个公式,较为复杂,不容易理解,这也是大部分卡尔曼滤波算法的开发者的体会,这里分享一下关于卡尔曼滤波设计的思路,便于对卡尔曼滤波有一个简单直观的理解,以便在工程项目中方便地应用卡尔曼滤波。

3. 卡尔曼滤波的理解

在已知对象模型的条件下,我们可以把卡尔曼滤波看做和被估计对象同时运行的一个系统,这个系统的模型和对象一样,输入和对象一样,输出和对象的输出作比较。在理想条件下,对象的输出和这个模拟系统的输出应该是一样的,但是因为噪声、干扰、初始估计误差等原因,模拟系统的状态变量与对象的状态变量存在误差。卡尔曼滤波的原理就是通过比较模拟系统和对象的输出,反馈到估计量中,不断修正模拟系统中的状态变量估计,从而比较精确的估计出对象模型的状态变量。类似于自动控制中的负反馈。如下图

假设对象模型为

        \mathbf{x}_{k} = \mathbf{F}_{k} \mathbf{x}_{k-1} + \mathbf{B}_{k} \mathbf{u}_{k} + \mathbf{w}_{k}                                                                                (1)

对象输出为

        \mathbf{z}_k = \mathbf{H}_{k} \mathbf{x}_k + \mathbf{v}_k                                                                                                   (2)

其中 {\textbf {w}}_{​{k}}{\textbf {v}}_{​{k}} 为系统噪声和测量噪声。

        \mathbf{w}_k \sim \mathcal{N}(0, \mathbf{Q}_k)
        \mathbf{v}_k \sim \mathcal{N}(0, \mathbf{R}_k)

卡尔曼滤波的估计为

        \hat{\mathbf{x}}_{k\mid k-1} = \mathbf{F}_{k}\hat{\mathbf{x}}_{k-1\mid k-1} + \mathbf{B}_{k} \mathbf{u}_{k}                                                                              (3)

即为与对象模型等同的一个系统,其中\hat{\mathbf{x}}为模拟系统的状态变量,即对象的状态变量估计。根据卡尔曼滤波估计得到的输出(即模拟系统的输出)与实际测量输出之间的误差为

        \tilde{\mathbf{y}}_k = \mathbf{z}_k - \mathbf{H}_k\hat{\mathbf{x}}_{k\mid k-1}                                                                                            (4)

根据误差对卡尔曼滤波估计进行校正

        \hat{\mathbf{x}}_{k\mid k} = \hat{\mathbf{x}}_{k\mid k-1} + \mathbf{K}_k\tilde{\mathbf{y}}_k                                        ​​​​​​​        ​​​​​​​        ​​​​​​​                         ​​​​​​​        (5)

其中{\textbf {K}}为校正增益矩阵,上述三个公式即表示了卡尔曼滤波的原理。

而方程式组中的其它公式则是计算校正增益阵{\textbf {K}}使滤波效果达到最优。如下式

         \mathbf{K}_k = \mathbf{P}_{k\mid k-1}\mathbf{H}_k^T \mathbf{S}_k^{-1}                                                                                            (6)

其中

        \mathbf{P}_{k\mid k-1} = \mathbf{F}_{k} \mathbf{P}_{k-1\mid k-1} \mathbf{F}_{k}^{\text{T}} + \mathbf{Q}_{k}                                                                           (7)
        \mathbf{S}_k = \mathbf{H}_k \mathbf{P}_{k\mid k-1} \mathbf{H}_k^T + \mathbf{R}_k                                                                                    (8)

从原理上讲,{\textbf {K}}根据信号的质量来计算,包括输入的信号质量,输出的信号质量,和状态估计本身的质量,其中{\textbf {Q}}{\textbf {R}}{\textbf {P}}分别为输入、输出和状态变量的协方差

        \mathbf{P}_{k\mid k} = \mathrm{cov}(\mathbf{x}_k - \hat{\mathbf{x}}_{k\mid k})
        \mathbf{P}_{k\mid k-1} = \mathrm{cov}(\mathbf{x}_k - \hat{\mathbf{x}}_{k\mid k-1})

{\textbf {S}}为输出误差的协方差

        \mathbf{S}_{k} = \mathrm{cov}(\tilde{\mathbf{y}}_k)

分别表征输入、输出、系统状态变量估计以及输出误差的信号质量,式(6)通过三个信号的协方差计算得出校正增益阵,基本上是信号质量越好(协方差越小),则在校正矩阵计算结果中所起的作用越大。状态估计协方差则由输入误差引入并根据输出误差进行校正,如下式。

        \mathbf{P}_{k|k} = (I - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k|k-1}                                                                               (9)

综上所述,卡尔曼滤波是一个模拟对象系统进行估计和校正的估计方法。在实际工程应用中,建立对象的数学模型,并估计对象的输入和输出噪声方差,即可以应用卡尔曼滤波来估计对象的内部状态。

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

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

  • Linux下的链接与ln(link)命令

    最近安装了多个版本的python3 xff0c 涉及到了链接的问题 链接有点像Windows下的快捷方式 xff0c 本身是一个文件 xff0c 指向另一个文件或应用程序 xff0c 也可以指向一个目录 在访问这个链接的时候 xff0c 等
  • 当前主流目标识别(Object Detection)算法

    参考链接 xff1a https blog csdn net librahfacebook article details 103114747 https blog csdn net weixin 43196118 article deta
  • Ubuntu 18.04安装NVIDA显卡驱动

    Ubuntu 18 04安装NVIDIA显卡驱动方法比较简单 在Ubuntu系统安装之后 xff0c 通过运行程序按键 xff08 即Window按键 xff09 搜索运行Software amp Updates程序 xff0c 在Addi
  • Ubuntu 18.04安装CUDA 11.4.3和cuDNN 8.2.4

    CUDA和cuDNN为NVIDIA支持GPU运算以及深度神经网络计算加速的算法库 通常需要安装以支持利用GPU加速神经网络的训练和推理 在已经安装NVIDIA显卡驱动的情况下 xff0c 可以通过nvidia smi查看显卡信息和适合的CU
  • Ubuntu 18.04下测试YOLO v4

    在Ubuntu 18 04下测试了YOLO的方案 选择安装的是CUDA 11 4和cuDNN 8 2 xff0c 在测试v3版本时遇到了编译的问题 所以选择v4版本 参考链接 xff1a https pjreddie com darknet
  • 在Jetson Nano上安装NoMachine

    最近需要对Jetson Nano进行操作 xff0c 在它的上面测试目标识别的程序 习惯了用NoMachine远程进行操作 xff0c 所以先在Nano安装NoMachine Nano采用的是通过镜像刻录的Ubuntu 18 04系统 参考
  • Linux系统开机自启动程序设置

    用户可以在Linux系统配置自启动的程序 xff0c 可以通过多种方式来实现 1 rc local 系统启动阶段 xff0c 系统根据启动层级运行 etc rcN d目录下脚本 xff08 N为0 6之间的数字 xff0c 表示启动层级 x
  • 【Android】App安装提示“该安装包未包含任何证书”问题处理

    根据客户反馈 xff0c 安装App时会出现安装失败的问题 xff0c 如下图 xff1a 安装失败就算了 xff0c 还被怀疑我亲自动手打包的App不是正版 xff0c 这不能忍 xff0c 这个问题我一定要处理掉 可后来发现我错了 xf
  • Ubuntu系统apt-get, pip国内源设置

    Ubuntu系统默认设置apt get pip的源为国外服务器 xff0c 速度较慢 xff0c 以及有时有连接不上的情况 可以设置成国内的源以提高下载速度和稳定性 1 apt get apt get的源设置通过 etc apt sourc
  • 在Jetson Nano上十行代码实现目标检测(jetson_inference)

    网上有一个10行代码搞定目标检测的视频教程 参考网址 xff1a https www bilibili com video av91150116 经测非常实用 xff0c 通过10行代码实现目标检测 xff0c 在Jetson Nano上迅
  • 问题解决:Error: Can’t initialize nvrm channel

    在Jetson Nano安装好环境之后 xff0c 使用jupyter notebook调试python程序 xff0c 启动 jupyter notebook 之后 xff0c 在terminal出现连续的提示 Error Can t i
  • 问题解决:/usr/lib/aarch64-linux-gnu/libgomp.so.1: cannot allocate memory in static TLS block

    在测试jetson utils实现视频载入时出现如下的错误 usr lib aarch64 linux gnu libgomp so 1 cannot allocate memory in static TLS block 经查询是libg
  • 在Jetson Nano安装测试YOLO v5目标识别示例

    参考链接 https blog csdn net carrymingteng article details 120978053 https blog csdn net weixin 43947712 article details 115
  • 问题解决:ImportError: The _imagingft C module is not installed

    在测试YOLO v5时出现错误提示 xff1a ImportError The imagingft C module is not installed 经查是pillow库的问题 解决方法 重新安装pillow xff0c 先卸载已有的pi
  • Jetson Nano设置风扇自启动

    Jetson Nano跑一些如目标识别等需要较大计算量的程序 xff0c 散热板会非常的热 xff0c 为避免主板过热 xff0c 通常在散热板上加装一个风扇增强散热 风扇需要软件指令进行驱动 xff0c 驱动风扇的指令为 sudo sh
  • Ubuntu 18.04安装gazebo9

    首先 xff0c 把gazebo的源添加到apt的source list中 sudo sh c echo deb http packages osrfoundation org gazebo ubuntu stable 96 lsb rel
  • 问题解决:/usr/bin/ld: cannot find -lbz2

    在项目编译过程中 xff0c 出现类似如下的错误 usr bin ld cannot find lbz2 经查询 xff0c 是找不到bz2的库文件 xff0c 用whereis命令查询 whereis libbz2 找不到对应的库文件 x
  • 常用Git命令

    通过git命令可以对项目代码库执行克隆 拉取 提交等操作 常用的git命令有如下 git clone 克隆代码库 xff0c 把远程代码库克隆到本机当前目录 xff0c 如 git clone https github com PX4 PX
  • 【Android】原来Toolbar还能这么用?Toolbar使用最全解析。网友:终于不用老是自定义标题栏啦

    一个Toolbar的UI可以做成什么样 xff1f 做出什么效果 xff1f 这是我最近在研究的问题 目录 带导航图标的Toolbar带标题的Toolbar带小标题的Toolbar带Logo的Toolbar带进度条的Toolbar带菜单的T
  • Linux安装Beyond Compare

    Beyond Compare是一款很好用的代码比对软件 xff0c 提供了在Windows xff0c Linux等平台的安装包 在Linux下安装Beyond Compare的方法如下 参考链接 xff1a https www scoot

随机推荐

  • Linux下压缩解压文件和目录的方法(zip, tar)

    Linux下可以用zip命令方便的压缩文件或文件夹 压缩文件 zip data zip data xls zip data zip data1 xls data2 xls 上述命令把一个文件或者多个文件压缩到一个zip文件 压缩目录 zip
  • Jupyter Notebook安装

    Jupyter Notebook是一个非常好用的交互式Python运行的软件 安装方法如下 在命令行输入 pip3 install jupyter 安装后根据提示 xff0c Jupyter相关软件安装在 local bin目录下 xff0
  • Ubuntu添加截屏快捷键的方法

    在Ubuntu下面具有截屏的命令 xff08 gnome screenshot xff09 xff0c 可以通过简单的设置方便的添加截屏快捷键 通过 Settings gt Devices gt Keyboard选项 xff0c 添加快捷键
  • Windows下修改Jupyter Notebook默认字体的方法(custom.css)

    在Windows下Jupyter Notebook代码显示的默认字体为宋体 xff0c 视觉效果不是很好 xff0c 可以通过设置修改默认的显示字体 通过用户目录 C User Administrator jupyter custom 下的
  • Jupyter Notebook添加代码自动补全功能的方法

    Jupyter Notebook成为一款非常受欢迎的交互式Python运行环境的软件 通过如下的方法可以添加代码自动补全的功能 输入命令安装插件 pip3 install jupyter contrib nbextensions 然后运行
  • 修改grub默认启动选项的方法

    在Windows系统基础上 xff0c 再安装Linux xff0c 形成双系统 这样在grub启动菜单中会包含Linux Windows等多个选项 xff0c 默认为第一个选项 xff0c 常规的Linux启动 通过修改配置文件 etc
  • 在云服务器上搭建Jupyter Notebook服务

    Jupyter Notebook提供了远程登录的功能 xff0c 可以在云服务器上配置Jupyter Notebook xff0c 用户可以远程登录和运行Python代码 这里使用的是腾讯云的Ubuntu服务器 xff0c 配置方法如下 1
  • 常用Linux命令

    记录一些常用的Linux命令 1 用户管理 增加用户 useradd lt user name gt useradd g lt group name gt lt user name gt g选项指定新用户所属的用户组 修改用户的组别 use
  • 在云服务器上安装VNC远程桌面服务

    云服务器操作系统通常不包含图形界面 xff0c 通过在服务器上安装VNC服务 xff0c 可以让用户以图形化界面远程登录到云服务器 这里服务器使用的是Ubuntu Server 18 04系统 1 安装图形界面 首先在服务器端安装图形化桌面
  • 【Android】ADB无线连接Android设备

    目录 简介无线连接的条件adb连接设备方法一方法二 修改端口号方法一方法二 辅助工具android toolscrcpy gui 问题集合 简介 Android Debug Bridge xff0c 简称adb xff0c 是一种功能多样的
  • 人工智能学习:载入MNIST数据集(1)

    MNIST数据集是人工智能学习入门的数据集 xff0c 包含了一系列的手写的数字图片 载入MNIST数据集的方法很简单 xff0c Tensorflow集成了载入数据集的方法 首先导入tensorflow模块和matplotlib pypl
  • 人工智能学习:MNIST数据分类识别神经网络(2)

    在MNIST数据集上构建一个神经网络 xff0c 进行训练 xff0c 以达到良好的识别效果 1 导入模块 首先 xff0c 导入必要的模块 span class token keyword import span numpy span c
  • 人工智能学习:NMIST数据分类识别-CNN网络(3)

    这里采用CNN模型 xff08 卷积神经网络 xff09 来进行MNIST数据集的分类识别 1 导入模块 首先 xff0c 导入需要的模块 span class token keyword import span numpy span cl
  • 人工智能学习:CIFAR-10数据分类识别(4)

    与MNIST类似 xff0c CIFAR 10同样是人工智能学习入门的数据集之一 xff0c 它包含飞机 汽车 小鸟等10个类别的图片 xff0c 一共60000张图片 xff0c 其中训练集占50000张 xff0c 测试集占10000张
  • 人工智能学习:CIFAR-10数据分类识别-VGG网络(5)

    这里尝试采用VGG网络对CIFAR 10数据集进行分类识别 1 导入需要的模块 span class token keyword import span numpy span class token keyword as span np s
  • 人工智能学习:PASCAL VOC数据集读取(6)

    PASCAL VOC是一个国际的计算机视觉挑战赛 xff0c 数据集包含了20个分类的3万多张图片 挑战赛及其数据集基础上涌现不少知名的目标检测模型如R CNN xff0c YOLO xff0c SSD等 可以通过下载和读取的方法载入PAS
  • 人工智能学习:Microsoft COCO数据集读取(7)

    Microsoft COCO xff08 Common Objects in Context xff09 是微软研发维护的一个大型的数据集 包含了30多万张图片和91个目标分类 可用于目标识别 xff08 Object Detection
  • 人工智能学习:ResNet神经网络(8)

    ResNet是一种非常有效的图像分类识别的模型 xff0c 可以参考如下的链接 https blog csdn net qq 45649076 article details 120494328 ResNet网络由残差 xff08 Resi
  • 人工智能学习:倒立摆(CartPole)(9)

    倒立摆是强化学习的一个经典模拟对象 xff0c 通过对倒立摆对象的持续的动作输入 xff0c 使倒立摆保持在竖立的状态或者倒下 Python提供了一个模拟库 xff08 gym xff09 来模拟倒立摆等一些典型的难度控制对象 首先载入gy
  • 理解卡尔曼滤波

    卡尔曼滤波被广泛的应用于运动估计中 xff0c 在飞行器中多有应用 xff0c 区别于普通滤波如低通滤波 xff0c 卡尔曼滤波具有不延时的优点 xff0c 即普通的低通滤波在过滤噪声的同时也会引入信号滞后 xff0c 而卡尔曼滤波则可以实