💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
EKF IMU Fusion Algorithms
orien.m 使用卡尔曼滤波器将陀螺仪和加速度计的读数融合,以获取IMU的姿态(四元数)。
zupt.m 实现了所谓的“零速度更新”算法,用于行人跟踪(步态跟踪),它也是一个扩展卡尔曼滤波器。
“零速度更新”算法是一种常用于惯性测量单元(IMU)姿态估计的技术,特别是在行人跟踪和步态跟踪等领域。这种算法利用了在特定条件下(通常是在步行过程中)传感器读数的特性。
在实现“零速度更新”算法时,通常会结合卡尔曼滤波器,将陀螺仪和加速度计的读数融合,以估计设备的姿态,通常以四元数的形式表示。
多传感器融合设计方案通常有松耦合和紧耦合两种方式。在LOAM[4] 和LeGO-LOAM[5] 中,因为惯性测量单元(IMU)仅被用来去除点云运动畸变和提供优化的初值并不参与优化过程,所以属于松耦合方案。松耦合的另一种实现方式是基于滤波方法融合多个传感器各自独立的结果得到一个更加精确的机器人状态。Lynen 等[9] 提出了基于扩展卡尔曼滤波器(EKF)的通用和模块化的多传感器融合框架。 Zhen 等[10] 使用误差状态卡尔曼滤波器(ESKF)融合 IMU测量和粒子滤波器输出的激光里程计。虽然松耦合易于实现,但是紧耦合算法往往能够得到精度更高的结果。Gao等[11] 分别设计了GPS和激光的紧耦合算法和松耦合算法,实验表明紧耦合系统的精
度优于松耦合系统。Ye 等[12] 提出了基于优化方法的激光-IMU 紧耦合算法,但由于计算量过大,对 计算平台要求很高。在LIO-SAM[6] 中,将点云匹配得到的里程计因子、IMU预积分
[13] 因子、回环因子和 GPS因子在 Isam2 [14] 上进行联合优化,虽然可以得到准确的结果,但是计算成本很高。在 FASTLIO[15] 中,采用迭代卡尔曼滤波器处理误差状态,
联合优化 IMU 和激光数据。FAST-LIO2 [16] 在 FASTLIO的基础上使用了优化库[17] ,提高了程序的易读性。FAST-LIO2在时间效率方面优于LIO-SAM,而且达到了与LIO-SAM相似或更好的精度。但是由于 FAST-LIO2采用增量kd树[18] 管理地图,不方便进行回环检测。而且没有融合GPS信息,在大尺度场景下会出现严重的误差累积问题。
📚2 运行结果
部分代码:
% Propagate the state and covariance
x = F * x;
x = x / norm(x); % Normalize the quaternion
P = F * P * F' + Q;
%--- 2. Update----------------------------------
% Accelerometer measurements
a = imu_data(k, 5:7);
a = a - bias_a;
% We use the unit vector of acceleration as observation
ea = a' / norm(a);
ea_prediction = [2*(x(2)*x(4)-x(1)*x(3)); ...
2*(x(3)*x(4)+x(1)*x(2)); ...
x(1)^2-x(2)^2-x(3)^2+x(4)^2];
% Residual
y = ea - ea_prediction;
% Compute the measurement matrix H
H = 2*[-x(3) x(4) -x(1) x(2); ...
x(2) x(1) x(4) x(3); ...
x(1) -x(2) -x(3) x(4)];
% Measurement noise R
R_internal = (noise_accel / norm(a))^2 * eye(3);
R_external = (1-gravity/norm(a))^2 * eye(3);
R = R_internal + R_external;
% Update
S = H * P * H' + R;
K = P * H' / S;
x = x + K * y;
P = (eye(4) - K * H) * P;
% 3. Ending
x = x / norm(x); % Normalize the quaternion
P = (P + P') / 2; % Make sure that covariance matrix is symmetric
allX(k,:) = x'; % Save the result
end
%--- Compare the results with ground truth
q_Ws0 = quatinv(grt_q(1,:));
for i=1:N
grt_q(i,:) = quatmultiply(q_Ws0, grt_q(i,:));
allX(i,:) = quatmultiply(q_Ws0, allX(i,:));
end
[psi, theta, phi] = quat2angle(allX);
[grt_psi, grt_theta, grt_phi] = quat2angle(grt_q);
figure, hold on
plot(1:N, psi, 'r-.', 1:N, grt_psi, 'r');
plot(1:N, theta, 'g-.', 1:N, grt_theta, 'g');
plot(1:N, phi, 'b-.', 1:N, grt_phi, 'b');
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]贾浩男.室内行人自主定位算法的研究与实现[D].哈尔滨工程大学,2017.DOI:CNKI:CDMD:2.1018.082519.
[2]林连秀.融合IMU的移动机器人SLAM系统研究与实现[J].福州大学, 2017.
[3]丛明,温旭,王明昊,等.基于迭代卡尔曼滤波器的GPS-激光-IMU融合建图算法[J].华南理工大学学报(自然科学版), 2024, 52(3):75-83.DOI:10.12141/j.issn.1000-565X.220667.