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

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

根据上述信息,我怎么能做到这一点?

最佳答案

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

在伪代码中,像这样

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 的图像,应应用以下公式:vrotated = qvq-1。要使用浮点数计算它,您需要自己计算公式;它们可在 Using quaternion rotations 获得。

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

注意符号约定(无论您考虑重力 [0,0,-1] 还是 [0,0,1])和 handedness of your coordinate systems !

关于math - 加速度计数据中的重力补偿,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18252692/

10-14 05:36