UWBIns/lib/att_upt.m

45 lines
979 B
Matlab
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

function out = att_upt(in, gyr, dt)
% 输入当前姿态四元数和陀螺仪角速度,输出更新后的姿态四元数
% in为当前姿态四元数
% gyr是陀螺仪测量值
% dt 时间步长
%% 单子样旋转矢量
rv = gyr*dt; % 旋转矢量 = 角速度 × 时间步长
dq = rv2q(rv); % 调用函数将旋转矢量转为四元数
%% 不专业的做法
% dq(1) = 1;
% dq(2) = rv(1)*0.5;
% dq(3) = rv(2)*0.5;
% dq(4) = rv(3)*0.5;
out = qmul(in, dq); % 四元数相乘 当前姿态 × 增量 = 新姿态
out = qnormlz(out); % 归一化 归一化防止数值漂移
%% 使用旋转矩阵更新
%
% Cb2n = ch_q2m(in);
% theta = gyr*dt;
%
% %C = eye(3) + ch_askew(theta);
% C = ch_rv2m(theta);
%
% Cb2n = Cb2n * C;
%
% % 截断误差,保持正交化 GNSS与惯性及多传感器组合导航系统原理-第二版.pdf 公式 5.80
% c1 = Cb2n(1,:);
% c2 = Cb2n(2,:);
% c3 = Cb2n(3,:);
% c1 = 2 / (1 + dot(c1,c1))*c1;
% c2 = 2 / (1 + dot(c2,c2))*c2;
% c3 = 2 / (1 + dot(c3,c3))*c3;
% Cb2n = [c1; c2; c3];
%
% out = ch_m2q(Cb2n);
end