我想为此开发一个个人应用程序,我需要检测我的汽车的旋转。 在之前的帖子中,我得到了关于哪些传感器适合的答案,没关系。 现在我想请你概括一下基本/需要的数学关系。 我想在我的应用程序中看到的内容: - 以度为单位的汽车旋转 - 汽车实际速度(一般这个应用程序会在3-5公里/小时的慢速情况下使用)
我认为其中较难的部分是实时旋转检测。当我以横向或纵向模式将手机放在车载支架中时,应用程序可以正常工作。
所以请总结一下计算汽车旋转需要哪些方程式、公式、关系式。请告诉我您对哪种运动/位置传感器最适合此目的的建议(重力、加速度计、陀螺仪……)
首先我认为我会使用 Android 2.2 以更好地与我的手机兼容,但对我来说 2.3.3 也可以。在这种情况下,我可以使用 TYPE_ROTATION_VECTOR,这看起来不错,但我真的不知道它是否对我有用?
我不想要完整的源代码,我想自己开发它,但我需要知道我可以从哪里开始,需要什么深奥的数学知识以及需要数学的哪一部分。对于传感器问题:我有点困惑,有很多传感器对我来说可能没问题。
谢谢,
最佳答案
您不需要深奥的数学知识。如果可用,您应该使用 TYPE_MAGNETIC_FIELD
和 TYPE_GRAVITY
。否则使用 TYPE_ACCELEROMETER
但您需要使用 Kalman
滤波器或低通滤波器过滤加速度计值。您应该以后置摄像头的方向为引用。这个方向是调用getOrientation
返回的方位角
,但是在调用getOrientation
之前需要调用remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR)
以获得正确的方位角
。然后,由于设备不是平放的,因此设备方向是什么(横向或纵向)并不重要。只要确保手机屏幕朝向与汽车方向相反的方向即可。
现在声明两个类成员startDirection
和endDirection
。一开始,startDirection
和 endDirection
具有相同的值,现在如果 azimuth
变化超过 3 度
,总是有一点波动,然后把endDirection
改成这个值,继续改,直到说20个返回的azimuth
有相同的值(你要试验这个数字)。这意味着汽车停止转动,然后您计算 startDirection
和 endDirection
之间的差异,这将为您提供 旋转度数
。现在将 startDirection
和 endDirection
设置为这个新的方位角并等待下一个转弯。
关于Android 转向检测数学,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856957/