Вращающийся кватернион, который находится в системе отсчета другого кватерниона?

У меня есть камера, прикрепленная к самолету.
Вращение 0,0,0 - самолет летит на север, ровно и ровно.
Камера 0,0,0 направлена ​​прямо вперед (через нос).

Когда самолет поворачивает (меняет курс на 270 ° к западу) и уходит в пикирование на 45 °, углы Эйлера для рыскания, тангажа и крена равны (-270, 45, 0).

В этот момент камера находится под теми же углами (-270, 45, 0).
Однако теперь оператор камеры поднимает точку обзора камеры на 90 ° и поворачивает вправо на 90 °.
Моя интуиция подсказывает мне, что теперь камера должна быть направлена ​​(0, 0, 45).
NB Меня не слишком беспокоят признаки вращения, атм

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

Как мне повернуть кватернион относительно текущего 3D вращения другого?

var absoloutePlatform = Quaternion.RotationYawPitchRoll((float)ToRadians(yaw), (float)ToRadians(pitch), (float)ToRadians(roll));
var relativeSensor = Quaternion.RotationYawPitchRoll((float)ToRadians(yaw2), (float)ToRadians(pitch2), (float)ToRadians(roll2));

var absoluteQuaterion = [[ some calculation! ]]

var absoluteSensorAngles = absoluteQuaterion.GetYawPitchRoll();

person DefenestrationDay    schedule 13.06.2021    source источник
comment
Чтобы подтвердить, relativeSensor * absoloutePlatform это не то, что вы имеете в виду? Я действительно не понимаю, что еще вы могли иметь в виду   -  person harold    schedule 13.06.2021
comment
@harold: Это то, что я изначально подумал, читая вокруг, но углы - это все чокнутые ..   -  person DefenestrationDay    schedule 13.06.2021


Ответы (1)


Все это произошло из-за неясного понимания того, какой «стандарт» использовать при преобразовании кватернионов в Эйлера.

Я конвертирую вращение моей платформы / самолета (мира) из Эйлера в кватернион.
Затем конвертирую мои относительные углы сенсора (из ссылки на платформу) в кватернион.

Я умножаю их вместе

var resultQ = platformQ * sensorQ;

Затем преобразуйте результат обратно в формат Эйлера, используя порядок вращения zyx.

Это дает поворот датчика в мировой системе отсчета.
Может быть, это стандарт в авиации - я не знаю.
Но короткий ответ - да, чтобы повернуть кватернион по отношению к другому: вы умножьте их вместе.

person DefenestrationDay    schedule 16.06.2021