在玩Sensor Manager
时,我注意到传感器数据有一些我无法理解的限制。
通过监听传感器事件,我们可以提取方位角,俯仰和侧倾值。 Here是Google Codelabs的教程。
SensorManager.getRotationMatrix(rotationMatrix, null, mAccelerometerData, mMagnetometerData);
SensorManager.getOrientation(rotationMatrix, orientationValues);
float azimuth = (float) Math.toDegrees(orientationValues[0]);
float pitch = (float) Math.toDegrees(orientationValues[1]);
float roll = (float) Math.toDegrees(orientationValues[2]);
现在的问题是,当俯仰接近90度时,侧倾变得不可预测(通过错误地频繁更改其值)。
我在Beginning Android Wearables书中发现了此问题的确认,但如上所述,解释超出了本书的范围。
第三,按照上述约定,方位角,俯仰和横滚 当音高值接近时变得挑剔和不可预测 90或-90度。此问题与硬件传感器无关 但要考虑到方位角,俯仰和横滚背后的数学问题。详细 万向节锁的解释超出了本书的范围,但是 后果直截了当:不要相信方向 间距接近+/- 90度。如果音高的这些值是 对于应用程序不可避免,请考虑使用旋转矩阵或 四元数。
问题
有人可以解释一下吗?气泡级应用(例如Bubble level)如何在Android中解决此问题?