【MATLAB例程】3D雷达-IMU融合定位系统(基于扩展卡尔曼滤波)|雷达观测距离、俯仰角、方向角,IMU包括6维(加速度与角速度)。附下载链接

本文给出三维空间中雷达与IMU(惯性测量单元)数据融合的MATLAB仿真程序,采用扩展卡尔曼滤波(EKF) 实现高精度位置、速度和姿态估计。
原创程序,非AI生成,带中文注释,可定制、讲解

文章目录

程序详解

核心功能

  • 雷达测量 :提供极坐标观测数据
    • 距离(r)
    • 俯仰角(elevation)
    • 方位角(azimuth)
  • IMU测量 :6自由度惯性数据
    • 三轴加速度
    • 三轴角速度

系统估计10维状态向量:

  • 位置(3维):p = [x, y, z]ᵀ
  • 速度(3维):v = [vₓ, vᵧ, vᵤ]ᵀ
  • 姿态四元数(4维):q = [q₀, q₁, q₂, q₃]ᵀ

核心数学模型

  1. 状态方程(预测模型)

位置更新

复制代码
p(k+1) = p(k) + v(k)·Δt + 0.5·a_nav·Δt²

速度更新

复制代码
v(k+1) = v(k) + a_nav·Δt

其中,导航系加速度通过IMU比力转换:

复制代码
a_nav = R_nb · f_b + g
  • R_nb:体坐标系到导航系的旋转矩阵(由四元数计算)
  • f_b:IMU测量的比力(体轴加速度)
  • g:重力加速度向量 [0, 0, -9.81]ᵀ

姿态更新(四元数):

复制代码
q(k+1) = q(k) ⊗ Δq
Δq = [1; 0.5·ω_b·Δt]  (小角度近似)
  • ω_b:IMU测量的角速度
  • :四元数乘法
  1. 四元数到旋转矩阵

    R_nb(q) = [q₀²+q₁²-q₂²-q₃² 2(q₁q₂-q₀q₃) 2(q₁q₃+q₀q₂) ]
    [2(q₁q₂+q₀q₃) q₀²-q₁²+q₂²-q₃² 2(q₂q₃-q₀q₁) ]
    [2(q₁q₃-q₀q₂) 2(q₂q₃+q₀q₁) q₀²-q₁²-q₂²+q₃²]

  2. 雷达观测方程

极坐标观测模型

复制代码
z = [r  ]   =  [||p - p_radar||                    ]
    [el ]      [atan2(dz, √(dx² + dy²))           ]
    [az ]      [atan2(dy, dx)                     ]

其中:

  • [dx, dy, dz]ᵀ = p - p_radar(目标相对雷达的位置差)
  • r:斜距
  • el:俯仰角
  • az:方位角

观测雅可比矩阵 H(3×10):

对位置的偏导数:

复制代码
∂r/∂p  = [dx, dy, dz] / r

∂el/∂p = [-dx·dz/(r²·ρ), -dy·dz/(r²·ρ), ρ/r²]

∂az/∂p = [-dy/ρ², dx/ρ², 0]

其中 ρ = √(dx² + dy²)

对速度和姿态的偏导数为0。

  1. EKF递推公式

预测步

复制代码
x̂⁻(k) = f(x̂⁺(k-1), u(k))
P⁻(k) = F(k)·P⁺(k-1)·F(k)ᵀ + Q

更新步

复制代码
K(k) = P⁻(k)·H(k)ᵀ·[H(k)·P⁻(k)·H(k)ᵀ + R]⁻¹
x̂⁺(k) = x̂⁻(k) + K(k)·[z(k) - h(x̂⁻(k))]
P⁺(k) = [I - K(k)·H(k)]·P⁻(k)

其中:

  • F:状态转移雅可比矩阵(通过有限差分计算)
  • H:观测雅可比矩阵
  • Q:过程噪声协方差
  • R:测量噪声协方差
  • K:卡尔曼增益
  1. 噪声参数

    Q = diag([Qₚ, Qᵥ, Qᵩ]) (过程噪声)
    R = diag([σᵣ², σₑₗ², σₐᵤ²]) (测量噪声)

运行结果

真实轨迹、雷达跟测的轨迹、INS推算轨迹、滤波后的轨迹,对比图:

三维状态,分别显示的曲线:

位置误差输出:

结果:

MATLAB源代码

完整代码如下:

matlab 复制代码
% 三维空间中,雷达数据与IMU的融合,雷达观测距离、俯仰角、方向角,IMU包括6维(加速度与角速度)
% 3D 雷达(r,el,az) + IMU(3 acc, 3 gyro) 融合 - EKF (位置、速度、四元数)

