Android转向检测数学

时间:2013-04-06 22:55:31

标签: android math

我想开发一个个人应用程序,我需要检测我的汽车的旋转。 在之前的一个帖子中,我得到了一个回答哪个传感器对它有好处,这没关系。 现在我想请你们总结必要/必要的数学关系。 我希望在我的应用中看到什么: - 汽车以度为单位的旋转 - 汽车实际速度(通常这个应用程序将用于低速情况,如3-5km / h)

我认为更难的部分是实时旋转检测。当我将手机置于横向或纵向模式的车载支架中时,应用程序可以正常工作。

所以请总结一下我需要哪些方程式,公式,实际情况来计算汽车的旋转。请告诉我你的推荐,哪个运动/位置传感器最适合这种紫癜(重力,加速度计,陀螺仪......)

首先我认为我会使用Android 2.2以更好地兼容我的手机,但对我来说2.3.3也没问题。在这种情况下,我可以使用TYPE_ROTATION_VECTOR看起来像一件好事,但我真的不知道它对我有用吗?

我不想要完整的源代码我想自己开发它但我需要知道我从哪里开始,需要什么深入的数学知识以及需要什么部分的数学。对于传感器问题:我有点困惑,有许多传感器对我来说都可以。

谢谢,

1 个答案:

答案 0 :(得分:1)

您无需深入的数学运算。如果可用,您应该使用TYPE_MAGNETIC_FIELDTYPE_GRAVITY。否则使用TYPE_ACCELEROMETER但您需要使用Kalman过滤器或低通过滤器过滤加速度计值。您应该使用后置摄像头的方向作为参考。此方向是通过调用azimuth返回的getOrientation,但在致电getOrientation之前,您需要致电remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR)以获取正确的azimuth。然后,当设备没有平放时,无论设备方向是什么(横向或纵向)都无关紧要。只需确保手机屏幕朝向与汽车方向相反的方向 现在声明两个班级成员startDirectionendDirection。在开始时,startDirectionendDirection具有相同的值,现在如果azimuth变化超过说3 degrees,则总会有一点波动,然后更改{ {1}}到此值并继续更改,直到20返回endDirection具有相同的值(您必须尝试此数字)。这意味着汽车停止转动,然后您计算azimuthstartDirection之间的差异,这会给您endDirection。现在将degree of rotationstartDirection设置为此新方位角,然后等待下一轮。