惯性导航——扩展卡尔曼滤波(一)

本文详细介绍了一种用于无人机导航的扩展卡尔曼滤波(EKF)算法,包括预测与更新阶段的数学公式,并给出了状态与观测矩阵的具体计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相關源碼請參考開源飛控StarryPilot:https://github.com/JcZou/StarryPilot

对于无人机的惯性导航系统,系统的状态方程是非线性的,根据扩展卡尔曼滤波方程:


Predict

x^k|k1Pk|k1=f(x^k1|k1,uk1)=Fk1Pk1|k1FTk1+Qk1(43) (43) x ^ k | k − 1 = f ( x ^ k − 1 | k − 1 , u k − 1 ) P k | k − 1 = F k − 1 P k − 1 | k − 1 F k − 1 T + Q k − 1

Update
y~kSkKkx^k|kPk|k=zkh(x^k|k1)=HkPk|k1HTk+Rk=Pk|k1HTkS1k=x^k|k1+Kky~k=(IKkHk)Pk|k1(44) (44) y ~ k = z k − h ( x ^ k | k − 1 ) S k = H k P k | k − 1 H k T + R k K k = P k | k − 1 H k T S k − 1 x ^ k | k = x ^ k | k − 1 + K k y ~ k P k | k = ( I − K k H k ) P k | k − 1

其中状态和观测矩阵为状态和观测函数的雅可比矩阵:
Fk1Hk=fx|x^k1|k1,uk1=hx|x^k|k1(45) (45) F k − 1 = ∂ f ∂ x | x ^ k − 1 | k − 1 , u k − 1 H k = ∂ h ∂ x | x ^ k | k − 1

雅可比矩阵具体的含义可以参看Wiki: 雅可比矩阵


首先需要确定 f f h。这里介绍两种形式的状态函数,第一种是不包含哥式校正(即不考虑地球自转以及无人机绕地球的速度所产生的向心加速度),一种是包含哥式校正的。这篇文章先介绍不包含哥式校正的EKF,包含哥式校正的将在下一篇文章介绍。

首先介绍各参数定义:
L L :纬度,单位:deg107
l l :经度,单位:deg107
h h :高度,单位:m
vN v N :朝北速度,单位: m/s m / s
vE v E :朝东速度,单位: m/s m / s
vD v D :朝地速度,单位: m/s m / s
R0 R 0 :地球平均半径
Tx T x :x转换算子,用于将南北向位移量转化为纬度变化量, Tx=180107πR0 T x = 180 ∗ 10 7 π R 0 (假设在近地面飞行,忽略高度对半径的影响。如要考虑,则分母变为 π(R0+h) π ( R 0 + h ) )
Ty T y :y转换算子,用于将朝东西向位移量转化为经度变化量, Ty=180107πR0sin(90L107)=180107sec(L107)πR0 T y = 180 ∗ 10 7 π R 0 sin ⁡ ( 90 − L ∗ 10 − 7 ) = 180 ∗ 10 7 ∗ sec ⁡ ( L ∗ 10 − 7 ) π R 0 (同样假设在近地面飞行)
T T :时间间隔,单位:s
aN a N :朝北加速度,单位: m/t2 m / t 2
aE a E :朝东加速度,单位: m/t2 m / t 2
aD a D :朝地加速度,已做gravity corectify,即有加上重力常量g,单位: m/t2 m / t 2

f(x^,u)=L+vNTxTl+vETyThvDTvN+aNTvE+aETvD+aDT f ( x ^ , u ) = [ L + v N T x T l + v E T y T h − v D T v N + a N T v E + a E T v D + a D T ]

其中, x^=[LlhvNvEvD] x ^ = [ L l h v N v E v D ] u=[aNaEaD] u = [ a N a E a D ] .
由于状态的观测量可以由传感器直接获取到,所以 h h 的定义如下:
h(x^)=[LlhvNvEvD]

根据雅可比矩阵定义,计算得状态和观测矩阵如下:
Fk1=1180TvEsin(L107)πR0cos(L107)20000010000001000TxT001000180107TπR0cos(L107)001000T001 F k − 1 = [ 1 0 0 T x T 0 0 180 T v E sin ⁡ ( L ∗ 10 − 7 ) π R 0 cos ⁡ ( L ∗ 10 − 7 ) 2 1 0 0 180 ∗ 10 7 T π R 0 cos ⁡ ( L ∗ 10 − 7 ) 0 0 0 1 0 0 − T 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 ]

Hk=I6×6 H k = I 6 × 6


Matlab仿真效果
这里写图片描述
这里写图片描述

### 扩展卡尔曼滤波算法原理 扩展卡尔曼滤波(Extended Kalman Filter, EKF)作为卡尔曼滤波的种变体,专门针对非线性系统的状态估计问题进行了改进。在标准的卡尔曼滤波框架下,假设系统模型和测量模型都是线性的;而在实际情况中,许多物理过程表现出显著的非线性特征[^1]。 为了适应这些复杂情况,EKF通过泰勒级数展开的方式近似处理非线性函数,并在此基础上构建预测更新机制。具体来说: - **预测阶段**:利用当前时刻的状态向量 \( \hat{x}_{k|k} \) 和控制输入 \( u_k \),以及已知的过程噪声协方差矩阵 \( Q_k \),计算下时刻的状态预测值 \( \hat{x}_{k+1|k} \)[^2]。 ```matlab % 预测状态 F = jacobian(f, x); % 计算雅可比矩阵F (f为非线性运动方程) P_pred = F * P * F' + Q; % 更新先验误差协方差P_pred % 运动模型 f(x,u), 得到新的状态预测 x_pred = f(x, u); ``` - **校正/更新阶段**:当获得新观测数据后,使用该信息修正之前的预测结果。这步骤涉及到求解观测方程相对于真实状态变量的数即雅克比矩阵 H ,并据此调整估计值及其不确定性表示—误差协方差矩阵 P [^3]。 ```matlab % 测量更新 z_meas = h(x_true); % 获取实际测量z_meas (h为非线性观测方程) H = jacobian(h, x_pred); % 计算雅可比矩阵H S = H*P_pred*H'+R; % 创造创新协方差S (R为测量噪声协方差) K = P_pred*H'/inv(S); % 计算卡尔曼增益K e_z = z_meas - h(x_pred); % 计算残差e_z x_est = x_pred + K*e_z; % 更新后的状态估计x_est P = (eye(size(P))-K*H)*P_pred;% 更新后误差协方差P ``` 上述过程中涉及到了两个重要的数学工具——雅各布行列式(Jacobian Matrix),用来描述局部变化率关系;另个则是卡尔曼增益(Kalman Gain),决定了如何权衡来自不同源的信息以优化最终输出的质量[^4]。 ### 应用实例 考虑到GPS卫星定位中存在的多路径效应和其他干扰因素造成的信号失真现象,可以采用EKF来改善位置跟踪精度。通过对载体速度、加速度等参数建立合理的动力学模型,并结合接收机接收到的时间戳差异来进行距离测算,从而实现更精确的位置判定。 此外,在机器人领域内也广泛应用着此类技术,比如自主驾驶车辆依靠传感器融合完成环境感知任务时就需要依赖于高效的姿态估计算法支持,其中就包含了对轮速计、IMU性单元等多种异构传感设备所提供原始读数的有效整合与净化工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值