给定一个具有 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/