0

我正在 windows phone 7.1 中开发一个应用程序,我需要手机在 x 和 y 轴上的当前度数旋转。我尝试使用运动 API 并使用它提供的偏航俯仰和滚动的适当值。但是它提供的值会延迟,因为如果我将手机移动得太快并将其旋转到 90 度,则相应的值需要一点时间才能到达那里,这违背了我的目的。

我在 Android 中做了同样的事情,我可以使用类似的东西来计算手机的即时旋转。

这件事可以在 wp7 上使用陀螺仪来完成,但我想使用加速度计,这样我就可以满足更多设备的需求。

任何有关如何实现目标的帮助将不胜感激

4

1 回答 1

1

WP8 Motion API 也有类似的问题。延迟不是唯一的问题。似乎 Motion API 对各种罗盘(或磁力计)误差也非常敏感。更糟糕的是,这些不仅仅影响偏航。运动类 AHRS 算法似乎将俯仰和滚动与偏航耦合。结果,当指南针延迟或以其他方式变得疯狂时,俯仰和滚动也是如此。

我怀疑你可以不用陀螺仪。理论上,您只能从加速度计获得欧拉角(偏航角、俯仰角和滚动角),但前提是手机静止不动。最轻微的运动会导致线性/向心加速度,这会破坏您的方向计算。我想说,任何用手机等手持设备来做到这一点的尝试都注定要失败。此外,Motion API 本身除了加速度计之外还需要指南针和陀螺仪硬件。

无论如何,一切都不会丢失。我一起摆脱了 Motion 类,并按照 Sebastian Madgwick 的 IMU 算法实现了“我自己的”IMU。此处带有 C 代码的 IMU / AHRS 报告:

http://www.x-io.co.uk/res/doc/madgwick_internal_report.pdf

C源代码可以在这里找到:

http://www.x-io.co.uk/open-source-imu-and-ahrs-algorithms/

有了适当的 beta 增益,Madgwick 的 IMU 就像在 Windows Phone 上的魅力一样。IMU 不提供偏航,只提供俯仰和滚动。它只使用陀螺仪和加速度计硬件。如果您也需要偏航,您可以实现上述两个来源中包含的完整 AHRS 算法。那当然也需要指南针。

Madgwick 算法不包括欧拉角计算(只是描述地球和传感器框架之间旋转的四元数),但您会从 Madgwick 的报告中找到方程式。

我没有完整的 AHRS(或 MARG,正如 Madgwick 所说)的经验。然而,该算法将罗盘偏航与俯仰和横滚计算分离,因此即使存在磁干扰,人们也可以期望获得合理的俯仰/横滚读数。

请注意,坐标系不同。在 WP 中,X=pitch 轴,Y=roll 轴,Z=yaw 轴。在上述算法中,Y=pitch,X=roll 和 Z=yaw。因此,您需要交换 X 和 Y 以及反转 Z 加速度的方向。您还需要反转陀螺仪速率(并交换 X 和 Y 速率)。

希望这可以帮助 :)

于 2013-04-25T12:13:52.843 回答