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

dra*_*gsu 5 math accelerometer quaternions gravity

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

我发现这个http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus 但是无法理解给定方程的基础.

如何获得上述信息呢?

Ali*_*Ali 11

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

在伪代码中,类似这样的东西

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
Run Code Online (Sandbox Code Playgroud)

你说你可以q通过API.唯一不重要的一步是实现该rotate()功能.

v在旋转时计算矢量图像,q应使用以下公式:v rotate = q v q -1.要使用浮点数计算它,您需要自己计算公式; 它们在使用四元数旋转时可用.

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

注意标志惯例(无论你考虑重力[0,0,-1]还是[0,0,1])和坐标系的手性!