控制算法学习 四、扩展卡尔曼滤波EKF

2023-05-16

控制算法学习 四、扩展卡尔曼滤波EKF

  • 前言
  • 非线性系统
  • 状态/观测方程线性化
  • 扩展卡尔曼滤波EKF
  • 后记

前言

经典卡尔曼滤波的使用场景是线性系统,但现实应用时,大多数系统都是非线性的。扩展卡尔曼滤波(Extended Kalman Filter)是针对非线性系统的卡尔曼滤波方法。

非线性系统

经典卡尔曼滤波的状态和观测方程都是线性方程:
x n = A x n − 1 + B u n + w n z n = H x n + v n x_n=Ax_{n-1}+Bu_n+w_n \\ z_n=Hx_n + v_n xn=Axn1+Bun+wnzn=Hxn+vn

如果状态方程或者观测方程是非线性的,则有:
x n = f ( x n − 1 , u n ) + w n z n = g ( x n ) + v n x_n=f(x_{n-1},u_n)+w_n \\ z_n=g(x_n)+v_n xn=f(xn1,un)+wnzn=g(xn)+vn
由于控制输入并不本质,后续讨论不会涉及 u n u_n un

状态/观测方程线性化

可以根据泰勒公式,将函数展开为n阶多项式拟合:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + 1 2 f ′ ′ ( x 0 ) ( x − x 0 ) 2 + o ( ( x − x 0 ) 2 ) f(x)=f(x_0)+f'(x_0)(x-x_0)+ \frac {1}{2}f''(x_0)(x-x_0)^2+o((x-x_0)^2) f(x)=f(x0)+f(x0)(xx0)+21f(x0)(xx0)2+o((xx0)2)

因此,可以通过泰勒公式将非线性的状态方程和观测方程进行线性化:
x n = f ( x ^ n − 1 ) + f ′ ( x ^ n − 1 ) ( x n − 1 − x ^ n − 1 ) + w n z n = g ( x ^ n ∣ n − 1 ) + g ′ ( x ^ n ∣ n − 1 ) ( x n − x ^ n ∣ n − 1 ) + v n x_n=f(\hat x_{n-1})+f'(\hat x_{n-1})(x_{n-1}- \hat x_{n-1})+w_n \\ z_n = g(\hat x_{n|n-1})+g'(\hat x_{n|n-1})(x_n - \hat x_{n|n-1}) +v_n xn=f(x^n1)+f(x^n1)(xn1x^n1)+wnzn=g(x^nn1)+g(x^nn1)(xnx^nn1)+vn
以上线性化有几点值得注意:

  1. EKF线性化使用了一阶近似,算是相对简单;也可以使用二阶或者更高阶的近似。
  2. 由于卡尔曼增益需要计算测量残差,因此观测方程是由状态更新点 x ^ n ∣ n − 1 \hat x_{n|n-1} x^nn1展开的。

将系统的状态方程和观测方程线性化后,就可以直接通过线性卡尔曼滤波的方法开始推导了,过程是完全一样的。

扩展卡尔曼滤波EKF

首先,把线性卡尔曼滤波的五个公式列出来:
K F : p r e d i c t i o n : x ^ n ∣ n − 1 = A x ^ n − 1 P ^ n ∣ n − 1 = A P ^ n − 1 A T + Q u p d a t e : K n = P ^ n ∣ n − 1 H T ( H P n H T + R ) − 1 x ^ n = x ^ n ∣ n − 1 + K k ( z ^ n − H x ^ n ∣ n − 1 ) P n = ( E − K k H ) P ^ n ∣ n − 1 \begin{aligned} KF: \\ prediction : & \\ & \hat x_{n|n-1} = A\hat x_{n-1} &\quad \\ & \hat P_{n|n-1}=A\hat P_{n-1}A^T+Q &\quad \\ update: & \\ & K_n = \hat P_{n|n-1}H^T(HP_nH^T+R)^{-1} \\ & \hat x_n = \hat x_{n|n-1} + K_k(\hat z_n - H \hat x_{n|n-1}) \\ & P_n = (E-K_kH)\hat P_{n|n-1} \end{aligned} KF:prediction:update:x^nn1=Ax^n1P^nn1=AP^n1AT+QKn=P^nn1HT(HPnHT+R)1x^n=x^nn1+Kk(z^nHx^nn1)Pn=(EKkH)P^nn1


