Взаимозависимость Roll Pitch и Yaw

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

Однако, когда я начал тестировать его, я заметил резкое изменение рыскания при легком перемещении устройства по крену и тангажу. Когда устройство находится на столе и вращается в нем, кажется, что он дает правильные значения.

Я также замечаю, глядя на вращение, которое, кажется, дает правильные значения при вращении его в качающемся режиме, что легкое перемещение его по высоте внезапно резко меняет значение.

Приведенные значения не изолированы друг от друга - вращение от данной системы отсчета?


Обратите внимание, что в библиотеке используется кватернион, так что не должно быть проблем с блокировкой карданного подвеса, или она возникает из-за простого представления поворота в градусах (с углами Эйлера)?

Здесь — исходный код


Редактировать: Я изменил реагировать родные датчики, чтобы дать мне отношение CMDeviceMotions на iOS (крен, тангаж, рыскание). Они давали мне вращение независимо друг от друга — что решало проблему.

0
0
565
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Карданный замок является неотъемлемым свойством представления вращения с использованием углов Эйлера (то есть рыскания, тангажа, крена или любой другой комбинации). Хотя вы правы в том, что кватернионы не страдают от этой проблемы, представление углов Эйлера, в которое вы их конвертируете, делает это.

«Решение», часто используемое на практике, если вы хотите продолжать использовать углы Эйлера для представления своих вращений, состоит в том, чтобы переключиться с представления рыскания-тангажа-крена (xyz) на другую комбинацию, которая лучше работает в вашей системе координат - иметь взгляните на вики-страница для комбинаций, которые вы могли бы попробовать. По сути, это просто устанавливает блокировку подвеса на другую комбинацию углов, но для практических приложений с четко определенными диапазонами значений этого часто достаточно, чтобы избежать проблем.

В зависимости от вашего варианта использования более «правильным» решением может быть полное переключение на представление кватернионов, что полностью устраняет проблему.

В конце концов мне удалось создать решение, полностью основанное на кватернионах, с помощью разработчика игр.

lolelo 11.06.2020 19:24

Другие вопросы по теме