文章目錄
- 程序詳解
- 概述
- 系統架構
- 核心數學模型
- 性能評估
- 算法特點
- 運行結果
- MATLAB源代碼
程序詳解
概述
本代碼實現基于擴展卡爾曼濾波器(EKF)的二維組合導航系統,融合IMU(慣性測量單元)和GNSS(全球導航衛星系統)數據,實現精確的位置和速度估計。該系統采用8維誤差狀態模型,在圓形軌跡上進行仿真驗證。
系統架構
狀態向量定義
系統采用8維狀態向量:
x=[pxpyvxvyψbgbaxbay]\mathbf{x} = \begin{bmatrix} p_x \\ p_y \\ v_x \\ v_y \\ \psi \\ b_g \\ b_{ax} \\ b_{ay} \end{bmatrix}x=?px?py?vx?vy?ψbg?bax?bay???
其中:
- px,pyp_x, p_ypx?,py?:X、Y方向位置 (m)
- vx,vyv_x, v_yvx?,vy?:X、Y方向速度 (m/s)
- ψ\psiψ:航向角 (rad)
- bgb_gbg?:陀螺儀偏差 (rad/s)
- bax,bayb_{ax}, b_{ay}bax?,bay?:X、Y方向加速度計偏差 (m/s2)
觀測向量定義
觀測向量為2維GNSS位置觀測:
z=[pxpy]\mathbf{z} = \begin{bmatrix} p_x \\ p_y \end{bmatrix}z=[px?py??]
核心數學模型
狀態轉移方程
系統的非線性狀態轉移方程為:
xk+1=f(xk,uk,wk)\mathbf{x}_{k+1} = f(\mathbf{x}_k, \mathbf{u}_k, \mathbf{w}_k)xk+1?=f(xk?,uk?,wk?)
具體形式:
px,k+1=px,k+vx,k?Δtpy,k+1=py,k+vy,k?Δtvx,k+1=vx,k+(fx,k?bax,k)cos?ψk?(fy,k?bay,k)sin?ψk?Δtvy,k+1=vy,k+(fx,k?bax,k)sin?ψk+(fy,k?bay,k)cos?ψk?Δtψk+1=ψk+(ωk?bg,k)?Δtbg,k+1=bg,kbax,k+1=bax,kbay,k+1=bay,k\begin{aligned} p_{x,k+1} &= p_{x,k} + v_{x,k} \cdot \Delta t \\ p_{y,k+1} &= p_{y,k} + v_{y,k} \cdot \Delta t \\ v_{x,k+1} &= v_{x,k} + (f_{x,k} - b_{ax,k}) \cos\psi_k - (f_{y,k} - b_{ay,k}) \sin\psi_k \cdot \Delta t \\ v_{y,k+1} &= v_{y,k} + (f_{x,k} - b_{ax,k}) \sin\psi_k + (f_{y,k} - b_{ay,k}) \cos\psi_k \cdot \Delta t \\ \psi_{k+1} &= \psi_k + (\omega_k - b_{g,k}) \cdot \Delta t \\ b_{g,k+1} &= b_{g,k} \\ b_{ax,k+1} &= b_{ax,k} \\ b_{ay,k+1} &= b_{ay,k} \end{aligned}px,k+1?py,k+1?vx,k+1?vy,k+1?ψk+1?bg,k+1?bax,k+1?bay,k+1??=px,k?+vx,k??Δt=py,k?+vy,k??Δt=vx,k?+(fx,k??bax,k?)cosψk??(fy,k??bay,k?)sinψk??Δt=vy,k?+(fx,k??bax,k?)sinψk?+(fy,k??bay,k?)cosψk??Δt=ψk?+(ωk??bg,k?)?Δt=bg,k?=bax,k?=bay,k??
其中:
- fx,k,fy,kf_{x,k}, f_{y,k}fx,k?,fy,k?:IMU測量的比力 (m/s2)
- ωk\omega_kωk?:IMU測量的角速度 (rad/s)
- Δt\Delta tΔt:采樣時間間隔
狀態轉移雅可比矩陣
EKF需要計算狀態轉移函數的雅可比矩陣 F\mathbf{F}F:
F=?f?x∣xk∣k?1\mathbf{F} = \frac{\partial f}{\partial \mathbf{x}} \bigg|_{\mathbf{x}_{k|k-1}}F=?x?f??xk∣k?1??
主要的非零元素包括:
F1,3=F2,4=ΔtF3,5=?(fx?bax)sin?ψ?(fy?bay)cos?ψ?ΔtF4,5=(fx?bax)cos?ψ?(fy?bay)sin?ψ?ΔtF3,7=F4,8=?cos?ψ?ΔtF3,8=F4,7=sin?ψ?ΔtF5,6=?Δt\begin{aligned} F_{1,3} &= F_{2,4} = \Delta t \\ F_{3,5} &= -(f_x - b_{ax})\sin\psi - (f_y - b_{ay})\cos\psi \cdot \Delta t \\ F_{4,5} &= (f_x - b_{ax})\cos\psi - (f_y - b_{ay})\sin\psi \cdot \Delta t \\ F_{3,7} &= F_{4,8} = -\cos\psi \cdot \Delta t \\ F_{3,8} &= F_{4,7} = \sin\psi \cdot \Delta t \\ F_{5,6} &= -\Delta t \end{aligned}F1,3?F3,5?F4,5?F3,7?F3,8?F5,6??=F2,4?=Δt=?(fx??bax?)sinψ?(fy??bay?)cosψ?Δt=(fx??bax?)cosψ?(fy??bay?)sinψ?Δt=F4,8?=?cosψ?Δt=F4,7?=sinψ?Δt=?Δt?
觀測方程
觀測方程為線性的:
zk=Hxk+vk\mathbf{z}_k = \mathbf{H}\mathbf{x}_k + \mathbf{v}_kzk?=Hxk?+vk?
觀測雅可比矩陣 H\mathbf{H}H 為:
H=[1000000001000000]\mathbf{H} = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix}H=[10?01?00?00?00?00?00?00?]
噪聲模型
過程噪聲協方差矩陣Q:
Q=diag[(σaΔt2)2I2×2(σaΔt)2I2×2(σωΔt)2(σbgΔt)2(σbaΔt)2I2×2]\mathbf{Q} = \text{diag}\begin{bmatrix} (\sigma_{a} \Delta t^2)^2 \mathbf{I}_{2×2} \\ (\sigma_{a} \Delta t)^2 \mathbf{I}_{2×2} \\ (\sigma_{\omega} \Delta t)^2 \\ (\sigma_{bg} \Delta t)^2 \\ (\sigma_{ba} \Delta t)^2 \mathbf{I}_{2×2} \end{bmatrix}Q=diag?(σa?Δt2)2I2×2?(σa?Δt)2I2×2?(σω?Δt)2(σbg?Δt)2(σba?Δt)2I2×2???
其中:
- σa=0.01\sigma_a = 0.01σa?=0.01 m/s2:加速度計噪聲標準差
- σω=0.1°\sigma_{\omega} = 0.1°σω?=0.1° = 0.0017 rad/s:陀螺儀噪聲標準差
- σbg=0.01°\sigma_{bg} = 0.01°σbg?=0.01° = 0.00017 rad/s:陀螺儀偏差噪聲標準差
- σba=0.001\sigma_{ba} = 0.001σba?=0.001 m/s2:加速度計偏差噪聲標準差
觀測噪聲協方差矩陣R:
R=σgnss2I2×2\mathbf{R} = \sigma_{gnss}^2 \mathbf{I}_{2×2}R=σgnss2?I2×2?
其中 σgnss=3\sigma_{gnss} = 3σgnss?=3 m:GNSS位置觀測噪聲標準差
性能評估
系統通過以下指標評估濾波性能:
-
位置均方根誤差(RMSE):
RMSEpos=1N∑k=1N[(px,kest?px,ktrue)2+(py,kest?py,ktrue)2]\text{RMSE}_{pos} = \sqrt{\frac{1}{N}\sum_{k=1}^{N}[(p_{x,k}^{est} - p_{x,k}^{true})^2 + (p_{y,k}^{est} - p_{y,k}^{true})^2]}RMSEpos?=N1?k=1∑N?[(px,kest??px,ktrue?)2+(py,kest??py,ktrue?)2]? -
速度均方根誤差(RMSE):
RMSEvel=1N∑k=1N[(vx,kest?vx,ktrue)2+(vy,kest?vy,ktrue)2]\text{RMSE}_{vel} = \sqrt{\frac{1}{N}\sum_{k=1}^{N}[(v_{x,k}^{est} - v_{x,k}^{true})^2 + (v_{y,k}^{est} - v_{y,k}^{true})^2]}RMSEvel?=N1?k=1∑N?[(vx,kest??vx,ktrue?)2+(vy,kest??vy,ktrue?)2]?
算法特點
- 多傳感器融合:有效融合高頻IMU數據和低頻GNSS觀測
- 偏差估計:實時估計并補償陀螺儀和加速度計偏差
- 誤差狀態建模:采用誤差狀態方法提高線性化精度
- 實時性能:適合在線實時導航應用
該EKF組合導航算法在保持計算效率的同時,顯著提高了導航精度,特別是在GNSS信號中斷期間仍能保持較好的位置估計性能。
運行結果
軌跡對比:
各軸位移與速度曲線對比:
誤差對比:
命令行截圖:
MATLAB源代碼
部分代碼如下:
% 二維狀態量的EKF例程(有嚴格的組合導航推導)
% 基于8維誤差狀態模型:位置、速度、航向、航向角角速度偏差、加速度計偏差
% 基于2維的觀測模型:XY兩個軸的位置
% 作者:matlabfilter
% 2025-08-27/Ver1clear; clc; close all;
rng(0); % 固定隨機種子%% 系統參數設置
dt = 0.1; % 采樣時間間隔 (s)
total_time = 100; % 總仿真時間 (s)
N = total_time / dt; % 采樣點數%% 噪聲參數設置
% IMU噪聲參數
gyro_noise_std = 0.1 * pi/180; % 陀螺噪聲標準差 (rad/s)
accel_noise_std = 0.01; % 加速度計噪聲標準差 (m/s^2)
gyro_bias_std = 0.01 * pi/180; % 陀螺偏差標準差 (rad/s)
accel_bias_std = 0.001; % 加速度計偏差標準差 (m/s^2)% GNSS觀測噪聲
gnss_pos_noise_std = 3; % GNSS位置噪聲標準差 (m)%% 過程噪聲協方差矩陣Q (8×8)
% 狀態順序:[位置(2), 速度(2), 航向角(1), 航向角角速度偏差(1), 加速度計偏差(2)]
Q = zeros(8, 8);
% 位置噪聲(通過速度積分產生)
Q(1:2, 1:2) = eye(2) * (accel_noise_std * dt^2)^2;
% 速度噪聲
Q(3:4, 3:4) = eye(2) * (accel_noise_std * dt)^2;
% 姿態噪聲
Q(5, 5) = eye(1) * (gyro_noise_std * dt)^2;
% 陀螺偏差噪聲
Q(6, 6) = eye(1) * (gyro_bias_std * dt)^2;
% 加速度計偏差噪聲
Q(7:8, 7:8) = eye(2) * (accel_bias_std * dt)^2;
代碼下載鏈接:
https://download.csdn.net/download/callmeup/91800451
如需幫助,或有導航、定位濾波相關的代碼定制需求,請點擊下方卡片聯系作者