了解卡尔曼滤波器4--非线性状态估算器(EKF,UKF,PF)

2023-05-16

        一般来说,我们希望我们的生活是线性的,就像这条线,这可能表示成功、收入或者幸福。但实际上,生活并不是线性的,它充满了起伏,有时甚至更复杂。

        如果您是工程师,您经常会需要处理非线性系统,为了帮助您,我们将讨论非线性状态估算器。在之前的文章中,我们使用简化的线性汽车模型来讨论卡尔曼滤波器的状态估算。

        但是,如果系统建模时考虑到非线性,比如道路摩擦,则状态转换函数变为非线性。在这里,噪声被线性地加入了系统,但也有可能噪声并非线性加进来。在一般系统中,无论状态转换函数还是观测函数,甚至两者都可能是非线性的。

        对于所有这些情况,我们需要使用非线性状态估算器来替代卡尔曼滤波器。因为,卡尔曼滤波器仅针对线性系统。下面这个例子显示了使用卡尔曼滤波器对非线性系统进行状态估算出现的问题。卡尔曼滤波器假设高斯分布。如果状态转移函数是线性的, 在经历线性变换之后,分布保持其高斯特性。

        虽然这里没有显示,但观测函数g(x)也是如此。但是,如果f(x)是非线性的,那么得到的状态分布可能不是高斯分布。

        因此,卡尔曼滤波器算法可能会不收敛。在这种情况下,您可以使用扩展卡尔曼滤波器(EKF), 它把非线性函数在当前估算状态的平均值附近进行线性化。在每个时间步,执行线性化, 然后将得到的雅可比矩阵用于预测和更新卡尔曼滤波器算法的状态。

        当系统是非线性,并且可以通过线性化很好地近似时,那么扩展卡尔曼滤波器是状态估算的一个很好的选择。然而,它有以下缺点: (1)由于复杂的导数,可能难以解析计算雅可比矩阵;(2)以数值方式计算它们则可能需要很高的计算成本;(3)扩展卡尔曼滤波器不适用于具有不连续模型的系统,因为系统不可微分时雅各比矩阵不存在;(4)高度非线性系统的线性化效果不好。

        其中最后一种情况下线性化无效,因为非线性函数并不能通过线性函数很好的近似表达出来,描述不了系统动力学。

        为了解决扩展卡尔曼滤波器的问题,您还可以使用另一种估算技术, 称为无迹卡尔曼滤波器(UKF)你知道吗,过滤器的创建者注意到同事办公桌上的除臭剂才想出了这个名字(因为也有人称其无味卡尔曼滤波器)。现在回到滤波器,它并不像扩展卡尔曼滤波器那样近似非线性函数,无迹卡尔曼滤波器近似概率分布。我们的意思是:这是一个概率分布,无迹的卡尔曼滤波器选择一组最小的采样点,让它们的均值和协方差与该分布相同。

        这些被称为西格玛点,并且围绕均值对称分布。然后,每个西格玛点通过非线性系统模型计算,并计算非线性变换后的输出点的均值和协方差,计算经验高斯分布,用来计算新的状态值。

        注意,在线性卡尔曼滤波器算法中,在预测步骤中使用状态转移函数计算误差协方差P,然后使用测量量进行更新。然而,在无迹的卡尔曼滤波器中,我们不会以相同的方式计算它,因为我们以经验方式得到它。

        基于相似原理的另一种非线性状态估计器是粒子滤波器(PF),它使用的样本点称为粒子。与无迹卡尔曼滤波器的显着差异在于,粒子滤波器近似任意分布,所以它不仅限于高斯假设。为了表示未明确知道的任意分布,粒子滤波器所需的粒子数远远大于无迹卡尔曼滤波器所需的粒子数。

        作为比较,下表是我们到目前为止讨论过滤器的特性。卡尔曼滤波器仅适用于线性系统。对于非线性系统的状态估算,您可以使用 EKF ,UKF 或PF。注意,使用EKF 来精确估计状态,它需要非线性系统模型能很好的进行线性化,否则,滤波器得到的估算结果很差。粒子滤波器是唯一适用于任意分布的滤波器。我们看到,表格越往下计算成本越高。粒子滤波器所需要的运算量最大,因为它需要大量的粒子来近似任意分布。

        本节,我们讨论了不同非线性状态估算器背后的基本概念。现在,如果您需要处理任何非线性问题,例如汽车案例中的道路摩擦,你已经知道如何估算非线性系统中感兴趣的状态值。

如果你想了解更多有关扩展卡尔曼滤波器(EKF)的知识,请观看以下视频:

【卡尔曼滤波器】6_扩展卡尔曼滤波器_Extended Kalman Filter_哔哩哔哩_bilibili

在Simulink中使用卡尔曼滤波器和扩展卡尔曼滤波器的例子请观看以下视频:

在 Simulink 中使用卡尔曼滤波器_哔哩哔哩_bilibili

在 Simulink 中使用扩展卡尔曼滤波器_哔哩哔哩_bilibili

