我想开发一个个人应用程序,我需要检测我的汽车的旋转。 在之前的一个帖子中,我得到了一个回答哪个传感器对它有好处,这没关系。 现在我想请你们总结必要/必要的数学关系。 我希望在我的应用中看到什么: - 汽车以度为单位的旋转 - 汽车实际速度(通常这个应用程序将用于低速情况,如3-5km / h)
我认为更难的部分是实时旋转检测。当我将手机置于横向或纵向模式的车载支架中时,应用程序可以正常工作。
所以请总结一下我需要哪些方程式,公式,实际情况来计算汽车的旋转。请告诉我你的推荐,哪个运动/位置传感器最适合这种紫癜(重力,加速度计,陀螺仪......)
首先我认为我会使用Android 2.2以更好地兼容我的手机,但对我来说2.3.3也没问题。在这种情况下,我可以使用TYPE_ROTATION_VECTOR看起来像一件好事,但我真的不知道它对我有用吗?
我不想要完整的源代码我想自己开发它但我需要知道我从哪里开始,需要什么深入的数学知识以及需要什么部分的数学。对于传感器问题:我有点困惑,有许多传感器对我来说都可以。
谢谢,
答案 0 :(得分:1)
您无需深入的数学运算。如果可用,您应该使用TYPE_MAGNETIC_FIELD
和TYPE_GRAVITY
。否则使用TYPE_ACCELEROMETER
但您需要使用Kalman
过滤器或低通过滤器过滤加速度计值。您应该使用后置摄像头的方向作为参考。此方向是通过调用azimuth
返回的getOrientation
,但在致电getOrientation
之前,您需要致电remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR)
以获取正确的azimuth
。然后,当设备没有平放时,无论设备方向是什么(横向或纵向)都无关紧要。只需确保手机屏幕朝向与汽车方向相反的方向
现在声明两个班级成员startDirection
和endDirection
。在开始时,startDirection
和endDirection
具有相同的值,现在如果azimuth
变化超过说3 degrees
,则总会有一点波动,然后更改{ {1}}到此值并继续更改,直到20返回endDirection
具有相同的值(您必须尝试此数字)。这意味着汽车停止转动,然后您计算azimuth
和startDirection
之间的差异,这会给您endDirection
。现在将degree of rotation
和startDirection
设置为此新方位角,然后等待下一轮。