Как преобразовать ускорение устройства в глобальное ускорение - PullRequest
0 голосов
/ 22 мая 2018

Я разрабатываю приложение для Android, которое должно измерять движение устройства с помощью акселерометра.Проблема в том, что эти значения содержат гравитацию.Некоторые говорят, что для того, чтобы убрать гравитацию, мне нужно преобразовать ускорение в глобальное ускорение, а затем просто убрать гравитацию с оси Z, но я не знаю, как это сделать?Есть ли какая-либо специальная функция единства, чтобы сделать это?

Спасибо

1 Ответ

0 голосов
/ 22 мая 2018

Эта тема на форуме Unity проясняет ситуацию:

https://forum.unity.com/threads/unity-and-the-accelerometer-vs-the-gyroscope-a-complete-guide.451496/

Как говорит «инкредибл» от Unity Technologies:

В Unity Gyroscope.rotationRateэто реальные данные гироскопа, все другие свойства этого класса используют другие датчики (если они доступны), чтобы получить более точные оценки перемещений реальных устройств.Gyroscope.gravity и Gyroscope.userAcceleration относятся к акселерометру, но с помощью других датчиков они отделяют гравитацию от ускорения устройства, чтобы облегчить их использование разработчиками (но это опять-таки оценка, они не идеальны, только близкодостаточно).

Итак, Gyroscope.userAcceleration является ответом на этот вопрос.

Input.acceleration - это данные акселерометра, которые измеряются кратнымиg (сила тяжести Земли), поэтому его величина равна 1, когда устройство не перемещается.Попробуйте зарегистрировать его, когда устройство поднято в воздух, и оно должно быть близко к нулю (это потому, что устройство в это время находится в свободном падении).Compass.rawVector представляет собой данные магнитометра, и все остальные свойства этого класса определяются с использованием различных датчиков, а не только магнитометра.

...