【问题标题】:Android turn detection mathAndroid 转弯检测数学
【发布时间】:2013-04-06 22:55:31
【问题描述】:

我想为此开发一个个人应用程序,我需要检测我的汽车的旋转。 在之前的帖子中,我得到了一个答案,即哪些传感器有好处,这没关系。 现在我想请你总结一下基本/需要的数学关系。 我想在我的应用程序中看到的内容: - 汽车旋转度数 - 汽车的实际速度(一般情况下这个应用程序会在3-5km/h等低速情况下使用)

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

所以请总结一下计算汽车旋转需要哪些方程、公式、关系。请告诉我您对哪种运动/位置传感器最适合此目的的建议(重力、加速度计、陀螺仪、..)

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

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

谢谢,

【问题讨论】:

    标签: android math


    【解决方案1】:

    您不需要深奥的数学知识。如果可用,您应该使用TYPE_MAGNETIC_FIELDTYPE_GRAVITY。否则使用TYPE_ACCELEROMETER,但您需要使用Kalman 滤波器或低通滤波器过滤加速度计值。您应该使用后置摄像头的方向作为参考。这个方向就是调用getOrientation返回的azimuth,但是在调用getOrientation之前需要调用remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR)才能得到正确的azimuth。然后随着设备不是平放的,设备的方向是什么(横向或纵向)都没有关系。只需确保手机屏幕朝向与汽车方向相反的方向即可。
    现在声明两个类成员startDirectionendDirection。一开始startDirectionendDirection的值是一样的,现在如果azimuth变化大于3 degrees,总有一点波动,那就把endDirection改成这个值继续更改直到说 20 返回 azimuth 具有相同的值(您必须尝试使用​​此数字)。这意味着汽车停止转弯,然后您计算startDirectionendDirection 之间的差异,这给您degree of rotation。现在将startDirectionendDirection 设置到这个新的方位角并等待下一个转弯。

    【讨论】:

    • 是的,我理解你所说的 startDirection/endDirection 没关系。我不明白为什么我要同时使用 2 个传感器(例如你悲伤的重力/磁性)?据我所知,加速度计更难用于这个钱包?所以它仍然可以,并且可以与旧设备兼容,但很难计算转入度数。我认为这是我必须更好地理解一些数学的地方(根据加速度计值计算度数)。这是你写的,对吧? "卡尔曼滤波器或低通滤波器"
    • 还有什么,如果算上我会使用这个非常低速的情况。例如,当我停车时(向后,平行)
    • 在 2.3.3 中还有一件更有趣的事情:TYPE_ROTATION_VECTOR 也许对我有用?现在我看到了我的第一个问题/问题:不知道我应该测量什么?当我开车时,哪些单位/传感器会发生变化。
    • 如果你使用 TYPE_ROTATION_VECTOR 你会得到一些漂移。单位是弧度。
    • 是的,我试过了。但这就是我要求数学的原因。现在我所有的轴都在改变。我认为对于汽车转弯,当手机处于纵向模式时,我必须使用 X 和 Z 进行计算。当手机处于横向模式时,可能是 X 和 Y。但是我应该使用什么样的数学函数/计算/公式/定义来进行这种计算?谢谢!
    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 2013-07-15
    • 2015-05-06
    • 2016-10-01
    相关资源
    最近更新 更多