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

Aug 20 2020

Для объектов с плавающей базой вращение в обобщенном положении выражается четырехмерным кватернионом. Однако вращение в обобщенной скорости по-прежнему выражается как трехмерный вектор пространственного вращения.

Есть ли рекомендуемый способ их ограничения, например, для обратного Эйлера?

prog.AddConstraint(eq(q[t+1], q[t] + h[t] * qd[t+1]))

Уместно ли преобразовывать угловую скорость в кватернионную форму, например здесь ?

Или, как выразился Джон Т. Беттс в книге «Практические методы оптимального управления и оценивания с использованием нелинейного программирования».

Ответы

1 HongkaiDai Aug 21 2020 at 00:16

Я думаю, что для вашего варианта использования вы хотите наложить ограничение интеграции между соседними путевыми точками при планировании. В этом случае я бы не предлагал q[n] = q[n+1] - qdot[n+1] * dtнапрямую использовать интеграцию Эйлера . Причина в том, что кватернион всегда должен удовлетворять ограничению на единицу длины (т. Е. q[n]И q[n+1]оба находятся на поверхности единичной сферы в 4D). Следовательно, производная qdotпо времени находится вдоль касательной поверхности этой единичной сферы, а именно q[n+1] - qdot[n+1] * dtна этой касательной поверхности. Никакая точка (кроме q[n+1]) на касательной поверхности также не находится на поверхности единичной окружности. Следовательно, ограничение q[n+1] = q[n] + qdot[n+1] * dtможет быть выполнено только тогда dt=0, когда вы соедините его с ограничением | q [n] | = | q [n + 1] | = 1. Графически вы можете использовать фигуру в разделе "касательная к окружности"https://www.toppr.com/guides/maths/circles/tangents-to-the-circle/. Обратите внимание, что он q[n+1] - qdot[n+1] * dtнаходится на касательной к сфере и q[n]на окружности, так что у вас не может быть q[n] = q[n+1] - qdot[n+1] * dt.

Вместо этого я бы предложил рассмотреть следующее условие

q[n+1] = q[n] ⊗ Δq

где q[n]- кватернион плавучей базы в n'й путевой точке, q[n+1]это кватернион плавучей базы в n+1' й путевой точке. является гамильтоновым произведением двух кватернионов q[n]и Δq. Итак, здесь вам нужно вычислить Δq из угловой скорости.

Предположим, что средняя угловая скорость между n-й и n + 1-й путевыми точками равна ω ∈ ℝ³. Это означает, что плавающая база вращается вокруг оси a = ω/|ω|со скоростью |ω|, следовательно,

Δq = [cos(|ω|Δt/2), a*sin(|ω|Δt/2)]

Видеть https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Using_quaternion_as_rotations для объяснения приведенного выше уравнения.

Если вы используете ω[n+1]в качестве средней угловой скорости от n-й путевой точки до n + 1-й путевой точки (аналогично использованию v [n + 1] в обратном Эйлере), то ваше интеграционное ограничение будет

q[n+1] = q[n] ⊗ [cos(|ω[n+1]|Δt/2), a*sin(|ω[n+1]|Δt/2)]

Вы также можете использовать другие величины, например, как среднюю угловую скорость (ω[n] + ω[n+1])/2.