% 作者:matlabfilter(V同号),接定位与导航、滤波相关的matlab代码定制
% 2025-11-25/Ver1

clear; close all; clc;
rng(0);

%% 仿真参数
dt = 0.1;
N = 200;
g = [0; 0; -9.81];   % 重力 (导航系:z向上为正则用 [0;0;-9.81])

%% 初始真值(目标运动与姿态)
true_p = [0; 0; 0];           % 初始位置 m
true_v = [1; 0; 0.5];        % 初始速度 m/s
% 初始姿态(单位四元数 [q0; qv],这里设为无旋转)
true_q = [1; 0; 0; 0];

% 给定目标加速度(惯性系)与角速度(体轴)时间序列(可自行修改)
% 这里做个简单示例:恒定小加速度和缓慢偏航
acc_inertial = repmat([0.1; 0.2; 0.0], 1, N);    % 真值惯性加速度(仅用于生成真轨迹)
angvel_body = repmat([0; 0; 0.01], 1, N);      % 真值角速度(rad/s)

%% 雷达位置(固定)
radar_pos = [50; 100; 10];

%% 传感器噪声
sigma_acc = 0.05;      % m/s^2 (加速度传感器噪声标准差)
sigma_gyro = 0.005;    % rad/s (陀螺噪声)
sigma_r = 1.0;         % 测距误差,米
sigma_el = 0.01;       % 俯仰角观测误差,弧度
sigma_az = 0.01;       % 方位角观测误差,弧度

%% EKF 初值:状态与协方差
% 状态 x = [p(3); v(3); q(4)]
x_est = [true_p + [1; -1; 0.5];   % 初位置有偏差
         true_v + [0.5; -0.5; 0];
         1; 0; 0; 0];             % 初四元数(单位)
P = diag([1,1,1, 1,1,1, 0.01,0.01,0.01,0.01]);

%% 过程噪声协方差 Q(设计)
% 过程 Q 对应位置/速度/姿态不确定性,依据 IMU 噪声近似构造
Qp = 0.1 * eye(3);
Qv = 0.5 * eye(3);
Qq = 1e-4 * eye(4);
Q = blkdiag(Qp, Qv, Qq);

%% 测量噪声 R (r,el,az)
R = diag([sigma_r^2, sigma_el^2, sigma_az^2]);

%% 存储
true_ps = zeros(N,3);
est_ps = zeros(N,3);
imu_dead_ps = zeros(N,3);  % 仅IMU死推
meas_ps = zeros(N,3);      % 雷达转换后的点 (用于绘图)

%% 便捷函数:四元数乘法、四元数到旋转矩阵
quat_mul = @(q1,q2) [ q1(1)*q2(1) - q1(2:4)'*q2(2:4);
                      q1(1)*q2(2:4) + q2(1)*q1(2:4) + cross(q1(2:4), q2(2:4)) ];

quat_to_rotm = @(q) ( ...
    [ q(1)^2+q(2)^2-q(3)^2-q(4)^2, 2*(q(2)*q(3)-q(1)*q(4)),     2*(q(2)*q(4)+q(1)*q(3));
      2*(q(2)*q(3)+q(1)*q(4)),     q(1)^2-q(2)^2+q(3)^2-q(4)^2, 2*(q(3)*q(4)-q(1)*q(2));
      2*(q(2)*q(4)-q(1)*q(3)),     2*(q(3)*q(4)+q(1)*q(2)),     q(1)^2-q(2)^2-q(3)^2+q(4)^2 ] );

完整代码:
https://download.csdn.net/download/callmeup/92410348

或:

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

相关推荐
毕设源码柳学姐1 小时前
计算机毕设 java 智慧社区服务系统 SSM 框架社区生活平台 Java 开发的便民服务与互动系统
java·开发语言·生活
陈奕昆1 小时前
n8n实战营Day3:电商订单全流程自动化·需求分析与流程拆解
大数据·开发语言·人工智能·自动化·需求分析·n8n
5***V9331 小时前
MacOS升级ruby版本
开发语言·macos·ruby
星释1 小时前
Rust 练习册 96:Rectangles与几何计算
开发语言·后端·rust
JienDa1 小时前
JienDa聊PHP:电商实战中主流PHP框架的协同策略与架构优化
开发语言·架构·php
Tongfront1 小时前
前端通用submit方法
开发语言·前端·javascript·react
JienDa1 小时前
JienDa聊PHP:起卦、卜卦平台实战中PHP框架的协同架构方略
开发语言·架构·php
Le1Yu1 小时前
订单优化(状态机、分库分表、覆盖索引、缓存优化查询)
java·开发语言·数据库
豆豆plus1 小时前
C++实现文件操作类
开发语言·c++