Как рассчитать углы крена, рыскания и тангажа по трехмерным координатам (углы Эйлера)

Я оцифровал видео полета мухи в трехмерном пространстве.

Во все моменты времени я знаю координаты x, y и z следующих точек на теле мухи ---

введите описание изображения здесь

Точки — это мой выбор, и их можно размещать где угодно и сколько угодно раз.

Теперь, используя эти точки, я хочу узнать углы тела (рысканье, тангаж и крен) мухи относительно фиксированной оси.

Я пробовал следующее (что я считаю неправильным).

  1. Используя голову и хвост в качестве головного вектора --- я вычислил угол этого вектора с осью Z. И я назвал это полем. Но это сработает только при определенных обстоятельствах... не хочу вдаваться в подробности.
  2. Я сделал то же самое, что и выше, для крена, за исключением того, что я использовал два основания крыльев в качестве вектора, а затем вычислил угол этого вектора с осью Z.

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

http://mathworld.wolfram.com/EulerAngles.html

Но я не знаю, как поступить со всеми имеющимися у меня 3D-координатами. Небольшое направление поможет.....

Использование векторов «хвост-голова» и «крыло-крыло» — правильное решение — вам просто нужно изменить порядок (и признать, что всегда будут определенные ориентации, которые ведут к «карданному замку». Я бы посмотрел вниз сверху, повернул вектор головы вокруг Z сначала (направьте в плоскость XZ), затем наклоните его, чтобы он указывал вдоль оси Z, и, наконец, поверните вектор крыла (теперь указывающий в другом направлении) вдоль оси X. Это дает вам уникальную матрицу вращения из из которых можно получить углы Эйлера.

Ответы (1)

Найдите вектор, идущий от хвоста к голове, и нормализуйте его: вызовите результат Z ^ .

Найдите вектор, соединяющий точку левого крыла с точкой правого крыла, и нормализуйте его: вызовите результат Д ^ .

Необязательно: проверьте работоспособность Д ^ , Z ^ "=" 0

Теперь рассчитайте Икс ^ "=" Д ^ × Z ^ .

Соберите три вектора как векторы -столбцы в матрицу U "=" ( Икс ^ Д ^ Z ^ ) . Это матрица вращения, которая вращает вашу ссылку Икс ^ , Д ^ , Z ^ основу в основу, выровненную по мухе.

Чтобы преобразовать в углы, нам нужно вычислить ось вращения и угол поворота. Это проще всего сделать, взглянув на формулу Родригеса для общего члена. опыт ( ЧАС 3 × 3 ) из С О ( 3 ) "назад"

(1) опыт ( ЧАС 3 × 3 ) "=" я 3 × 3 + грех ( | | ЧАС 3 × 3 | | ) | | ЧАС 3 × 3 | | ЧАС 3 × 3 + 1 потому что ( | | ЧАС 3 × 3 | | ) | | ЧАС 3 × 3 | | 2 ЧАС 3 × 3 2

где:

(2) ЧАС 3 × 3 "=" ( 0 г у г 0 Икс у Икс 0 )

и

(3) | | ЧАС 3 × 3 | | "=" Икс 2 + у 2 + у 2

где Икс , у , г компоненты оси вращения и Икс 2 + у 2 + у 2 угол поворота в радианах. ЧАС 3 × 3 является членом алгебры Ли с о ( 3 ) что возводится в степень к матрице вращения.

Итак, берем матрицу U вы нашли выше и сравните его с (1): вы можете видеть в (1), что кососимметричная часть:

(4) 1 2 ( U U Т ) "=" грех ( | | ЧАС 3 × 3 | | ) | | ЧАС 3 × 3 | | ЧАС 3 × 3

и это позволит вам прочитать ЧАС 3 × 3 и угол поворота | | ЧАС 3 × 3 | | .

Между прочим, если бы вы делали это, чтобы построить систему слежения за мухой, вам нужно было бы сделать что-то вроде поиска наименьших квадратов, наиболее подходящих для векторов. Z ^ и Д ^ : векторы необработанных данных не будут полностью ортогональны из-за зашумленных данных. Кроме того, вы можете выбрать 3 точки на лету, отследить их и найти Z ^ и Д ^ как ортогональное основание для трех сторон треугольника. Тогда вам не нужно было бы лучше всего подходить методом наименьших квадратов, но ваше отслеживание может быть менее точным.

Что касается «соответствия наименьших квадратов» - я согласен, что два вектора не будут (вполне) ортогональными, и что метод наименьших квадратов (или вычитание проекции b на a из b и ренормализация, если a считается опорным направлением) является хороший подход.
@WetSavanna & Floris Меня немного смущает то, что вы подразумеваете под «где x, y, z - компоненты оси вращения». X, y и z - углы поворота, необходимые для преобразования оси вращения в фиксированную. Если да, то каков порядок преобразования? Кроме того, я искал внутреннее вращение с углами Брайана Тейта. Скорее, сначала поверните вокруг x, затем y, а затем z. Так что я мог бы назвать их тангаж, крен и рыскание. Обеспечивает ли ваше решение такие углы?
@BlackDagger Координаты, которые я показал вам, - это ось вращения и один угол. Я называю эти координаты «геодезическими» или «экспоненциальными» координатами для группы Ли. С О ( 3 ) . В данный момент я немного занят, чтобы написать полный ответ на преобразование: посмотрите, что вы можете найти, и если у вас не будет успеха, я свяжусь с вами. Если я забуду, вы можете найти мои контактные данные на моем веб-сайте, поэтому напишите мне.
@BlackDagger Я должен думать, что эта статья даст вам то, что вам нужно, как только вы Д ^ и Z ^ Не то, чтобы там обсуждались аспекты Тейта Брайана. Эти последние называются также каноническими координатами второго рода для С О ( 3 ) (найденные мною выше геодезические координаты также называются "каноническими координатами первого рода").
@WetSavannaAnimalakaRodVance Нужна ваша помощь! --- физика.stackexchange.com/questions /123522/…