1

我想从手机背面(-Z 轴)获取增强现实应用程序的方位角。我的应用程序仅在 Landscape Right 中运行。在 iPhone 5S 上进行测试。

目前,我正在使用以下方法: CoreLocation heading base on back camera (Augmented reality)

这种方法有两个问题:

  1. 如果我将设备的背面指向北方,这样我目前处于 0 度,然后顺时针旋转(偏航)整整 360 度,我现在处于 -20 度。逆时针旋转增加 20 度。这种模式重复自身,从 0 旋转 720 度现在产生 -40 度,依此类推。此外,即使我不一定要进行这些清晰的旋转,而是混乱地移动手机(旋转、摇晃等),但最终会回到我最初所在的位置,我什至无法预测它会产生什么价值节目。
  2. 另一个问题是我认为所谓的陀螺漂移。如果我根本不移动设备,我可以清楚地看到该值如何随时间缓慢变化,比如说每隔几秒 0.1 度,有时在一个方向,有时在另一个方向,直到它决定停止的某个点.

问题是,我没有数学背景知道如何解释这些变化。特别有问题的是,我似乎无法从 deviceMotion.attitude 的 yaw/pitch/roll 计算旋转矩阵。我试过了:

float w = motion.attitude.yaw;
float v = motion.attitude.pitch;
float u = motion.attitude.roll;
r.m11 = cos(v) * cos(w);
r.m12 = sin(u) * sin(v) * cos(w) - cos(u) * sin(w);
r.m13 = sin(u) * sin(w) + cos(u) * sin(v) * cos(w);
r.m21 = cos(v) * sin(w);
r.m22 = cos(u) * cos(w) + sin(u) * sin(v) * sin(w);
r.m23 = cos(u) * sin(v) * sin(w) - sin(u) * cos(w);
r.m31 = -sin(v);
r.m32 = sin(u) * cos(v);
r.m33 = cos(u) * cos(v);

我已经尝试了所有 Tait-Bryan 组合(uvw、uwv、vuw、vwu、wvu、wuv),其中一些非常接近,但仍然不够接近。

从我的观察来看,CLLocationManager 的磁航向似乎比 CMMotionManager 计算的航向准确得多,但同样,即使我得到了正确的角度,我也不知道应该从哪里开始在不同的坐标中获得等效角度系统参考系。任何帮助将不胜感激。

4

0 回答 0