【问题标题】:TYPE_LINEAR_ACCELERATION Sensor values changes according to smartphone brand - modelTYPE_LINEAR_ACCELERATION 传感器值根据智能手机品牌 - 型号而变化
【发布时间】:2016-09-26 14:23:47
【问题描述】:

我两天前在 Google Play Store 上发布了一款使用运动传感器的游戏。该游戏是一款拳击手游戏,允许用户在摇晃智能手机时自动评估得分。为了评估分数,它使用 TYPE_LINEAR_ACCELERATION 传感器。

但问题是在我发布游戏后,一些用户发送了他们的分数。我看到,对于某些智能手机,很容易获得 900 分,而对于某些智能手机,很难获得 500 分。我的意思是,如果同一个用户在这个游戏中摇动(用同样的力量)不同的手机;对于 X 智能手机,他获得(例如)400 分,对于 Y 智能手机,他获得(例如)850 分。

为什么会出现这种不等式?

我理解(猜想)有些智能手机的评分较低,而有些智能手机的评分较高。

我的实现(大致)

    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SensorManager.SENSOR_DELAY_FASTEST);

-

@Override
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
                float[] values = event.values;
                 float x = values[0];//to get X - axis acceleration   
                  //.......

                 //........
    }
    }

我可以分享我的申请链接,但是否允许?如果是,请说。我可以分享我的申请链接。

注意:我想解释我的算法,为了获得分数,我从传感器获得最大加速度并将最大值保存在变量中。用户点击显示分数按钮后,我乘以 40 得到分数。

【问题讨论】:

  • 所有这些手机都使用不同的传感器,所以它们当然会有不同的延迟、振铃行为、灵敏度等。特别是它们会有不同的最大值——你可以加速的只有这么多加速度计在达到最大值之前,可能是你用较低的值限制了传感器。
  • 这个问题的最佳方法。
  • 规格表。不同的手机使用不同制造商的不同加速度计。即使在同一模型的两个实例之间也会有微小的差异,但在加速度计的两个不同模型之间,它们的最大值和灵敏度也会大不相同,因为它们的设计不同。
  • BTW

标签: android accelerometer sensors android-sensors


【解决方案1】:

我不明白你的问题。 Type_Linear_Acceleration 是一个虚拟传感器,它从加速度计和陀螺仪的数据组合中获取数据。

大多数智能手机的加速度计和陀螺仪没有完全相同的传感器,显然每个设备之间的数据会略有不同。

【讨论】:

  • 从科学的角度来看,我认为它们应该是相同的。为什么?我认为,所有这些都应该是即时加速。科学表明,物体在瞬间具有(只有一个)加速度,就像速度一样。那为什么不同的手机会显示不同的结果呢? (我不是指灵敏度,可能它们会有所不同)我的问题很简单,如果我们对 2 部不同的智能手机施加相同的力(沿相同方向),为什么它们的分数不同?这种差异有时会大 3 倍。
  • F = m.a 请假设它们的 M 相同(质量)
  • 当我说 SAME 时,我的意思是他们应该显示 NEAR 结果。例如,“假设第一个电话显示 512,第二个显示 530”这个结果是预期的。但是不同的手机差别很大。这种差异有时可能会大 3 倍(大约)。我测试过。
  • 您是否正在使用测试设备来确保每次在相同的时间内施加相同的力(如此等量的混蛋)?如果不是,我向您保证,您不会每次都施加相同的力量。
【解决方案2】:

您没有描述如何计算分数。 我会对 3 个维度进行平方根计算,然后使用结果(磁力)作为分数

score = getMagnetude(values);

和功能:

private float getMagnetude(float[] v) {
        return Math.sqrt( v[0]*v[0] + v[1]*v[1] + v[2]*v[2] );
}

【讨论】:

  • 这个问题不是关于如何计算的,我只使用 1 个方向(X 轴)计算。这不是问题。我的问题是“为什么不同的手机不显示 NEAR 结果?” “为什么差异会很大?对于相同的加速度”我测试过。事实上,如果不被禁止,我可以分享我的申请链接。
【解决方案3】:

我明白我的问题。我正在使用 Sensor.TYPE_LINEAR_ACCELERATION 所以它使用陀螺仪 + 加速度计传感器。

TYPE_LINEAR_ACCELERATION传感器的操作逻辑是什么?

它使用加速度计和陀螺仪传感器。它有一个公式:

线性加速度 = k1 x 加速度计 + k2 x 陀螺仪

k1 和 k2 是常数值。

对于陀螺仪没有任何最大值(我认为),但对于加速度计传感器,不同的智能手机使用不同的最大值。

这些最大值是 -+g(9.8)、-+2g、-+4g 和 -+8g。

最后,对于不同的智能手机,会显示不同的结果,因为用户通常在摇晃智能手机时会达到最大值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多