文章内容的视频地址如下:

了解卡尔曼滤波器——非线性状态估算器_哔哩哔哩_bilibili

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

了解卡尔曼滤波器4--非线性状态估算器(EKF,UKF,PF) 的相关文章

  • 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 可以看到他们在状态估计上花了很大的力气 转
  • CDKF、UKF和EKF滤波算法

    转载自 xff1a https mp weixin qq com s umv72zAB i3luzyIvXpvYw CDKF UKF和EKF滤波算法 凌拓智能TBUS TBUS社区 今天 之前一直和大家探讨在TSLAM室内定位算法中 xff
  • EKF_SLAM一般过程

    SLAM xff0c 同步定位与地图构建 xff0c 本文将介绍基于EKF的SLAM的整体过程 1 EKF SLAM Overview 当机器人处在个未知环境中时 xff0c 他最想知道的就是他在当前环境中的位置 环境不知道咋办 xff0c
  • 高斯滤波知识点总结——KF、EKF、UKF以及IF、EIF等

    高斯滤波知识点总结 KF EKF UKF以及IF EIF等 1 引言 本文是我在学习 Probabilistic Robotics 这本书中第三章 高斯滤波过程中的一些知识总结 本文主要是整理高斯滤波算法的知识点和一些讨论 xff0c 具体
  • PX4利用matlab推导生成 EKF中雅可比矩阵的方法

    文章目录 一 Matlab的Symbolic Maths Toolbox是什么二 PX4 EKF中需要的雅可比矩阵三 Matlab脚本解析参考来源 PX4实际使用了Matlab的Symbolic Maths Toolbox来进行雅可比矩阵的
  • 推荐关于PX4 ECL EKF方程推导的两篇“宝藏“文章

    文章目录 一 PX4 的 ECL EKF 公式推导及代码解析 by 赵祯卿二 PX4 的 ECL EKF2 方程推导 by shuyong chen PX4的ECL EKF开源代码已经比较广泛地应用到很多无人机飞控项目中 该开源项目可以融合
  • 扩展卡尔曼滤波EKF与多传感器融合

    Extended Kalman Filter xff08 扩展卡尔曼滤波 xff09 是卡尔曼滤波的非线性版本 在状态转移方程确定的情况下 xff0c EKF已经成为了非线性系统状态估计的事实标准 本文将简要介绍EKF xff0c 并介绍其
  • 关于EKF和ErKF的理解

    EKF和ErKF的区别 大概6 20写完 快捷键 加粗 Ctrl 43 B 斜体 Ctrl 43 I 引用 Ctrl 43 Q插入链接 Ctrl 43 L插入代码 Ctrl 43 K插入图片 Ctrl 43 G提升标题 Ctrl 43 H有
  • (11)EKF - (2.7) EKF2调参参数

    系列文章目录 11 EKF 2 EKF2估算系统 文章目录 系列文章目录 前言 7 1 EK2 ENABLE
  • 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
  • 了解卡尔曼滤波器4--非线性状态估算器(EKF,UKF,PF)

    一般来说 xff0c 我们希望我们的生活是线性的 xff0c 就像这条线 xff0c 这可能表示成功 收入或者幸福 但实际上 xff0c 生活并不是线性的 xff0c 它充满了起伏 xff0c 有时甚至更复杂 如果您是工程师 xff0c 您
  • 控制算法学习 四、扩展卡尔曼滤波EKF

    控制算法学习 四 扩展卡尔曼滤波EKF 前言非线性系统状态 观测方程线性化扩展卡尔曼滤波EKF后记 前言 经典卡尔曼滤波的使用场景是线性系统 xff0c 但现实应用时 xff0c 大多数系统都是非线性的 扩展卡尔曼滤波 xff08 Exte
  • ekf pose使用方法 ros_【ROS-Gazebo】为什么选择SDF?

    前言 这是一个系列小文章 xff0c 主要介绍在ROS Gazebo中如何更好地使用SDF格式建模与仿真 众所周知 xff0c URDF是ROS的原生支持格式 xff0c 但在某些情况下 xff08 尤其是Gazebo仿真时 xff09 x
  • CKF MCSCKF UKF EKF滤波性能对比

    CKF MCSCKF UKF EKF滤波性能对比 在非线性滤波中 比较了CKF MCSCKF UKF EKF 几种非线性滤波的性能 用MATLAB进行仿真 八维非线性滤波中 CKF MCSCKF 比较稳定 EKF UKF 表现不好 MATL
  • 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