扩展卡尔曼滤波,可以直接通过非线性化,将 f ( x ) , g ( x ) f(x),g(x) f(x),g(x)这样的非线性函数,近似为局部区域内的线性函数:
f ′ ( x ^ n − 1 ) = A x ∼ A g ′ ( x ^ n − 1 ) = H x ∼ H f'(\hat x_{n-1})=A_x \sim A \\ g'(\hat x_{n-1})=H_x \sim H \\ f(x^n1)=AxAg(x^n1)=HxH

注意,测量误差可以直接使用非线性观测方程获得:
z ^ n ∣ n − 1 = g ( x ^ n ∣ n − 1 ) z ^ n − z ^ n ∣ n − 1 = z ^ n − g ( x ^ n ∣ n − 1 ) \hat z_{n|n-1}=g(\hat x_{n|n-1})\\ \hat z_n - \hat z_{n|n-1}=\hat z_n-g(\hat x_{n|n-1}) z^nn1=g(x^nn1)z^nz^nn1=z^ng(x^nn1)

然后,将线性卡尔曼滤波五个公式的参数进行替换,就获得了扩展卡尔曼滤波:
E K F : p r e d i c t i o n : x ^ n ∣ n − 1 = f ( x ^ n − 1 ) P ^ n ∣ n − 1 = A x P ^ n − 1 A x T + Q u p d a t e : K n = P ^ n ∣ n − 1 H x T ( H x P n H x T + R ) − 1 x ^ n = x ^ n ∣ n − 1 + K k ( z ^ n − g ( x ^ n ∣ n − 1 ) ) P n = ( E − K k H x ) P ^ n ∣ n − 1 w h e r e : f ′ ( x ^ n − 1 ) = A x g ′ ( x ^ n − 1 ) = H x \begin{aligned} EKF: \\ prediction : & \\ & \hat x_{n|n-1} = f(\hat x_{n-1}) &\quad \\ & \hat P_{n|n-1}=A_x\hat P_{n-1}A_x^T+Q &\quad \\ update: & \\ & K_n = \hat P_{n|n-1}H_x^T(H_xP_nH_x^T+R)^{-1} \\ & \hat x_n = \hat x_{n|n-1} + K_k(\hat z_n - g(\hat x_{n|n-1})) \\ & P_n = (E-K_kH_x)\hat P_{n|n-1} \\ where: \\ & f'(\hat x_{n-1})=A_x \\ & g'(\hat x_{n-1})=H_x \\ \end{aligned} EKF:prediction:update:where:x^nn1=f(x^n1)P^nn1=AxP^n1AxT+QKn=P^nn1HxT(HxPnHxT+R)1x^n=x^nn1+Kk(z^ng(x^nn1))Pn=(EKkHx)P^nn1f(x^n1)=Axg(x^n1)=Hx

KF和EKF的预测和更新是一模一样的。可以根据卡尔曼增益的推导推出这个结论。

后记

总结一下,扩展卡尔曼滤波EKF,实际上就是将非线性系统的状态和观测方程进行线性化后的线性卡尔曼滤波。

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

