0

У меня есть приложение, где я опроса датчиков для данных ускорения и сохранить значения XYZ в SQL DB. Codewise это довольно просто:Линейная точность ускорения Android

public void onSensorChanged(SensorEvent event) { 
     sensor = event.sensor; 

     int i = sensor.getType(); 
     if (i == MainActivity.TYPE_ACCELEROMETER) { 
      accelerometerMatrix = event.values; 
     } else if (i == MainActivity.TYPE_GYROSCOPE) { 
      gyroscopeMatrix = event.values; 
     } else if (i == MainActivity.TYPE_GRAVITY) { 
      gravityMatrix = event.values; 
     } else if (i == MainActivity.TYPE_MAGNETIC) { 
      magneticMatrix = event.values; 
     } 

     //insert into database 

    } 

MainActivity.TYPE_ACCELEROMETER только поле я установил в своем классе MainActivity.

Если я установил это на Sensor.TYPE_LINEAR_ACCELERATION, я заметил, что значения, которые хранятся в моей БД, довольно низки по точности (всего 2 десятичных знака). Но если я использую аппаратный акселерометр Sensor.TYPE_ACCELERATION, то точность намного выше (6dp)

Мой вопрос: я неправильно искал значения линейного ускорения, чтобы заставить меня получить только 2 дп точности? Или это просто ограничение того, как датчики сливаются в Android? Если его последний, как я могу получить более высокую точность в моих значениях акселерометра после фильтрации гравитации при работе с плавленными датчиками?

ответ

0

Насколько я знаю, вы не можете изменить точность аппаратных датчиков на Android. Вы можете отрегулировать период выборки только с помощью метода registerListener() от SensorManager с заменой класса или монитора с помощью onAccuracyChanged() callback от SensorEventListener.

Похоже, что вы правильно считываете показания датчика в своем фрагменте кода.

Я предложил бы делать следующие вещи:

  • попробовать выполнить то же измерение с помощью только один датчика и проверки, если поведение приложения изменилось - может быть, несколько чтений вызывает точность измерений?
  • попробуйте запустить это приложение на другом устройстве, если оно есть, и проверьте, отличается ли поведение и точность - может быть, точность датчиков различна на разных устройствах?
  • точность проверки и типов данных в базе данных и проверить, если она обрабатывает более точные данные правильно

Если вы не заметите никакой разницы после применения упомянутых предложений, я думаю, что мы ничего не можем повысить точность показаний датчиков делаем.

Кроме того, я провел несколько экспериментов с датчиками на Android некоторое время назад, используя Nexus 5 и Nexus 6, и я вижу, что разные датчики имеют разную точность, как вы заметили. По моим сведениям, мы не можем контролировать это с уровня API Android SDK.