Не влияет ли вектор Android «Вектор вращения игры» на вращение вокруг вертикальной оси?

Я разрабатываю приложение, которое использует Android-датчики, чтобы помочь транспортным средствам перемещаться в помещении. В рамках моего процесса оценки различных датчиков я хотел попробовать датчики «вектор вращения». По разным причинам показания магнитного поля не очень полезны для моего местоположения, поэтому я хотел попробовать датчик «Vector Rotation Vector» (слияние датчиков, доступный с уровня API 18 и более поздних версий). В описании указано, что он идентичен регулярному датчику вектора вращения, за исключением того, что информация о магнитном поле используется для коррекции дрейфа гироскопа вокруг вертикальной оси.

При поиске информации о датчиках Rotation Vector я столкнулся с примером из Google, где они показывают датчик вектора вращения с использованием 3d-куба. Он работает очень хорошо, за исключением того, что он очень чувствителен к локальным магнитным полям (и меня гораздо севернее, что еще хуже, поскольку здесь горизонтальный компонент здесь очень мал).

Поскольку долгосрочный дрейф может быть скомпенсирован другими справочными данными (информация о карте), я хотел использовать датчик Vector Rotation Vector для моего приложения. Однако при изменении всех ссылок с «TYPE_ROTATION_VECTOR» на «TYPE_GAME_ROTATION_VECTOR» в примере кода куб больше не реагирует на вращения вокруг вертикальной оси (например, я вращаю стул, удерживая устройство передо мной). Наклонение устройства в двух других направлениях перемещало куб. Я также заметил, что на этот раз куб был намного более «лагги», очень медленно реагируя на любое движение.

Так ли, как предполагается, работает вектор Vector Rotation Vector (например, игнорирование любых поворотов оси Z)? Это будет иметь смысл, так как игрок, играющий на заднем сиденье, не должен подвергаться воздействию поворота транспортного средства, но в то же время он отличается от описания, предоставленного Google (моя первая ссылка). Из описания у меня создалось впечатление, что он будет медленно дрейфовать, а не игнорировать вращение все вместе.

Я был бы глубоко благодарен за любые материалы по этому вопросу.

С наилучшими пожеланиями,

Джон

Хорошо, на всякий случай, если кто-нибудь найдет это, вот мои выводы:

Векторный вектор вращения вращается вокруг вертикальной оси. Это довольно точно в большинстве ситуаций.

Однако у него есть пара проблем … Во-первых, пока он неподвижен, он ускоряет горизонтальный дрейф (даже если ориентация на основе гироскопа имеет линейный дрейф). Для моего устройства Game Rotation Vector начался хорошо, но ускорился и, наконец, дрейфовал более 400 градусов в течение часа.

Во-вторых, и даже более тревожный, он, похоже, не игнорирует магнитные поля, вопреки официальному описанию (связанному в вопросе). Я пробовал ездить на стоянке с моим устройством, установленным на пассажирском сиденье, и Vector Rotation Vector значительно отставал (он был более чем на 180 градусов после одного полного вращения в течение 40 секунд), в то время как интегрированные данные гироскопа были точными в пределах нескольких градусов. Он также показал изменения в повороте, когда гироскоп парил вокруг нуля, что свидетельствует о том, что оно фактически компенсировало изменение (как я полагаю) магнитного поля.

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