Какова концептуальная разница между датчиком вектора вращения и датчиком ориентации в Android?

Android предоставляет как вектор вектора вращения, так и датчик ориентации. Я знаю, что они возвращают разные данные, потому что для векторного датчика у нас есть грех углов, в датчике ориентации у нас есть углы. Но какова концептуальная разница? Я не могу понять из документов. Какой из них обеспечивает ориентацию устройства в трехмерном пространстве? Я смущен!

Solutions Collecting From Web of "Какова концептуальная разница между датчиком вектора вращения и датчиком ориентации в Android?"

Более старые датчики ORIENTATION отображают ориентацию с использованием трех углов. Проблема с этими системами координат заключается в том, что она страдает от «карданного замка»: когда фактический вектор ориентации близок к вертикали, одна из координат переходит в 90 или -90 градусов, а остальные две координаты становятся либо неинтерпретируемыми, либо опасно денормализованными.

Новые датчики ROTATION сообщают о ориентации с использованием координат квартера, которые сложнее работать, но не страдают от проблемы блокировки Gimbal. Когда указывается ориентация с помощью координат кватерниона, вы можете определить точную ориентацию устройства независимо от ориентации.

Кватернионы также более эффективны с точки зрения вычислений. Вам не нужно вызывать дорогостоящие триггерные функции, чтобы применить поворот кватерниона к вектору. Если координата w не указана, вы все равно можете вычислить w с помощью одного вызова sqrt по сравнению с тремя вызовами sin и тремя cos для ориентации координат в трехугольной форме Эйлера.

Рассказ: датчики в стиле ORIENTATION были сделаны неправильно. Они были зафиксированы в API 9, заменив их датчиками ROTATION.

Датчик ROTATION_VECTOR был введен в API 9 и представляет собой «виртуальный» датчик, который объединяет данные от разных датчиков (обычно ACCELEROMETER, GEOMAGNETIC_FIELD и GYROSCOPE), и делает некоторые интеллектуальные вычисления для предоставления более точных данных, а не для использования необработанных данных от датчиков ACCEL и GEOMAGNETIC_FIELD. Это называется «слияние датчиков». Больше информации вы можете найти здесь

Датчик ORIENTATION устарел, поскольку он предоставляет не очень точные данные. В документации предлагается использовать необработанные данные от датчиков ACCELEROMETER и GEOMAGNETIC_FIELD.

К сожалению, я не могу привести какие-либо примеры использования данных датчика ROTATION_VECTOR, так как я сейчас в процессе расследования 🙂

На всякий случай вам понадобятся некоторые примеры использования необработанных данных – не стесняйтесь спрашивать меня – я опубликую несколько примеров, но простой поиск в Google поможет вам лучше;)