Понимание Angular скоростей и их применение - PullRequest
1 голос
/ 20 апреля 2020

Мне недавно пришлось конвертировать скорости вращения Эйлера в векторную angular скорость. Из того, что я понимаю, в локальной референции мы можем express векторную angular скорость:

R = [rollRate, pitchRate, yawRate] (which is the correct order relative to the referential I want to use).

Я также знаю, что мы можем преобразовать angular скорости в вращения (кватернионы) для заданный временной шаг через:

alpha = |R| * ts
nR = R / |R| * sin(alpha) <-- normalize and multiply each element by sin(alpha)
Q = [nRx i, nRy j, nRz k, cos(alpha)]

Когда я проверяю это для каждой оси индивидуально, я нахожу результаты, которые я полностью ожидаю (то есть шаг 90 ° / единица времени для 1 единицы времени => угол шага 90 ° ).

Когда я использую две оси для своих скоростей вращения, я не до конца понимаю результаты:

Например, если я использую rollRate = 0, pitchRate = 90, yawRate = 90, применив вращение для заданного временного шага и преобразовав полученный кватернион обратно в эйлер, я получаю следующие результаты:

(ts = 0.1)  Roll:  0.712676, Pitch:  8.96267, Yaw:   9.07438
(ts = 0.5)  Roll: 21.058,    Pitch: 39.3148,  Yaw:  54.9771
(ts = 1.0)  Roll: 76.2033,   Pitch: 34.2386,  Yaw: 137.111

I Понимаю, что «плавное» непрерывное вращение может изменить компонент ролика в середине

Что я не понимаю, тем не менее, после полной единицы времени с pitchRate в единицах времени 90 ° / единица времени в сочетании с yawRate в единицах времени 90 ° / я заканчиваю с этими углами шага и рыскания и почему у меня еще есть крен (я бы ожидал, что они окажутся в [0 °, 90 °, 90 °].

Я довольно уверен как по моей оси + угол к кватерниону, так и по моему кватерниону по формулам Эйлера, пока я '' Я проверил их всесторонне (как с помощью юнит-тестирования, так и с помощью полевых испытаний), однако я не уверен насчет скорости вращения Эйлера в angular -скорость "конверсии".

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

1 Ответ

1 голос
/ 24 апреля 2020

Углы Эйлера не являются хорошим способом представления произвольного angular движения. Это просто упрощение, используемое для графики, игр и робототехники. Они получили довольно жесткие ограничения, например, ваши вращения состоят только из N перпендикулярных осей в ND пространстве. Это не так, как вращение работает в реальном мире. Вдобавок к этому сферическому представлению конечной точки репер, он создает много сингулярностей (вы знаете, когда вы пересекаете полюса ...).

Движение вращения аналогично переводу:

position       speed                    acceleration
pos = Integral(vel) = Integral(Integral(acc))
ang = Integral(omg) = Integral(Integral(eps))

Что в некотором обновлении таймер можно переписать так:

vel+=acc*dt; pos+=vel*dt;
omg+=eps*dt; ang+=omg*dt;

, где dt - истекшее время (интервал таймера).

Проблема с вращением состоит в том, что вы не можете наложить его как перевод. Поскольку каждое вращение имеет свою собственную ось (и его не нужно выравнивать по оси или центрировать), и каждое вращение также влияет на ориентацию оси всех остальных, поэтому их порядок имеет большое значение. Вдобавок ко всему этому есть также гироскопический момент c, создающий 3-е вращение из любых двух, не имеющих параллельной оси. Соберите все это вместе, и вдруг вы увидите, что углы Эйлера не соответствуют реальной геометрии / физике вращения. Они могут описывать ориентацию и воспроизводить ее вращение до некоторой степени, но не ожидают, что она будет иметь реальный смысл , когда-то использованная для моделирования c.

Реальное моделирование потребовало бы списка описанных вращений по оси (не только направление, но и начало координат), скорость angular (и ее изменение) и на каждом шаге моделирования пересчет оси по мере ее изменения (если не присутствует только один поворот).

Это можно сделать, используя кумулятивные матрицы однородного преобразования вместе с инкрементными поворотами.

К сожалению, большинство программистов предпочитают углы Эйлера и кватернионы, просто не зная, что есть лучшие и более простые варианты, и, как только они это сделают, они все равно придерживаются углов Эйлера, поскольку математическая математика кажется им более сложной ... Вот почему большинство современных игр имеют блокировки карданного подвеса, серьезные ошибки вращения и глюки, нереалистичная физика c.

Не поймите меня неправильно, они по-прежнему имеют свое применение (например, ограничивают свободный взгляд для камеры et * 1032) * ... но они неправильно использовали вещи, для которых они являются худшим вариантом.

...