控制算法学习 四、扩展卡尔曼滤波EKF 的相关文章

  • 扩展卡尔曼滤波算法 EKF

    扩展卡尔曼滤波的仿真案例 xff0c 参考书为北航宇航学院王可东老师的Kalman滤波基础及Matlab仿真 一 状态模型 xff1a 二 测量模型 xff1a 状态方程和测量方程中的噪声均为期望为零的白噪声 三 状态模型和测量模型的线性化
  • EKF之雅克比矩阵(一)

    扩展卡尔曼滤波 EKF EKF之雅克比矩阵 文章目录 扩展卡尔曼滤波 EKF 前言一 什么是线性化 xff1f 二 雅克比矩阵1 矩阵的几何含义2 非线性矩阵与基底的关系3 雅克比矩阵 三 工程中雅克比矩阵如何应用总结 前言 一般的卡尔曼滤
  • EKF(扩展卡尔曼滤波)也需要调参 ,也是Q和R这两个参数。

    结合我这篇博文来看 https blog csdn net sinat 16643223 article details 106297150 ZN无人机课程里面也说到了EKF xff08 扩展卡尔曼滤波 xff09 需要调参 xff0c 也
  • 惯性导航解决方案ADIS16448+tbus-tiny_ekf测评

    忽然感觉TBUS牛逼 xff0c 真的是深钻了一些算法 xff0c 真正解决了些问题 xff0c 单靠IMU实现定位都做出来了 xff0c 牛逼 最新的他们好像是用中心差分卡尔曼滤波了 xff0c 可以看到他们在状态估计上花了很大的力气 转
  • 高斯滤波知识点总结——KF、EKF、UKF以及IF、EIF等

    高斯滤波知识点总结 KF EKF UKF以及IF EIF等 1 引言 本文是我在学习 Probabilistic Robotics 这本书中第三章 高斯滤波过程中的一些知识总结 本文主要是整理高斯滤波算法的知识点和一些讨论 xff0c 具体
  • PX4 EKF模块解读含matlab代码

    这里主要介绍px4里面的定位模块 xff0c 即EKF库 1 状态向量与协方差的预测 1 Px4的状态向量为24维 xff0c 其如下所示 xff1a x 61
  • ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包

    IMU 一般具有两个基本器件 xff1a 加速计和陀螺仪 主要用于测量自身位姿 xff0c 位姿包括位置和姿态 最近在研究imu 融合里程计方面的内容 xff0c 初学一些内容 xff0c 总结一下 xff1a 环境信息 xff1a Ubu
  • 扩展卡尔曼滤波EKF与多传感器融合

    Extended Kalman Filter xff08 扩展卡尔曼滤波 xff09 是卡尔曼滤波的非线性版本 在状态转移方程确定的情况下 xff0c EKF已经成为了非线性系统状态估计的事实标准 本文将简要介绍EKF xff0c 并介绍其
  • EKF SLAM Matlab仿真实践详解(附源码)

    EKF SLAM Matlab仿真实践详解 xff08 附源码 xff09 为提供更好的阅读体验 xff0c 详细内容及源码请移步https github com Nrusher EKF SLAM 或 https gitee com nru
  • (11)EKF - (1.3) EKF1调参参数

    系列文章目录 11 EKF 1 导航综述和调参 文章目录 系列文章目录 前言 3 1 AHRS EKF USE 3 2 EKF ABIAS PNOISE
  • (11)EKF - (2.7) EKF2调参参数

    系列文章目录 11 EKF 2 EKF2估算系统 文章目录 系列文章目录 前言 7 1 EK2 ENABLE
  • Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍

    一 开篇 很久没更新blog了 xff0c 最近研究的东西比较杂乱 xff0c 也整理了很多东西 xff0c 没有来的及更新 xff0c 最近发现很多小伙伴都开始写blog了 xff0c 在不更新就要 被落后了 兄弟们 xff0c 等等我啊
  • EKF SLAM 以及MSCKF 学习

    参考 xff1a https zhuanlan zhihu com p 21381490 https citeseerx ist psu edu viewdoc download jsessionid 61 FA1024834F74311E
  • PX4_ECL_EKF代码分析1

    写在前面 源码版本 xff1a 1 6 0rc1 源码位置1 xff1a Firmware 1 6 0rc1 src modules ekf2 main cpp 源码位置2 xff1a Firmware 1 6 0rc1 src lib e
  • PX4_ECL_EKF代码分析2

    写在前面 源码版本 xff1a 1 6 0rc1 源码位置1 xff1a Firmware 1 6 0rc1 src modules ekf2 main cpp 源码位置2 xff1a Firmware 1 6 0rc1 src lib e
  • 从程序中学习EKF-SLAM(一)

    在一次课程的结课作业上 xff0c 作业要求复写一个EKF SLAM系统 xff0c 我从中学到了好多知识 作为一个典型轻量级slam系统 xff0c 这个小项目应该特别适合于slam系统入门 xff0c 可以了解到经典卡尔曼滤波器在sla
  • 控制算法学习 四、扩展卡尔曼滤波EKF

    控制算法学习 四 扩展卡尔曼滤波EKF 前言非线性系统状态 观测方程线性化扩展卡尔曼滤波EKF后记 前言 经典卡尔曼滤波的使用场景是线性系统 xff0c 但现实应用时 xff0c 大多数系统都是非线性的 扩展卡尔曼滤波 xff08 Exte
  • 无人机姿态解算_扩展卡尔曼滤波(2)

    一 扩展卡尔曼滤波 KF和EKF的公式对比 xff08 基本没差别 xff09 二 扩展卡尔曼五个公式 利用扩展卡尔曼滤波估计四元数 下图是论文中的截图 可以和前面的卡尔曼滤波估计高度文章的那五个公式对应一下 观测矩阵的确定 三 代码的实现
  • robot_pose_ekf 使用说明

    协方差参数的设置 主要确定mpu6050和odom编码器协方差参数的设置 参考 xff1a turtlebot node协方差的设置 mpu605参数的设置 参考 xff1a https github com Arkapravo turtl
  • EKF的通俗理解

    导 xff1a ekf xff0c 扩展卡尔曼滤波简称 xff0c 应用非常广泛 xff1b 1 五个黄金公式 2 应用场合 1 xff09 找清楚模型 2 xff09 对准五个公式的公式 3 xff09 实现 xff1a 求革新值 xff

