目录
-
为什么需要扩展卡尔曼滤波,与卡尔曼滤波的区别?
-
扩展卡尔曼滤波的三大前提条件
-
算法核心
-
目标跟踪中的典型应用场景
-
下期预告
一、为什么需要扩展卡尔曼滤波,与卡尔曼滤波的区别?
在现实世界的诸多实际应用场景里,系统往往展现出极为复杂的非线性特性。以航空航天领域为例,飞行器在飞行过程中,其运动轨迹受到空气动力学、地球引力、高空大气环境等多种复杂因素的综合影响,导致其运动规律难以借助简单的线性模型予以精确描述。在自动驾驶场景下,车辆的加速、减速、转向操作以及行人的不规则运动等情况,也都无法通过传统的线性系统进行精准分析与处理。并且,传感器采集的数据常常面临噪声干扰、数据缺失、信号畸变等一系列问题。
传统的卡尔曼滤波在处理线性系统时,凭借其简洁高效的算法结构和良好的估计性能,能够精准地对系统状态进行估计。但它严格依赖线性系统假设,即系统的状态转移方程和观测方程均为线性形式,状态变量之间以及状态变量与观测变量之间仅存在线性关系。一旦面对上述非线性、复杂的实际情况,由于其内在算法机制难以对非线性关系进行有效建模和处理,所以无法准确地估计系统状态。
扩展卡尔曼滤波(EKF)正是为解决此类问题而诞生。它创新性地采用将非线性系统通过线性化近似的方式,转化为近似线性系统来进行处理。具体而言,EKF 通过对非线性的状态转移函数和观测函数在当前估计状态附近进行泰勒展开,取一阶线性项来近似原非线性函数,从而将非线性系统问题转化为类似线性系统的形式,进而实现对系统状态的有效估计。相较于卡尔曼滤波,EKF 打破了线性系统的限制,能够处理非线性系统;在算法流程上,针对非线性函数的线性化操作引入了雅可比矩阵的计算,用于描述函数的局部线性近似关系,这是与卡尔曼滤波在算法细节上的显著区别。EKF 的出现,为解决现实中大量存在的非线性系统估计问题提供了强有力的工具,极大地拓展了状态估计技术的应用范围,使相关系统在复杂环境下的状态估计与控制得以实现。
二、扩展卡尔曼滤波的三大前提条件
(一)可线性化假设
尽管系统本身是非线性的,但在一定条件下,可通过泰勒展开等方法将其在某个工作点附近进行线性化近似。例如对于非线性状态转移函数和观测函数,在当前估计状态处进行一阶泰勒展开,使其能够用类似线性系统的方式进行处理。不过,这种线性化近似在系统非线性程度较高时,可能会引入较大误差,影响最终的估计精度。
(二)高斯噪声模型
与卡尔曼滤波类似,扩展卡尔曼滤波假设系统噪声和观测噪声都服从高斯分布。这意味着噪声的概率密度函数呈正态分布,大部分噪声值集中在均值附近,离均值越远,出现的概率越小。这种假设使得我们能够利用高斯分布的数学特性,对噪声进行量化和处理,从而在状态估计过程中考虑噪声的影响。然而,在实际情况中,如果噪声不符合高斯分布,EKF 的性能可能会受到严重影响。
(三)局部马尔可夫性
扩展卡尔曼滤波假定当前状态仅由前一时刻的状态和控制输入决定,与更早的历史状态无关。在实际应用中,这一特性简化了状态转移的计算过程,使得我们在预测当前状态时,只需关注上一时刻的状态信息以及当前的控制输入,而无需考虑整个历史状态序列。但在某些复杂系统中,这种局部马尔可夫性可能并不完全成立,从而对 EKF 的估计效果产生一定限制。
三、算法核心
(一)预测阶段
-
状态预测:
利用线性化后的状态转移函数进行状态预测。对于非线性状态转移函数 x k = f ( x k − 1 , u k , w k ) x_k = f(x_{k - 1}, u_k, w_k) xk=f(xk−1,uk,wk)
,在当前估计状态 x ^ k − 1 \hat{x}_{k - 1} x^k−1处线性化后,状态预测公式为 x ^ k ∣ k − 1 = f ( x ^ k − 1 , u k , 0 ) \hat{x}_{k|k - 1}=f(\hat{x}_{k - 1}, u_k, 0) x^k∣k−1=f(x^k−1,uk,0)。通过上一时刻的最优估计状态 x ^ k − 1 \hat{x}_{k - 1} x^k−1和当前的控制输入 u k u_k uk,结合非线性状态转移函数的线性化近似,得到当前时刻基于上一时刻的状态预测值。例如在机器人运动控制中,根据机器人上一时刻的位置、速度等状态以及当前的控制指令,预测出当前时刻机器人可能的位置和速度。
-
协方差预测:
协方差预测公式为 P k ∣ k − 1 = F k − 1 P k − 1 F k − 1 T + Q k − 1 P_{k|k - 1}=F_{k - 1}P_{k - 1}F_{k - 1}^T + Q_{k - 1} Pk∣k−1=Fk−1Pk−1Fk−1T+Qk−1。其中, P k − 1 P_{k - 1} Pk−1是上一时刻的误差协方差矩阵, F k − 1 = ∂ f ∂ x ∣ x = x ^ k − 1 F_{k - 1}=\left.\frac{\partial f}{\partial x}\right|_{x = \hat{x}_{k - 1}} Fk−1=∂x∂f∣∣∣x=x^k−1是状态转移函数关于状态的雅可比矩阵, Q k − 1 Q_{k - 1} Qk−1是系统噪声协方差矩阵。该公式用于估计预测状态的误差范围,雅可比矩阵的准确计算对协方差预测至关重要,它反映了系统状态变化对误差传播的影响。
(二)更新阶段
-
卡尔曼增益计算:
卡尔曼增益 K ( k ) = P ( k ∣ k − 1 ) ⋅ H T ⋅ ( H ⋅ P ( k ∣ k − 1 ) ⋅ H T + R ) − 1 K(k) = P(k|k-1) \cdot H^T \cdot \left( H \cdot P(k|k-1) \cdot H^T + R \right)^{-1} K(k)=P(k∣k−1)⋅HT⋅(H⋅P(k∣k−1)⋅HT+R)−1
这里的 H k = ∂ h ∂ x ∣ x = x ^ k ∣ k − 1 H_k=\left.\frac{\partial h}{\partial x}\right|_{x = \hat{x}_{k|k - 1}} Hk=∂x∂h∣∣x=x^k∣k−1是观测函数关于状态的雅可比矩阵, R k R_k Rk是观测噪声协方差矩阵。卡尔曼增益用于平衡预测值和观测值在状态更新中的权重,由于观测函数的非线性,雅可比矩阵 H k H_k Hk的计算影响着卡尔曼增益的准确性,进而决定了观测值对状态更新的贡献程度。
-
状态更新:状态更新公式为 x ^ k = x ^ k ∣ k − 1 + K k ( z k − h ( x ^ k ∣ k − 1 , 0 ) ) \hat{x}_k=\hat{x}_{k|k - 1}+K_k(z_k - h(\hat{x}_{k|k - 1}, 0)) x^k=x^k∣k−1+Kk(zk−h(x^k∣k−1,0))。通过结合观测值 z k z_k zk和预测值 x ^ k ∣ k − 1 \hat{x}_{k|k - 1} x^k∣k−1,利用卡尔曼增益 K k K_k Kk对预测值进行修正,得到更准确的当前状态估计值 x ^ k \hat{x}_k x^k。例如在室内定位系统中,融合传感器获取的观测位置信息与基于模型预测的位置信息,得到更精确的目标位置估计。
-
协方差更新:协方差更新为 P ( k ) = ( I − K ( k ) ⋅ H ) ⋅ P ( k ∣ k − 1 ) P(k) = \left( I - K(k) \cdot H \right) \cdot P(k|k-1) P(k)=(I−K(k)⋅H)⋅P(k∣k−1) 。根据状态更新过程调整误差协方差矩阵,为下一次迭代提供更准确的误差估计。在 EKF 中,由于线性化误差的存在,协方差更新不仅要考虑观测信息的影响,还要考虑线性化近似带来的误差,以确保误差协方差能够合理反映估计误差的真实情况。
四、目标跟踪中的典型应用场景
(一)无人机复杂飞行轨迹跟踪
无人机在执行任务时,可能会进行各种复杂机动,如快速转弯、俯冲、悬停等,其运动轨迹呈现高度非线性。扩展卡尔曼滤波可以对无人机的运动模型进行线性化处理,通过融合惯性测量单元(IMU)、全球导航卫星系统(GNSS)以及视觉传感器等多种数据源的信息,实现对无人机实时状态的准确估计。例如在无人机进行航拍任务时,利用 EKF 结合 IMU 测量的加速度和角速度信息,以及视觉传感器提供的周围环境特征信息,能够准确跟踪无人机的姿态和位置变化,保证航拍画面的稳定性和准确性。
(二)自动驾驶车辆的目标跟踪
在自动驾驶场景中,车辆需要对周围的行人、车辆等目标进行实时跟踪。行人的不规则运动、车辆的加速、减速和转向等行为都使得目标的运动状态呈现非线性。EKF 通过对目标运动模型的线性化,结合激光雷达、摄像头等传感器获取的观测数据,能够准确预测目标的位置和运动趋势。例如,通过分析行人的步幅、行走方向等特征,利用 EKF 提前预判行人可能出现的危险行为,为自动驾驶车辆的决策系统提供可靠的信息,提高自动驾驶的安全性。
(三)工业机器人的运动控制与目标抓取
工业机器人在工作过程中,其机械臂的运动轨迹以及对目标物体的抓取操作涉及复杂的非线性动力学。EKF 可以根据机器人的运动学模型和传感器反馈信息,对机械臂的位置和姿态进行实时估计和调整。例如,在机器人抓取目标物体时,通过融合视觉传感器获取的目标物体位置信息和机器人自身的运动状态信息,利用 EKF 准确控制机械臂的运动,实现精确抓取,提高工业生产的效率和精度。
五、下期预告
尽管扩展卡尔曼滤波在处理非线性系统方面取得了显著进展,但在实际应用中仍面临诸多挑战。例如,在某些极端情况下,系统的非线性程度可能过高,使得线性化近似效果不佳;噪声分布可能并非严格符合高斯分布,导致 EKF 的性能下降;此外,对于一些高维复杂系统,EKF 的计算量可能过大,影响实时性。
针对这些问题,下期我们将重点探讨更先进的滤波算法,如无迹卡尔曼滤波(UKF),它通过更合理的采样策略来处理非线性系统,能够在一定程度上减少线性化误差;粒子滤波(PF)则基于蒙特卡洛方法,能够有效应对非高斯噪声环境。同时,我们还将研究如何优化算法以提高在高维复杂系统中的计算效率,进一步提升状态估计技术在实际应用中的性能。
敬请期待下期关于 “超越扩展卡尔曼滤波:应对复杂系统的先进滤波技术” 的精彩内容!
有关ekf的matlab代码见
链接:https://pan.baidu.com/s/1MdKm-4Tt_9mU7POoivXzIA
提取码:v3a9
有关卡尔曼滤波matlab代码(免费下载):
https://download.youkuaiyun.com/download/qq_44965657/90564035
https://download.youkuaiyun.com/download/qq_44965657/90564042
https://download.youkuaiyun.com/download/qq_44965657/90564050
https://download.youkuaiyun.com/download/qq_44965657/90564054
https://download.youkuaiyun.com/download/qq_44965657/90564056
https://download.youkuaiyun.com/download/qq_44965657/90564059
https://download.youkuaiyun.com/download/qq_44965657/90564065
https://download.youkuaiyun.com/download/qq_44965657/90564063
https://download.youkuaiyun.com/download/qq_44965657/90564062
https://download.youkuaiyun.com/download/qq_44965657/90564060