1

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

Есть немало перечисленных в Дев документы:

  • TYPE_ROTATION_VECTOR
  • TYPE_GAME_ROTATION_VECTOR
  • TYPE_GEOMAGNETIC_ROTATION_VECTOR
  • TYPE_ORIENTATION
  • Там также, как представляется, метод getRotationMatrix предлагаемый API, но Я не уверен, является ли это комбинацией вышеизложенного или чего-то совершенно другого.

Я видел несколько потоков на этом (например, Acceleration from device's coordinate system into absolute coordinate system), но они довольно старые, и я не уверен, что если что-нибудь новое/более полезное добавлено андроид так

ответ

1

Вы должны получить Rotation Matrix, а затем продукт этой матрицы и значение акселерометра в onSensorChanged будет дать вам координаты в мировой системе координат.

Вы можете скачать мою библиотеку по адресу https://github.com/hoananguyen/dsensor, а в вашем коде просто вызвать DSensorManager.startDSensor (контекст, DSensor.TYPE_WORLD_ACCELEROMETER, прослушиватель). Обязательно вызовите DSensorManager.stopDSensor, когда датчик больше не нужен.

+0

В вашем коде вы могли бы указать мне, где вы получаете матрицу вращения и выполняете умножение? Я хотел бы выяснить, как реализовать это самостоятельно, не полагаясь на другую библиотеку. – Simon

+0

Также, как матрица вращения отличается от других, перечисленных выше? – Simon

+1

Типы, перечисленные выше, дают вам вектор, а не матрицу. Вы можете получить матрицу вращения из нескольких методов в классе SensorManager. В моем коде посмотрите на метод processDataWithRotationMatrix в классе DSensorProcessor. –