随机推荐

  • jetson nano Docker化部署

    Docker安装 1 安装docker https docs docker com engine install ubuntu sudo apt get update sudo apt get install apt transport h
  • 钢筋盘点计数数据集图片展示

    数据集分为训练集和测试集 xff0c 其中训练集共有569张已标注图片 xff0c 测试集共有85张未标注图片 xff0c 共计654张 其图片质量与标注质量满足工业化生产实际需要 xff0c 质量保障 有需要的可以到我的资源中进行下载 x
  • Windows下使用pip安装包 出错 TLS/SSL

    Windows下使用pip安装包的时候出现如下问题 xff1a WARNING pip is configured with locations that require TLS SSL however the ssl module in
  • opencv模板匹配步骤及Code

    opencv模板匹配步骤及Code 首先介绍一下模板匹配的适用场景 xff1a 1 图像检索 2 目标跟踪 简单的说 xff0c 模板匹配最主要的功能就是在一幅图像中去寻找和另一幅模板图像中相似度最高的部分 xff0c 这就是模板匹配 比如
  • Tensorflow简单项目讲解

    Tensorflow简单项目讲解 转载请注明出处 xff1a https blog csdn net qq 41007606 article details 81906486 这里对Tensorflow就不在做具体介绍了 xff0c 直接切
  • Keras Model模型方法

    Model模型方法 compile compile self optimizer loss metrics 61 None loss weights 61 None sample weight mode 61 None weighted m
  • 关于Keras的“层”(Layer)——常用层

    所有的Keras层对象都有如下方法 xff1a layer get weights xff1a 返回层的权重 xff08 numpy array xff09 layer set weights weights xff1a 从numpy ar
  • Centos7 glibc库升级到2.23(实测可行)

    注意 xff1a Centos 为了稳定使用的glibc版本通常比较低 而安装有些程序需要依赖新版本 升级glibc需要慎重 xff0c 因很多人升级失败后导致系统不能用了 本人亲测 xff0c 升级了多台机器 xff0c 全部升级成功 g
  • [linux]wsl环境挂载window共享文件

    场景 xff1a 公司有一台内网的机器用来共享文件 xff0c 这里面的磁盘都是T级以上 xff0c 平时大家都是把文件存储到这台电脑上 xff0c 确保公司的资源安全 如果要用脚本来处理文件 xff0c 就需要挂载到内网的linux服务器
  • 最简单C/C++数据可视化函数库MathGL配置方法

    1 简介 xff1a MathGL是一个可用于C C 43 43 数据可视化的函数库 xff0c 可以对不同种类的数据进行可视化 由于MathGL本身不具有显示功能 xff0c 需要配合opencv以及其他可视化工具才能够显示图形 由于目前
  • 数学建模系列-优化模型---(一)规划模型

    数学建模中我们经常遇到的一种问题是给定一些条件 xff0c 目标是求得基于单或者多自变量的某个条件之的最优结果 一 线性规划模型 给定多个条件 xff0c 求某一个线性方程的最大值 xff08 对与这种问题 xff0c 我们一般采用的是最普
  • Linux----网络编程(相关名词概念)

    网络编程即编写通过计算机网络与其他程序进行通信的这类程序 相互通信的网络程序中 xff0c 一方称为客户程序 xff08 client xff09 xff0c 另一方称为服务器程序 server 计算机网络 xff08 简称网络 xff09
  • Python 列表参数 修改与赋值 对外部变量的影响

    两个函数 def test1 alist 对参数列表进行修改 alist 0 61 233 alist append 33 def test2 alist 对参数列表进行赋值 alist 61 9 5 1 10 调用结果 alist 61
  • APM配置

    开源飞控apm配置研究 项目介绍引言配置之前的文件准备我的配置过程配置文件链接小结 项目介绍 项目 xff1a 自动驾驶无人船 是老师的一个课题 xff0c 我们负责控制算法相关 当然 xff0c 也免不了要搬砖 做之前老师说 xff0c
  • python opencv实践 图像去畸变

    目录 前言镜头成像畸变原因去畸变方法python去畸变输入代码结果 前言 由于相机的镜头并不完全理想 xff0c 成像时会产生线条扭曲 失真等 对双目图像 鸟瞰图等进行处理时 xff0c 首先要矫正去畸变 镜头成像畸变原因 相机的镜头前有一
  • 通过直链下载google网盘里的文件

    目录 前言通过直链云下载保存在google drive的datasets 前言 科研学习的时候 xff0c 很多数据集是保存在google drive上的 xff0c 正常情况下国内打不开 xff0c 也就下载不了 于是我翻到了一个解决方法
  • 机器人建图算法2.1从栅格占据地图到ESDF地图

    机器人建图算法2 1从栅格占据地图到ESDF地图 前言论文解读示意图说明伪代码说明算法流程 总结 前言 最基础的地图是占据栅格地图Occupancy map xff0c 每个格子标明了该位置是否被物体占据 然而对于规划和避障而言 xff0c
  • 控制算法学习 一、卡尔曼滤波(1)以小车为例

    控制算法学习 一 卡尔曼滤波 xff08 1 xff09 以小车为例 前言线性系统状态方程和观测方程举例 卡尔曼滤波状态预测状态更新 卡尔曼滤波流程图 前言 卡尔曼滤波 xff08 Kalman Filter KF xff09 是最经典的传
  • ROS python3使用cv_bridge报错,在melodic中使用python3 cv_bridge

    ROS cv bridge报错 xff1a 在melodic中使用python3 43 cv bridge 问题描述解决方案使用方法2022 7补充 问题描述 ROS与opencv之间的数据类型转换是通过cv bridge这个包来实现的 m
  • 控制算法学习 四、扩展卡尔曼滤波EKF

    控制算法学习 四 扩展卡尔曼滤波EKF 前言非线性系统状态 观测方程线性化扩展卡尔曼滤波EKF后记 前言 经典卡尔曼滤波的使用场景是线性系统 xff0c 但现实应用时 xff0c 大多数系统都是非线性的 扩展卡尔曼滤波 xff08 Exte