Intereting Posts
Android. cSipSimple. Как интегрировать видео-вызов в проект? Android. Как сделать запись аудио с высоким объемом? Android: альтернативный макет xml для ландшафтного режима Невозможно включить просмотр в <фрагмент> Может ли проект библиотеки Android иметь собственную базу данных SQLite? Как ограничить текстовое поле редактирования Android только для некоторых выбранных символов Отправка данных с Android на сервер с данными JSON Как я могу отправить текстовое поле в запросе POST, который загружает blob в Blobstore и извлекает его в обработчик загрузки для blob? Возможна ли связь между сетями через 3G / 4G для смартфонов? Как сохранить мой BroadcastReceiver Как использовать универсальный загрузчик изображений Установить выравнивание текста в центре в spinner в android Поведение popBackStack () отличается после обновления библиотеки поддержки с 23.1.1 до 25.1.0 Как обнаружить групповую SMS-беседу Получить имя производителя в устройстве Android

Андроид удаляет гравитацию из показаний акселерометра

Я разрабатываю приложение для Android, где мне нужно удалить гравитацию из показаний акселерометра. Я прочитал несколько дискуссий по этой проблеме, я также нашел здесь алгоритм, но я этого не понимал.

Я хочу отфильтровать гравитацию от каждой оси, а не от общего ускорения.

Не могли бы вы помочь мне? Мой код должен выглядеть примерно так:

public void onSensorChanged(SensorEvent sensorEvent) { float vals[] = sensorEvent.values; float accelerationX = filterGravity(vals[0]); float accelerationY = filterGravity(vals[1]); float accelerationZ = filterGravity(vals[2]); } 

Какой код следует поместить в методе filterGravity ()?

Solutions Collecting From Web of "Андроид удаляет гравитацию из показаний акселерометра"

Для базового решения вам понадобится фильтр нижних частот. Другие подходы, такие как фильтр Калмана, довольно жесткие относительно математики позади. Простой пример для Android – это один клик от вашей ссылки по адресу http://developer.android.com/reference/android/hardware/SensorEvent.html#values .

Проще говоря, фильтр нижних частот создает средневзвешенное значение из всех ваших значений истории. Если у вас, например, коэффициент фильтрации 0,1, это означает, что 10% вашего текущего значения добавляется к предыдущему среднему значению: newMeanValue = 10% от currentValue + 90% от oldMeanValue. Это означает, что даже если есть резкий пик, он будет медленно подталкивать ваше среднее значение из-за 10%.

Линейное ускорение – это то, что вам нужно. Проверьте Sensor.TYPE_LINEAR_ACCELERATION здесь .

Если у вас нет телефона с TYPE_LINEAR_ACCELERATION, вы застряли с TYPE_ACCELERATION, который не может отделить гравитацию (наклон) от линейного ускорения.

Один из вариантов – применить фильтр нижних частот. Другой подход заключается в использовании слияния датчиков, если имеется гироскоп. Оба подхода имеют свои преимущества и недостатки.

У меня есть много рабочих примеров в проекте с открытым исходным кодом « Ускоритель Explorer» .

Не слишком уверен, что вы пытаетесь усвоить, но если вы ищете величину (которая даст результат между 0 и 1), тогда все, что вы делаете, делит результат на 10

 public void onSensorChanged(SensorEvent sensorEvent) { float vals[] = sensorEvent.values; float accelerationX = (vals[0]/10); float accelerationY = (vals[1]/10); float accelerationZ = (vals[2]/10); 

}

В игровой среде, когда датчик находится на полном наклоне, ваш объект будет на максимальной скорости