加速度计数据中的重力补偿

时间:2013-08-15 12:31:59

标签: math accelerometer gravity quaternions

鉴于加速度计具有9 DOF(加速度计,陀螺仪和磁力计),我想在加速度计读数中去除/补偿重力的影响(加速度计可以自由旋转)。传感器给出相对于(磁)北,西和上参考系的四元数表示的方向。

我找到了http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus 但无法理解给定方程的基础。

如何获得上述信息?

2 个答案:

答案 0 :(得分:10)

您需要将四元数的加速度计读数旋转到地球参照系(如果您愿意,进入房间的坐标系),然后减去重力。剩余的加速度是传感器在地球参考系中的加速度,通常称为线性加速度或用户加速度。

在伪代码中,像这样

acceleration = [ax, ay, ay]  // accelerometer reading

q                            // quaternion corresponding to the orientation

gravity = [0, 0, -9.81]      // gravity on Earth in m/s^2

a_rotated = rotate(acceleration, q) // rotate the measured acceleration into
                                    // the Earth frame of reference

user_acceleration = a_rotated - gravity

您说您可以通过API获取q。唯一不重要的步骤是实现rotate()功能。

要在按v旋转时计算向量q的图像,应使用以下公式:v rotate = q v q -1 。要使用浮点数计算它,您需要自己计算公式;它们可在Using quaternion rotations获得。

据我所知,您提供的链接就是这样,您可以在那里看到扩展的公式,现在您知道它们来自何处。此外,链接的内容似乎以g为单位测量重力,即重力为[0,0,-1]。

注意标志惯例(无论你考虑引力[0,0,-1]还是[0,0,1])和handedness of your coordinate systems

答案 1 :(得分:0)

我假设您的加速度计读数位于传感器主体框架中。首先,我们需要根据惯性框架表示加速度计数据,然后减去重力。 如果直接使用欧拉角而不是四元数,则需要计算旋转矩阵

phi

(用MATLAB表示法给出)。这里theta代表滚动角度,psi代表俯仰,R代表偏航。这个z矩阵是从身体到惯性框架。我认为在飞行动力学中它也被称为方向余弦矩阵(DCM)的转置。

当你应用矩阵乘法运算时,现在需要从<allow-navigation href="http://192.168.1.172:8100"/>方向减去重力,以消除静态加速度,即重力。