【IMU数据与GPS融合的预积分方法】基于流形的IMU预积分,用于高效的视觉惯性最大后验估计、SE3姿势区分为IMU(Matlab代码实现)

发布时间:2026/7/22 16:35:24
【IMU数据与GPS融合的预积分方法】基于流形的IMU预积分,用于高效的视觉惯性最大后验估计、SE3姿势区分为IMU(Matlab代码实现) 欢迎来到本博客❤️❤️博主优势博客内容尽量做到思维缜密逻辑清晰为了方便读者。⛳️座右铭行百里者半于九十。本文目录如下目录⛳️赠与读者1 概述2 运行结果3 参考文献4 Matlab代码、文章下载⛳️赠与读者‍做科研涉及到一个深在的思想系统需要科研者逻辑缜密踏实认真但是不能只是努力很多时候借力比努力更重要然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学什么是电的时候不要觉得这些问题搞笑。哲学是科学之母哲学就是追究终极问题寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览免得骤然跌入幽暗的迷宫找不到来时的路它不足为你揭示全部问题的答案但若能让人胸中升起一朵朵疑云也未尝不会酿成晚霞斑斓的别一番景致万一它居然给你带来了一场精神世界的苦雨那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。或许雨过云收神驰的天地更清朗.......1 概述参考文献摘要—最近在单目视觉惯性导航VIN方面的研究结果表明基于优化的方法在准确性方面优于滤波方法因为其具有对过去状态重新线性化的能力。然而这种改进是以增加计算复杂性为代价的。本文通过在选定的关键帧之间预积分惯性测量来解决这个问题。预积分使我们能够将数百个惯性测量准确地总结为单个相对运动约束。我们的第一个贡献是一个预积分理论正确处理旋转群的流形结构并仔细处理不确定性传播。这些测量在一个局部坐标系中集成消除了在线性化点变化时重复集成的需要同时为延迟的偏差校正留下了机会。第二个贡献是展示预积分的IMU模型可以无缝地集成到因子图的统一框架中的视觉惯性流程中。这使得可以使用无结构模型进行视觉测量进一步加速计算。第三个贡献是对我们的单目VIN流程进行了广泛评估实验结果证实我们的系统非常快速并且在与竞争对手的最新滤波和优化算法以及Google Tango等现成系统的准确性方面表现出色。根据参考文献中的插值将一系列SE3姿势区分为IMU数据Spline Fusion一种连续时间表示用于视觉惯性融合适用于滚动快门相机。[PDF] Spline Fusion: A continuous-time representation for visual-inertial fusion with application to rolling shutter cameras | Semantic Scholar2 运行结果部分代码clear;clc;% global attiCaculator;randn(seed,0);step 0.01;start_time 0;end_time 50;tspan [start_time:step:end_time];N length(tspan);Ar 10;r [Ar*sin(tspan) Ar*cos(tspan) 0.5*tspan.*tspan]; % pose of GPS 鈥斺 global posev [Ar*cos(tspan) -Ar*sin(tspan) tspan];acc_inertial [-Ar*sin(tspan) -Ar*cos(tspan) ones(N,1)]; % global accelerationatti [0.1*sin(tspan) 0.1*sin(tspan) 0.1*sin(tspan)]; % Rotation: pitch roll yaw || x y zDatti [0.1*cos(tspan) 0.1*cos(tspan) 0.1*cos(tspan)];g [0 0 -9.8];gyro_pure zeros(N,3);acc_pure zeros(N,3);a wgn(N,1,1)/5;b zeros(N,1);b(1) a(1)*step;%% generate imu datafor iter 1:NA AttitudeBase.Datti2w(atti(iter,:));gyro_pure(iter,:) Datti(iter,:)*A;cnb AttitudeBase.a2cnb(atti(iter,:));acc_pure(iter,:) cnb*(acc_inertial(iter,:) - g);end% state0 zeros(10,1);% state0(7) 1;% add noise and bias (0.5 m/s^2 1 degree)acc_noised acc_pure 0.1*randn(N,3) 0.5*ones(N,3);gyro_noised gyro_pure (randn(N,3)*2 ones(N,3))/180*pi;accCov 0.01*eye(3);gyroCov (2/180*pi)^2*eye(3);%% preintegrationimuPara IMUPara(accCov,gyroCov,ones(3),ones(3)); % initial imuPara with ones?PIM PreintegrateMeasurement();for i 1:100 % the former 100 imu dataPIM PIM.Preintegrate(acc_noised(i,:),gyro_noised(i,:),imuPara,step);endsi NavState(zeros(3,1),r(1,:),v(1,:),zeros(3,1),zeros(3,1)); % initial the NavStatesj si.predict(PIM); % update the NavState by imu preintegraion% sj si;% cov zeros(15,15);% cov(1:9,1:9) PIM.cov_;% cov(10:15,10:15) 0.1*eye(6);% infor eye(15)/cov;% oriMeas SO3.log(AttitudeBase.a2cnb(atti(100,:)));cov zeros(12,12);cov(1:9,1:9) PIM.cov_;cov(10:12,10:12) 0.1*eye(3);infor eye(12)/cov;for i 1:2% [ err,J ] IMUErrorJacobian.GPSAndOri( si,sj,PIM,r(100,:),oriMeas );[ err,J ] IMUErrorJacobian.GPS( si,sj,PIM,r(100,:) ); %% get residual error uncomplete Jaccobianfprintf(err: %f\n,norm(err));% if norm(err)0.00001% break;% enddelta -(J*infor*J)\J*infor*err;% fprintf(delta: %f\n,norm(delta))sj sj.update(delta);si.ba_ sj.ba_;si.bg_ sj.bg_;end3参考文献文章中一些内容引自网络会注明出处或引用为参考文献难免有未尽之处如有不妥请随时联系删除。4 Matlab代码、文章下载