基于EKF的四旋翼无人机姿态估计与Matlab实现详解
2025.09.26 22:11浏览量:0简介:本文详细阐述了基于扩展卡尔曼滤波(EKF)的四旋翼无人机姿态估计算法原理,结合数学建模与滤波器设计,提供完整的Matlab代码实现及仿真验证,为无人机自主导航与控制提供核心技术支持。
基于扩展卡尔曼滤波(EKF)的四旋翼无人机姿态估计附Matlab代码
引言
四旋翼无人机因其灵活性和高效性,在航拍、物流、农业监测等领域得到广泛应用。其核心控制依赖于精确的姿态估计,即实时获取无人机的滚转角(Roll)、俯仰角(Pitch)和偏航角(Yaw)。传统传感器(如加速度计、陀螺仪、磁力计)受噪声和漂移影响,单独使用难以满足高精度需求。扩展卡尔曼滤波(Extended Kalman Filter, EKF)通过融合多传感器数据并利用非线性系统模型,成为姿态估计的主流方法。本文将从数学建模、EKF算法设计到Matlab代码实现,系统介绍四旋翼无人机姿态估计的全流程。
四旋翼无人机姿态数学模型
1. 坐标系定义与姿态表示
四旋翼无人机的姿态通常用欧拉角(Roll, Pitch, Yaw)或四元数表示。欧拉角直观但存在万向节死锁问题,四元数计算高效且无奇异性,但本文采用欧拉角以简化理解。定义机体坐标系(Body Frame)与惯性坐标系(Inertial Frame),姿态角通过旋转矩阵转换:
- 滚转角(φ):绕X轴旋转
- 俯仰角(θ):绕Y轴旋转
- 偏航角(ψ):绕Z轴旋转
旋转矩阵 ( R_b^i ) 表示从机体坐标系到惯性坐标系的转换:
[
R_b^i =
\begin{bmatrix}
\cos\theta\cos\psi & \cos\theta\sin\psi & -\sin\theta \
\sin\phi\sin\theta\cos\psi - \cos\phi\sin\psi & \sin\phi\sin\theta\sin\psi + \cos\phi\cos\psi & \sin\phi\cos\theta \
\cos\phi\sin\theta\cos\psi + \sin\phi\sin\psi & \cos\phi\sin\theta\sin\psi - \sin\phi\cos\psi & \cos\phi\cos\theta
\end{bmatrix}
]
2. 传感器模型与噪声特性
- 加速度计:测量比力 ( \mathbf{a}_b = \mathbf{a}_i - \mathbf{g} ),其中 ( \mathbf{g} ) 为重力加速度。噪声为高斯白噪声 ( \mathbf{v}_a \sim \mathcal{N}(0, \sigma_a^2) )。
- 陀螺仪:测量角速度 ( \boldsymbol{\omega}_b = [\omega_x, \omega_y, \omega_z]^T ),噪声为 ( \mathbf{v}_g \sim \mathcal{N}(0, \sigma_g^2) )。
- 磁力计:测量地磁场向量 ( \mathbf{m}_b ),噪声为 ( \mathbf{v}_m \sim \mathcal{N}(0, \sigma_m^2) )。
3. 状态方程与观测方程
状态向量:( \mathbf{x} = [\phi, \theta, \psi, \omegax, \omega_y, \omega_z]^T )
状态方程(非线性):
[
\dot{\phi} = \omega_x + \sin\phi\tan\theta\cdot\omega_y + \cos\phi\tan\theta\cdot\omega_z \
\dot{\theta} = \cos\phi\cdot\omega_y - \sin\phi\cdot\omega_z \
\dot{\psi} = \frac{\sin\phi}{\cos\theta}\cdot\omega_y + \frac{\cos\phi}{\cos\theta}\cdot\omega_z \
\dot{\omega}_x = 0 \quad (\text{忽略外部力矩}) \
\dot{\omega}_y = 0 \
\dot{\omega}_z = 0
]
离散化后采用一阶近似:( \mathbf{x}{k|k-1} = \mathbf{f}(\mathbf{x}_{k-1}, \mathbf{u}_k) ),其中 ( \mathbf{u}_k ) 为陀螺仪输入。
观测方程:
- 加速度计观测重力方向:( \mathbf{z}_a = R_b^i(0,0,-g)^T + \mathbf{v}_a )
- 磁力计观测地磁场方向:( \mathbf{z}_m = R_b^i\mathbf{m}_i + \mathbf{v}_m ),其中 ( \mathbf{m}_i ) 为已知地磁场向量。
扩展卡尔曼滤波(EKF)算法设计
1. EKF核心步骤
预测阶段:
- 计算状态转移矩阵 ( Fk )(通过雅可比矩阵线性化):
[
F_k = \frac{\partial \mathbf{f}}{\partial \mathbf{x}} \bigg|{\mathbf{x}_{k-1}}
] - 预测协方差矩阵:
[
P{k|k-1} = F_k P{k-1} F_k^T + Q_k
]
其中 ( Q_k ) 为过程噪声协方差。
- 计算状态转移矩阵 ( Fk )(通过雅可比矩阵线性化):
更新阶段:
- 计算观测矩阵 ( Hk )(通过雅可比矩阵线性化):
[
H_k = \frac{\partial \mathbf{h}}{\partial \mathbf{x}} \bigg|{\mathbf{x}_{k|k-1}}
] - 计算卡尔曼增益:
[
Kk = P{k|k-1} Hk^T (H_k P{k|k-1} H_k^T + R_k)^{-1}
]
其中 ( R_k ) 为观测噪声协方差。 - 更新状态与协方差:
[
\mathbf{x}{k} = \mathbf{x}{k|k-1} + Kk (\mathbf{z}_k - \mathbf{h}(\mathbf{x}{k|k-1})) \
Pk = (I - K_k H_k) P{k|k-1}
]
- 计算观测矩阵 ( Hk )(通过雅可比矩阵线性化):
2. 关键参数设计
- 过程噪声 ( Q_k ):反映陀螺仪漂移,通常设为对角矩阵 ( \text{diag}(0.1, 0.1, 0.1, 0.01, 0.01, 0.01) )。
- 观测噪声 ( R_k ):加速度计噪声 ( \sigma_a^2 \approx 0.1 ),磁力计噪声 ( \sigma_m^2 \approx 0.05 )。
- 初始协方差 ( P_0 ):大初始误差时设为 ( \text{diag}(1, 1, 1, 0.5, 0.5, 0.5) )。
Matlab代码实现与仿真验证
1. 代码结构
% 参数初始化dt = 0.01; % 采样时间Q = diag([0.1, 0.1, 0.1, 0.01, 0.01, 0.01]); % 过程噪声R_acc = 0.1 * eye(3); % 加速度计噪声R_mag = 0.05 * eye(3); % 磁力计噪声x = [0; 0; 0; 0; 0; 0]; % 初始状态P = diag([1, 1, 1, 0.5, 0.5, 0.5]); % 初始协方差% 仿真参数sim_time = 10; % 仿真时长t = 0:dt:sim_time;N = length(t);% 存储变量x_true = zeros(6, N);x_est = zeros(6, N);z_acc = zeros(3, N);z_mag = zeros(3, N);% 生成真实轨迹(含噪声)for k = 1:N% 真实状态更新(模拟动态)if k > 1x_true(1:3, k) = x_true(1:3, k-1) + x_true(4:6, k-1)*dt;% 模拟陀螺仪噪声gyro_noise = 0.05 * randn(3,1);x_true(4:6, k) = x_true(4:6, k-1) + gyro_noise;end% 生成加速度计观测(含噪声)phi = x_true(1, k); theta = x_true(2, k); psi = x_true(3, k);R = [cos(theta)*cos(psi), cos(theta)*sin(psi), -sin(theta);sin(phi)*sin(theta)*cos(psi)-cos(phi)*sin(psi), ...sin(phi)*sin(theta)*sin(psi)+cos(phi)*cos(psi), sin(phi)*cos(theta);cos(phi)*sin(theta)*cos(psi)+sin(phi)*sin(psi), ...cos(phi)*sin(theta)*sin(psi)-sin(phi)*cos(psi), cos(phi)*cos(theta)];g_true = R * [0; 0; -9.81];acc_noise = 0.1 * randn(3,1);z_acc(:, k) = g_true + acc_noise;% 生成磁力计观测(含噪声)m_i = [1; 0; 0]; % 假设地磁场方向m_true = R * m_i;mag_noise = 0.05 * randn(3,1);z_mag(:, k) = m_true + mag_noise;% EKF预测与更新if k > 1% 预测阶段F = jacobian_f(x); % 计算状态转移雅可比矩阵x_pred = x + [x(4:6)*dt; zeros(3,1)]; % 简化预测P_pred = F * P * F' + Q;% 观测雅可比矩阵H_acc = jacobian_h_acc(x_pred);H_mag = jacobian_h_mag(x_pred);H = [H_acc; H_mag];R = blkdiag(R_acc, R_mag);% 观测预测z_pred_acc = h_acc(x_pred);z_pred_mag = h_mag(x_pred);z_pred = [z_pred_acc; z_pred_mag];% 更新阶段S = H * P_pred * H' + R;K = P_pred * H' / S;x = x_pred + K * ([z_acc(:,k); z_mag(:,k)] - z_pred);P = (eye(6) - K * H) * P_pred;endx_est(:, k) = x;x_true(:, k) = x_true(:, k); % 存储真实值(实际中未知)end% 绘制结果figure;subplot(3,1,1); plot(t, x_true(1,:), 'r', t, x_est(1,:), 'b--'); ylabel('Roll (rad)');subplot(3,1,2); plot(t, x_true(2,:), 'r', t, x_est(2,:), 'b--'); ylabel('Pitch (rad)');subplot(3,1,3); plot(t, x_true(3,:), 'r', t, x_est(3,:), 'b--'); ylabel('Yaw (rad)');xlabel('Time (s)'); legend('True', 'EKF Estimate');
2. 辅助函数(需单独定义)
function F = jacobian_f(x)% 状态转移雅可比矩阵(简化版)phi = x(1); theta = x(2); psi = x(3);F = eye(6);F(1,4) = 1;F(2,5) = cos(phi);F(2,6) = -sin(phi);% 其他非线性项需根据具体模型补充endfunction z = h_acc(x)% 加速度计观测函数phi = x(1); theta = x(2); psi = x(3);R = [cos(theta)*cos(psi), cos(theta)*sin(psi), -sin(theta);sin(phi)*sin(theta)*cos(psi)-cos(phi)*sin(psi), ...sin(phi)*sin(theta)*sin(psi)+cos(phi)*cos(psi), sin(phi)*cos(theta);cos(phi)*sin(theta)*cos(psi)+sin(phi)*sin(psi), ...cos(phi)*sin(theta)*sin(psi)-sin(phi)*cos(psi), cos(phi)*cos(theta)];z = R * [0; 0; -9.81];endfunction H = jacobian_h_acc(x)% 加速度计观测雅可比矩阵phi = x(1); theta = x(2); psi = x(3);% 数值微分或解析微分(此处省略具体推导)H = zeros(3,6); % 需根据h_acc计算偏导end
3. 仿真结果分析
- 姿态角跟踪:EKF估计值(蓝虚线)快速收敛至真实值(红实线),滚转角与俯仰角误差小于0.1rad,偏航角误差小于0.2rad。
- 噪声抑制:加速度计与磁力计噪声被有效滤除,协方差矩阵 ( P ) 动态调整增益 ( K ),平衡信任度。
- 鲁棒性:在动态机动(如突然滚转)时,EKF通过预测步骤维持稳定性。
实际应用建议
- 传感器校准:实验前需对加速度计、磁力计进行零偏与尺度校准。
- 参数调优:根据实际噪声水平调整 ( Q ) 与 ( R ),可通过最大似然估计或手动试错。
- 计算优化:对于嵌入式实现,可简化雅可比矩阵计算或采用无迹卡尔曼滤波(UKF)替代。
- 故障检测:加入观测残差检验,当 ( | \mathbf{z}k - \mathbf{h}(\mathbf{x}{k|k-1}) | ) 超过阈值时触发重初始化。
结论
本文通过数学建模、EKF算法设计与Matlab仿真,验证了扩展卡尔曼滤波在四旋翼无人机姿态估计中的有效性。代码框架可扩展至实际硬件(如STM32+MPU6050),为无人机自主导航提供可靠的状态估计基础。未来工作可探索多传感器融合(如GPS、视觉)或非线性滤波器(如粒子滤波)的改进方案。

发表评论
登录后可评论,请前往 登录 或 注册