鉴于加速度计具有9 DOF(加速度计,陀螺仪和磁力计),我想在加速度计读数中去除/补偿重力的影响(加速度计可以自由旋转) . 传感器给出相对于(磁)北,西和上参考系的四元数表示的方向 .
我发现这个http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus但是无法理解给定方程的基础 .
如何获得上述信息呢?
鉴于加速度计具有9 DOF(加速度计,陀螺仪和磁力计),我想在加速度计读数中去除/补偿重力的影响(加速度计可以自由旋转) . 传感器给出相对于(磁)北,西和上参考系的四元数表示的方向 .
我发现这个http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus但是无法理解给定方程的基础 .
如何获得上述信息呢?
2 回答
您需要将四元数的加速度计读数旋转到地球参照系(如果您愿意,进入房间的坐标系),然后减去重力 . 剩余的加速度是传感器在地球参考系中的加速度,通常称为线性加速度或用户加速度 .
在伪代码中,类似这样的东西
你说你可以通过API获得
q
. 唯一不重要的一步是实现rotate()
功能 .要在
q
旋转时计算向量v
的图像,应使用以下公式:vrotated = qvq-1 . 要使用浮点数计算它,您需要自己计算公式;它们可在Using quaternion rotations获得 .据我所知,您提供的链接就是这样,您可以在那里看到扩展的公式,现在您知道它们来自何处 . 此外,链接的内容似乎以g为单位测量重力,即重力为[0,0,-1] .
注意标志惯例(无论你考虑重力[0,0,-1]还是[0,0,1])和handedness of your coordinate systems!
我假设你的加速度计读数在传感器主体框架中 . 首先,我们需要根据惯性框架表示加速度计数据,然后减去重力 . 如果直接使用欧拉角而不是四元数,则需要计算旋转矩阵
(它以MATLAB表示法给出) . 这里
phi
代表侧倾角,theta
代表俯仰,psi
代表偏航 . 这个R
矩阵是从身体到惯性框架 . 我认为在飞行动力学中它也被称为方向余弦矩阵(DCM)的转置 .当您应用矩阵乘法运算时,现在需要从
z
方向减去重力以消除静态加速度,即重力 .