控制算法学习 四、扩展卡尔曼滤波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(一)

    最近回到slam方向了 xff0c 所以有时间整理一下最近的收获 最复杂也是最简单的模块 滤波 引入 那么滤波是什么呢 xff1f 滤波就是由于观测observation xff08 OB xff09 天生具备的误差和噪声 当有多个信号源观
  • 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 可以看到他们在状态估计上花了很大的力气 转
  • 任何的卡尔曼滤波器的研究都要紧紧围绕状态与方差的传播特性。 让我想起MSCKF是误差状态的EKF模型。

    任何的卡尔曼滤波器的研究都要紧紧围绕状态与方差的传播特性 让我想起MSCKF是误差状态的EKF模型 传播特性应该就是指预测方差或者递推方程 xff1f https blog csdn net sinat 16643223 article d
  • EKF_SLAM一般过程

    SLAM xff0c 同步定位与地图构建 xff0c 本文将介绍基于EKF的SLAM的整体过程 1 EKF SLAM Overview 当机器人处在个未知环境中时 xff0c 他最想知道的就是他在当前环境中的位置 环境不知道咋办 xff0c
  • 扩展卡尔曼滤波_无人车定位系列之:扩展卡尔曼滤波

    当系统状态方程不符合线性假设时 xff0c 采用卡尔曼滤波无法获得理想的最优估计 扩展卡尔曼滤波与卡尔曼滤波主要区别在于 xff1a 对状态方程的泰勒展开 快速回顾几个知识点 xff1a Gaussian Distribution of U
  • 高斯滤波知识点总结——KF、EKF、UKF以及IF、EIF等

    高斯滤波知识点总结 KF EKF UKF以及IF EIF等 1 引言 本文是我在学习 Probabilistic Robotics 这本书中第三章 高斯滤波过程中的一些知识总结 本文主要是整理高斯滤波算法的知识点和一些讨论 xff0c 具体
  • PX4 EKF中的多传感器融合方法

    文章目录 1 滤波方法及状态预测1 1 EKF 滤波方程1 2 KF 滤波方程1 3 PX4中的状态量及其预测1 3 1 状态量1 3 2 姿态四元数一步预测1 3 3 速度 位置一步预测1 3 4 协方差阵预测 2 磁三轴数据融合2 1
  • 推荐关于PX4 ECL EKF方程推导的两篇“宝藏“文章

    文章目录 一 PX4 的 ECL EKF 公式推导及代码解析 by 赵祯卿二 PX4 的 ECL EKF2 方程推导 by shuyong chen PX4的ECL EKF开源代码已经比较广泛地应用到很多无人机飞控项目中 该开源项目可以融合
  • ros入门(六)--imu融合里程计robot_pose_ekf扩展卡尔曼融合包

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

    转自 http blog csdn net qq 30159351 article details 53408740 这是SLAM最传统的基础 xff0c 是SLAM最原始的方法 xff0c 虽然现在使用较少 xff0c 但是还是有必要了解
  • 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
  • 了解卡尔曼滤波器4--非线性状态估算器(EKF,UKF,PF)

    一般来说 xff0c 我们希望我们的生活是线性的 xff0c 就像这条线 xff0c 这可能表示成功 收入或者幸福 但实际上 xff0c 生活并不是线性的 xff0c 它充满了起伏 xff0c 有时甚至更复杂 如果您是工程师 xff0c 您
  • 从程序中学习EKF-SLAM(一)

    在一次课程的结课作业上 xff0c 作业要求复写一个EKF SLAM系统 xff0c 我从中学到了好多知识 作为一个典型轻量级slam系统 xff0c 这个小项目应该特别适合于slam系统入门 xff0c 可以了解到经典卡尔曼滤波器在sla
  • 寻找APM中EKF的五大公式

    EKF核心代码位置 AP NavEKF2 cpp 进入该函数 进入该函数 xff0c 然后可以看到关键部分 xff0c 也即卡尔曼五个公式的地方 下面介绍每个公式的具体位置 28状态值 首先要知道选用的状态值有哪些 xff0c 28状态值
  • SLAM --- VIO 基于 EKF 开源

    1 VIO based on EKF 已知一致性的Visual Inertial EKF SLAM 实现添加链接描述
  • 滤波学习理解----EKF(一)

    最近回到slam方向了 xff0c 所以有时间整理一下最近的收获 最复杂也是最简单的模块 滤波 引入 那么滤波是什么呢 xff1f 滤波就是由于观测observation xff08 OB xff09 天生具备的误差和噪声 当有多个信号源观
  • 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