代码实现:GNSS/SINS组合导航系统的卡尔曼滤波仿真,用于估计载体的位置(经纬高)、速度和姿态角。
本例程通过高频 SINS 机械编排与低频 GNSS 校正相结合,实现对平台经纬度、海拔、速度和姿态的连续估计。
程序介绍
-
初始化
- 设定采样间隔 Δ t \Delta t Δt、仿真时长、地球模型参数(长半轴 a a a、偏心率 e e e、自转角速度 ω e \omega_e ωe)。
- 初始状态向量包含:
[ φ , λ , h , v E , v N , v U , ϕ , θ , ψ , b g , b a ] T \,[\varphi,\lambda,h,v_E,v_N,v_U,\phi,\theta,\psi,\mathbf{b}_g,\mathbf{b}_a]^T [φ,λ,h,vE,vN,vU,ϕ,θ,ψ,bg,ba]T,
分别为经纬度、高程、东北天速度、横滚俯仰偏航和 IMU 偏置。
-
SINS机械编排预测
-
姿态更新(简化积分):
ϕ k + 1 = ϕ k + ( ω meas − ω n ) Δ t . \boldsymbol{\phi}_{k+1} = \boldsymbol{\phi}_k + \bigl(\boldsymbol{\omega}_\text{meas}-\boldsymbol{\omega}_{n}\bigr)\,\Delta t. ϕk+1=ϕk+(ωmeas−ωn)Δt.
-
速度更新(导航系积分):
v k + 1 = v k + ( C b n f meas + g ) Δ t . \mathbf{v}_{k+1} = \mathbf{v}_k + \bigl(\mathbf{C}_{b}^{n}\,\mathbf{f}_\text{meas} + \mathbf{g}\bigr)\,\Delta t. vk+1=vk+(Cbnfmeas+g)Δt.
-
位置更新(曲率投影):
φ k + 1 = φ k + v N R M + h Δ t , λ k + 1 = λ k + v E ( R N + h ) cos φ Δ t . \varphi_{k+1} = \varphi_k + \frac{v_N}{R_M+h}\,\Delta t,\quad \lambda_{k+1} = \lambda_k + \frac{v_E}{(R_N+h)\cos\varphi}\,\Delta t. φk+1=φk+RM+hvNΔt,λk+1=λk+(RN+h)cosφvEΔt.
-
-
卡尔曼滤波融合
-
预测:
x ^ k − = f ( x ^ k − 1 ) , P k − = F P k − 1 F T + Q . \hat{\mathbf{x}}^-_k = f\bigl(\hat{\mathbf{x}}_{k-1}\bigr),\quad P^-_k = F\,P_{k-1}\,F^T + Q. x^k−=f(x^k−1),Pk−=FPk−1FT+Q.
-
更新(每秒一次 GNSS):
K = P k − H T ( H P k − H T + R ) − 1 , x ^ k = x ^ k − + K ( z − H x ^ k − ) . K = P^-_k H^T\,(H\,P^-_k H^T + R)^{-1},\quad \hat{\mathbf{x}}_k = \hat{\mathbf{x}}^-_k + K\,(z - H\,\hat{\mathbf{x}}^-_k). K=Pk−HT(HPk−HT+R)−1,x^k=x^k−+K(z−Hx^k−).
-
运行结果
- 用圆周运动叠加高度波动模拟真实轨迹,生成对应 IMU/GNSS 观测。
- 保存并绘制经纬度、高度、速度和姿态随时间的变化,以及二维/三维轨迹。
三轴状态值曲线
角度和速度曲线
二维轨迹曲线(经度和纬度)
三维轨迹曲线
完整代码:
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者