【发布时间】:2015-02-01 03:26:46
【问题描述】:
我正在使用 Invensense 9D (Accel+Gyro+Compass) 开发可穿戴设备,该设备使用运行卡尔曼滤波器的嵌入式数字运动处理器计算四元数以进行实时定位。遗憾的是,Invensense 不允许最终用户访问 DMP 代码。
在我们的应用程序中生成的四元数会出现一些偏差。但是我们已经能够通过在短时间内获取欧拉角之间的差异来解决这个问题。但欧拉角显然不太理想,因为它们存在固有问题(万向节锁定等)。
我正在努力计算两个四元数之间的差异——“应该”是Diff = q2 * conj(q1)——然后计算从q1 到q2 所需的Pitch 和Roll 变化。这就是我的大脑冻结的地方。
感谢任何建议/指针。
更新:
我确实需要向用户显示角度差异(俯仰和滚动),以便他们了解两个方向之间的方向差异。
FS.Roll FS.Pitch
MP.Roll MP.Pitch
如果我计算 FS.Pitch 和 MP.Pitch 以及相应的 FS.Roll 和 MP.Roll 之间的差异——我得到的正是我所追求的。
但我想减少嵌入式 Cortex-M0 MCU 上的逆触发计算——以及避免每次转换的 Gimbal Lock——所以理想情况下我想获得两者之间的四元数“差异”并将其分解为相对的 Pitch 和 Roll 分量。
当我尝试您的建议时,它产生的结果与欧拉数学不同。 我知道从四元数到欧拉角有 number 个不同的旋转序列。我已经尝试了十几个,但没有一个得到与从单个四元数中获取欧拉角的差异相同的答案。
感觉好像我遗漏了一些明显的东西——但我只是没有看到它。
谢谢!
【问题讨论】: