【问题标题】:Accelerometer giving random values when device is at rest设备静止时加速度计给出随机值
【发布时间】:2016-08-04 07:55:38
【问题描述】:

当我运行我的代码时,加速度计返回的值似乎是随机的,即使我拿起设备并旋转它,值似乎也没有任何显着变化或明显的迹象表明设备已从静止位置变为移动位置。我从谷歌的网站上复制了代码。基本上我想看看设备是否已经从静止位置移动了。如果可能,解决方案应该适用于 Android 2.2 及更高版本:

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

float[] gravity = new float[3];

@Override
public void onSensorChanged(SensorEvent event)
{
  try
  {
    final float alpha = 0.8f;
    float[] linear_acceleration = new float[3];

    // Isolate the force of gravity with the low-pass filter.
    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

    // Remove the gravity contribution with the high-pass filter.
    linear_acceleration[0] = event.values[0] - gravity[0];
    linear_acceleration[1] = event.values[1] - gravity[1];
    linear_acceleration[2] = event.values[2] - gravity[2];
  }
  catch (Exception ex)
  {
  }
}

【问题讨论】:

  • 重力应该是类的字段而不是方法中的变量!
  • 没有任何区别。事件中的原始值在静止和移动之间没有任何显着变化。我删除了上面的重力阵列。

标签: android accelerometer


【解决方案1】:

当您应对documentation 的解决方案时,请理解。
gravity 必须是该类的一个字段,因为您需要存储低通滤波器的状态。 gravity 保存加速度计的平均值值,快速变化是您的线性加速度。

【讨论】:

    【解决方案2】:
    1. 你试过Sensor.TYPE_LINEAR_ACCELERATION吗?这个传感器 返回不包括重力的加速力,你不需要 计算一下
    2. 传感器太敏感,噪音很大。获得 0,0,0 值几乎是不可能的。您需要排除较小的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      相关资源
      最近更新 更多