@segfaulter

Как конвертировать кватернион вращения из X-Plane в углы Эйлера?

Есть активный кокпит с возможностью вращать по тангажу и крену.
64540259b5ef2784490840.png
Его контроллер принимает значение вращения в условных единицах, по сути в градусах.
Есть игра (X-Plane 11), из которой нужно достать информацию для соответствующего вращения симулятора.

Проблема в том, что при использовании напрямую значений тангажа и крена, всё ломается когда самолёт делает “Мёртвую” Петлю. Во время полуоборота тангаж принимает значения 0 -> ~90 -> 0 градусов, а крен в верхней точке более-менее плавно увеличивается на ~180 градусов. Причиной тому, очевидно, является то, что тангаж принимает значения от -90 до 90 градусов. Вот пример как крен (Z) ломается при изменении тангажа (X):
pb8vtFj.gif
Нигде в датарефах игры нужные мне значения найдены не были, поэтому было решено идти через математику.

Из игры можно получить кватернион вращения самолёта. Если конвертировать его в градусы по формулам из интернета, получаются те же значения, что игра передаёт как тангаж и крен. Пришла в голову идея конвертировать сперва в вектора направления (forward, left, up), а затем использовать их для конвертации в градусы. С горем да пополам придумал как получать из векторов крен, основываясь каждый раз на информации из предыдущего “кадра”, однако моя идея крайне медленная как для того что должно считаться десятки раз в секунду.
Как конвертировать тангаж я и вовсе не сообразил.

Поэтому вопрос к вам, уважаемые знатоки Хабра, как можно конвертировать в градусы кватернион вращения самолёта так, чтобы всё происходило ожидаемо при любых фигурах пилотажа (например, вираж, бочка, “Мёртвая” Петля, полупетля).

Или, если возможно, как получать нужные значения сразу из игры?
  • Вопрос задан
  • 170 просмотров
Пригласить эксперта
Ответы на вопрос 1
hint000
@hint000
у админа три руки
Думаю, в любом случае один из трёх углов будет "ломаться" - если не крен и не тангаж, тогда рыскание (курс) будет "ломаться" при определённых сочетаниях. Можно в разном порядке вычислять углы, и, насколько я понимаю, "ломаться" будет тот угол, который вычисляется последним. (В формулы не углублялся, просто из общих соображений написал).
По крайней мере, суть явления вот: https://ru.wikipedia.org/wiki/Складывание_рамок
Для любого набора эйлеровых углов существует ровно одно положение связанного с твёрдым телом подвижного трёхгранника относительно неподвижного. Однако обратное утверждение не всегда справедливо. То есть существует такое положение твёрдого тела, при котором невозможно однозначно определить эйлеровы углы. При стандартном выборе эйлеровых углов в виде тангажа, рыскания и крена это особое положение возникает при угле тангажа, равном 90 градусов. Отсюда любое непрерывное вращение, имеющее излом в точке, когда угол тангажа равен 90 градусам, в пространстве углов Эйлера не может быть представлено непрерывной кривой;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы