如果这听起来是一个重复的问题,请耐心等待。但我只是想验证我使用的整个方法是否合理。基本上我从我从不同来源阅读的内容构建了以下内容。
我有一个IMU,我从中获得加速度计和旋转矢量值。文档说明了关于旋转矢量的以下内容。
旋转矢量提供方向输出,表示为以磁北和重力为基准的四元数。它是通过融合加速度计,陀螺仪和磁力计的输出产生的。旋转矢量是可用的最准确的方向估计。
旋转矢量四元数表示设备从地球坐标系旋转了多少。我希望通过旋转矢量和加速度计的组合在设备的坐标系上获得线性加速。我假设每当设备处于静止状态时,线性加速度应为0。
这是我想出的数学。
q
获取四元数qPrime = inverse(q)
norm
g = [0 0 norm]
a_linear = a_total - qPrime*g*conjugate(qPrime)
的线性加速度这里大概是我的matlab / octave代码中的重要行。
%get the gravity norm at rest from 100 samples
gNorm = median(sqrt(sum(Acc(1:100, 1:3).^2, 2)), 1);
%a couple of lines and a loop later
q_inv = qInv(q);
a_p = qTimes(qTimes(q_inv, [0 g]), qConj(q_inv));
LinAcc = [Acc(i, 1:3) - a_p(2:4)];
使用上面的代码后,我有一个如下所示的图。
我的任何假设是错误的吗?我错误地认为我必须使用四元数的倒数来旋转到设备的坐标系吗?我是否应该认为y中0.05m / s / s等误差来自其他来源,如校准,而不是来自数学?
方程是正确的。尖峰声音有点奇怪。你在去除重力乘法之前检查了它的值吗?如果原始acc值具有与数学不同的噪声。或者它可能是你的旋转矢量噪音。