随机推荐

  • esp8266对接天猫精灵(11)终端编程

    一 编写lua脚本获取控制信息 xff08 8266 xff09 前边也说过 xff0c 这个脚本要实现的步骤可以分三步 xff0c 第一步是联网 xff0c 第二步是使用http get到数据 xff0c 然后控制要控制的设备 我们的lu
  • Altium Designer -- 精心总结

    如需转载请注明出处 xff1a http blog csdn net qq 29350001 article details 52199356 以前是使用DXP2004来画图的 xff0c 后来转行 想来已经有一年半的时间没有画过了 突然转
  • Arduino点亮ws2812

    先加载ws2812库文件 span style color rgb 68 68 68 font family none font size 14px background color rgb 255 255 255 a target bla
  • Arduino 旋转编码器ky-040

    int pinA 61 3 Connected to CLK on KY 040 CLK接 pin3 int pinB 61 4 Connected to DT on KY 040 DT接pin4 SW是按键 xff0c 不用接 int e
  • Dockerfile

    Dockerfile文件 xff0c 自创镜像 一 概念 xff1a 二 案例 xff1a 1 先创建一个Dockerfile文件2 编写内容3 构建镜像4 运行 三 指令 xff1a FROM xff1a MAINTAINER xff1a
  • 关于嵌入式无人机之模型创建-使用3D打印装配体01

    做嵌入式的同学离不开硬件的支撑 那么无人机作为一套综合性工程 span class token punctuation span 涉及软件 span class token punctuation span 嵌入式 span class t
  • 牢记公式,ardupilot EKF2就是纸老虎(三)!

    版权声明 xff1a 本文为博主原创文章 xff0c 转载请附上博文链接 xff01 三 掀开EKF2的神秘面纱 EKF2是EKF算法在ardupilot上的代码实现 读到这里你也许已经忘了 xff0c EKF的5大公式 虽然下面是7个公式
  • ROS节点 报错process has died [pid 3322522, exit code -11

    偶尔出现 我的情况是两个节点 ros span class token double colon punctuation span span class token function init span span class token p
  • JS的冒泡函数

    今天下午学习了冒泡函数的加载和运行 一 var a 61 20 30 40 20 15 5 25 for var i 61 0 i lt a length i 43 43 for var j 61 1 j lt a length j 43
  • ubuntu server 版安装桌面

    安装xfce4 xff08 或其他桌面 xff09 amp xinit sudo apt install xfce4 xinit安装Display Manager 安装xdm xff0c 虽然有着古早的界面 xff0c 但是不会安装任何依赖
  • ubuntu下gazebo加载很慢解决办法

    ubuntu下gazebo加载很慢解决办法 前言 刚安装好 r o s ros r o s 后 xff0c 在终端输入命令 gazebo 启动 g
  • 从用户态是怎么切换到核心态的?

    此文章参考了 Linux 用户态通过中断切换到内核态详解 简答来说 xff0c 用户态和核心态的区别就是 xff1a 两者的操作权限不同 xff0c 用户态的进程能够访问的资源受到了极大的控制 xff0c 而运行在内核态的进程可以 为所欲为
  • 将rgbd数据集制作成rosbag,并发布图片和camera_info消息

    因为最近做的项目需要和别的开源项目做一些对比 xff0c 比如rgbdslamV2 xff0c 但是rdgbslamV2使用的输入是rosbag xff0c 并且他必须要订阅四个话题才能运行 xff0c 这四个话题分别是 xff1a cam
  • PX4添加自定义日志消息

    固件版本 xff11 11 一 将要观察的数据声明成uORB消息 xff0c 并发布 我这里随便添加了一个 在logged topics cpp里的add default topics函数里加上一行add topic fanbu 100 或
  • ROS常用知识点总结——Cmakelist

    Cmakelist编译规则 1 Cmakelist通常需要添加可执行文件名称 xff0c 并且指定编译的源文件即可 2 添加头文件编译时候 xff0c 应当在Cmakelist文件中打开以下标记出的部分 xff0c 否则编译找不到头文件 C
  • agx xavier rtso1001载板启动

    recovery按键长按 gt reset键按一下 gt 3s后松开recovery键 ubuntu命令行 lsusb lsusb Bus 004 Device 001 ID 1d6b 0003 Linux Foundation 3 0 r
  • 了解卡尔曼滤波器1--状态观测器

    在本文中 xff0c 我们将讨状态观测器 这个概念将有助于解释卡尔曼滤波器是什么以及它是如何工作的 让我们从一个例子开始 这是小蒂米 你想知道他的心情以及他现在的感受 然而 xff0c 没有直接的方法能测量他的心情 所以 xff0c 你要做
  • 牢记公式,ardupilot EKF2就是纸老虎(五)!

    版权声明 xff1a 本文为博主原创文章 xff0c 转载请附上博文链接 xff01 四 一睹EKF2芳容 xff08 上接牢记公式 xff0c ardupilot EKF2就是纸老虎 xff08 四 xff09 xff09 更新 本博客讲
  • jsp页面引入jstl标签后台报java.lang.ArrayIndexOutOfBoundsException

    jsp引用了jstl的core标签和fmt标签 xff0c 但访问jsp时后台报java lang ArrayIndexOutOfBoundsException xff0c 如下图所示 xff1a 花了很长时间上网查找原因也没有找到答案 x
  • 了解卡尔曼滤波器4--非线性状态估算器(EKF,UKF,PF)

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