👨🎓个人主页
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
基于不变扩展卡尔曼滤波器(IEKF)的传感器融合状态估计研究综述
💥1 概述
摘要:随着微型飞行器(MA Vs)变得越来越便宜和普遍,它们在复杂的城市环境中的使用将变得更加可取,如检查、监控和交付。这些环境的导航需要比传统GNSS系统提供的更高的位置精度。虽然MA v通常包含惯性测量单元(imu),但其基于积分的状态估计容易随时间漂移。我们探索了传感器融合的使用,以结合这些互补的传感器。在这个项目中,我们使用不变扩展卡尔曼滤波器(InEKF)来估计MAV在具有挑战性的城市环境中的位置。我们通过将估计位置与地面真相数据集进行比较来评估我们的结果。
基于不变扩展卡尔曼滤波器(IEKF)的传感器融合状态估计研究综述
1. 不变扩展卡尔曼滤波器(IEKF)的基本原理
IEKF是扩展卡尔曼滤波器(EKF)的一种改进形式,其核心在于利用系统的对称性(或不变性)进行状态估计,尤其适用于非线性系统。IEKF通过以下特性区别于传统方法:
- 李群(Lie Group)框架:IEKF通常在李群(如SE(3)、SO(3))上建模状态空间,将平移和旋转统一表示,避免欧拉角的奇异性问题。例如,在无人机姿态估计中,状态量可表示为李群元素,保持几何结构不变性。
- 误差动力学的不变性:IEKF的误差动力学方程独立于系统状态,仅依赖于误差本身,从而在更广泛的轨迹集上保持收敛性。这种特性通过线性化误差的对数形式实现,例如使用李代数(Lie Algebra)描述误差演化。
- 改进的线性化策略:传统EKF通过一阶泰勒展开线性化非线性模型,而IEKF通过迭代优化线性化点(如基于不变输出误差)减少线性化误差,提升估计精度。
2. 传感器融合的核心方法与IEKF的融合策略
多传感器融合需处理多源数据的不确定性和冗余性,IEKF在此过程中通过以下方法发挥作用:
- 动态与静态环境适应性:IEKF结合卡尔曼滤波的动态数据处理优势(实时性好)和不变性特性(几何结构保持),适用于动态环境(如无人机飞行)和静态场景(如SLAM)。
- 两步融合流程:
- 预测步骤:基于系统动力学模型(如Frenet-Serret参数驱动的目标运动模型)预测状态。
- 更新步骤:通过传感器测量(如GPS、IMU、LiDAR)校正预测状态,使用不变误差项更新卡尔曼增益。
- 多模态数据整合:例如在自动驾驶中融合GNSS(全局定位)、IMU(局部运动)和视觉数据(环境感知),通过IEKF的几何约束减少坐标转换误差。
3. IEKF与传统EKF的区别及优势
特性 | IEKF | 传统EKF |
---|---|---|
线性化方法 | 基于不变误差的几何线性化,减少模型线性化误差 | 一阶泰勒展开,误差随非线性强度增大 |
误差动力学 | 误差方程与状态无关,收敛区域更广 | 依赖当前状态估计,易在非线性场景下发散 |
计算稳定性 | 李群结构避免奇异性,协方差矩阵更新更稳定 | 四元数或欧拉角可能导致奇异性问题 |
应用场景 | 高动态、强非线性系统(如无人机姿态估计、水下导航) | 中低非线性系统(如车辆定位) |
优势总结:
- 精度提升:迭代更新与不变误差设计显著降低线性化误差,例如在大初始偏差条件下,IEKF的均方误差比EKF降低30%以上。
- 鲁棒性增强:在传感器噪声或模型失配时,IEKF的协方差矩阵收敛更快,避免滤波器发散。
- 几何一致性:李群表示保持旋转和平移的几何约束,减少SLAM中的累积漂移。
4. IEKF在传感器融合中的实现案例
- 无人机风速估计:
使用IEKF融合IMU、气压计和GPS数据,通过SE(3)群建模无人机动力学,在非加速螺旋飞行中,风速估计误差比EKF降低约20%。 - 自动驾驶定位:
在LiDAR-IMU-GNSS融合中,IEKF通过滑动窗口优化和不变性更新,实现亚米级定位精度,尤其在城市复杂场景中表现优于传统EKF。 - 水下航行器导航:
基于SE(3)群的IEKF融合声呐、DVL(多普勒测速仪)和惯性数据,在强水流干扰下,位置估计误差较EKF减少15%。 - 列车定位系统:
结合CNN-LSTM-IEKF框架,处理GNSS信号中断时的惯性数据,定位精度在隧道环境中提升40%。
5. 研究文献综述与前沿进展
- 理论发展:Bonnabel等人首次提出IEKF,应用于飞行器姿态估计,验证了其对称性保持特性。后续研究扩展至视觉SLAM和组合导航,证明IEKF在非线性系统下的全局收敛性。
- 算法改进:部分IEKF(PIEKF)通过仅优化旋转状态降低计算复杂度,适用于实时性要求高的场景。基于协方差调节的变体(如自适应IEKF)进一步提升噪声鲁棒性。
- 跨领域应用:从传统的机器人导航扩展至航天器姿态控制、高动态事件相机融合等新兴领域。
6. 挑战与未来方向
- 计算效率:IEKF的迭代过程可能增加计算负担,需结合稀疏优化或硬件加速。
- 多传感器标定:时间同步与外参标定的误差对IEKF性能影响显著,需发展自适应标定算法。
- 理论验证:现有研究多基于仿真或小规模实验,需在复杂真实环境(如城市峡谷、深海)中验证鲁棒性。
结论
不变扩展卡尔曼滤波器通过结合李群几何结构与迭代优化策略,在多传感器融合状态估计中展现出显著优势。其在无人机、自动驾驶、水下导航等领域的成功应用证明了其在处理非线性、高动态系统时的潜力。未来研究需进一步解决计算复杂性和实际部署中的标定问题,推动IEKF在更广泛工业场景中的应用。
📚2 运行结果
部分代码:
results = zeros(7, numSteps);
% time x y z Rx Ry Rz
% sys = system_initialization(deltaT);
Q = blkdiag(eye(3)*(0.35)^2, eye(3)*(0.015)^2, zeros(3));
%IMU noise characteristics
%Using default values from pixhawk px4 controller
%https://dev.px4.io/v1.9.0/en/advanced/parameter_reference.html
%accel: first three values, (m/s^2)^2
%gyro: next three values, (rad/s)^2
filter = filter_initialization(initialStateMean, initialStateCov, Q);
%IMU noise? do in filter initialization
IMUIdx = 1;
GPSIdx = 1;
nextIMU = IMUData(IMUIdx, :); %first IMU measurement
nextGPS = GPSData(GPSIdx, :); %first GPS measurement
%plot ground truth, raw GPS data
% plot ground truth positions
plot3(gt(:,2), gt(:,3), gt(:,4), '.g')
grid on
hold on
% plot gps positions
% plot3(GPSData(:,2), GPSData(:,3), GPSData(:,4), '.b')
axis equal
axis vis3d
counter = 0;
MAXIGPS = 2708;
MAXIIMU = 27050;
isStart = false;
for t = 1:numSteps
currT = t * deltaT;
if(currT >= nextIMU(1)) %if the next IMU measurement has happened
% disp('prediction')
filter.prediction(nextIMU(2:7));
isStart = true;
IMUIdx = IMUIdx + 1;
nextIMU = IMUData(IMUIdx, :);
% plot3(filter.mu(1, 5), filter.mu(2, 5), filter.mu(3, 5), 'or');
end
if(currT >= nextGPS(1) & isStart) %if the next GPS measurement has happened
% disp('correction')
counter = counter + 1;
filter.correction(nextGPS(2:4));
GPSIdx = GPSIdx + 1;
nextGPS = GPSData(GPSIdx, :);
plot3(nextGPS(2), nextGPS(3), nextGPS(4), '.r');
% plot3(filter.mu(1, 5), filter.mu(2, 5), filter.mu(3, 5), 'ok');
% plotPose(filter.mu(1:3, 1:3), filter.mu(1:3, 5), filter.mu(1:3,4));
end
results(1, t) = currT;
results(2:4, t) = filter.mu(1:3, 5); %just position so far
% plot3(results(2, t), results(3, t), results(4, t), 'or');
% disp(filter.mu(1:3, 1:3));
if pauseLen == inf
pause;
elseif pauseLen > 0
pause(pauseLen);
end
if IMUIdx >= MAXIIMU || GPSIdx >= MAXIGPS
break
end
end
plot3(results(2,:), results(3,:), results(4,:), '.b');
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。