Получение углов Эйлера из кватерниона в Matlab - PullRequest
3 голосов
/ 17 января 2012

У меня есть X, Y, Z и W компоненты кватерниона во времени, в 4 разделенных векторах.

  QW             1x346             2768  double       
  QX             1x346             2768  double
  QY             1x346             2768  double
  QZ             1x346             2768  double              

Я хочу преобразовать в углы Эйлера, чтобы построить 3 компонента Эйлера во времени на трех разных участках, поэтому Мне нужно иметь 3 таких вектора .

  heading(t)          1x346 
  attitude(t)         1x346 
  bank(t)             1x346 

Есть ли в matlab промежуточный способ получить это (я имею в виду функцию с вводом моих 4 векторов и выводом вышеуказанных 3 векторов) или мне нужно написать некоторый код, чтобы выполнить преобразование для каждого временного шага? Заранее спасибо.

1 Ответ

6 голосов
/ 17 января 2012

Я не думаю, что есть встроенная функция Matlab для выполнения того, что вы хотите.

Однако в сообществе пользователей Mathworks есть функция, которую, я считаю, вы ищете. spinCalc Это преобразует между различными типами вращения DCM, углами Эйлера, векторами Эйлера и кватернионами.

Обратите внимание на этот комментарий из вышеприведенного поста относительно наборов углов Эйлера и последовательности вращенияиспользование.

При преобразовании данных в углы Эйлера вы ДОЛЖНЫ убедиться, что переводимая ориентация не находится вблизи сингулярности.Сингулярные множества Эйлера - это ориентации, которые нельзя однозначно преобразовать в 3 переменные в этом конкретном порядке вращения.Сингулярные наборы:

Тип 1 Вращения: 123 - 132 - 213 - 231 - 321 - 312 Единственное число, если второй угол поворота составляет -90 или 90 градусов.

Тип 2 Вращения: 121 - 131 - 212 - 232 - 313 - 323 Единственное число, если второй угол поворота составляет 0 или 180 градусов.

...