Изменение ориентации путем применения крутящих моментов

9

Предположим, у вас есть объект, свободно плавающий в пространстве. У вас есть вектор, на который этот объект должен указывать, и вектор, представляющий направление, в котором он находится в данный момент. Из этих двух можно получить вращение (матрица, кватернион и т. Д.), Представляющее изменение ориентации, чтобы привести два вектора в выравнивание.

Если у вас есть только возможность применить крутящий момент (производная от угловой скорости) к вашему объекту, каков хороший алгоритм для применения крутящего момента во времени, который не будет превышать / не достигать цели?

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

Karantza
источник
Вы пытаетесь оптимизировать расход топлива (общий крутящий момент) или скорость? Кроме того, корабль начинает с нулевой угловой скорости в начале этой операции?
Джастин Л.
Что ж, оптимизация по скорости означала бы почти бесконечное ускорение, а оптимизация по расходу топлива означала бы почти нулевое ускорение. Так что на практике я буду использовать компромисс, который выглядит хорошо. Что касается начальной угловой скорости, надеюсь, я смогу включить ее в расчет естественным образом.
Каранца

Ответы:

4

Это может быть обработано как аналогичный случай для линейного ускорения.

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

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

Следовательно, ваше решение, каким бы оно ни было, должно быть ограничено этим свойством: равное «общее» ускорение вперед и назад.

Вот как должна выглядеть форма вашего графика ускорения во времени:

График ускорения с течением времени

Глядя на это, есть так много возможных форм и форм, в которых ваше ускорение может быть! Давайте сделаем некоторые предположения относительно формы ускорения, которую вы хотите, чтобы дать простой / краткий ответ.

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

Вы можете найти изменение расстояния для данного ускорения за определенный период времени с помощью этого уравнения:

s = 0.5*a*t^2

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

Мы возьмем Pв качестве общего расстояния, которое вы хотите переместить:

s = P/2
P/2 = 0.5*a*t^2
P = a*t^2
t^2 = P/a
t = sqrt(P/a)

Итак, в основном:

  1. Ускорение на в aтечение sqrt(P/a)единиц времени (единицы на основе ваших единиц для ускорения)
  2. Замедлите на одинаковую величину за то же количество времени

Это не единственное решение. Он доставит вас туда в кратчайшие сроки ( 2*sqrt(P/a)). Но что, если вы хотите более расслабленную версию?

В этом случае вы можете ускорить 1/3 пути, развернуться на 1/3 и замедлить оставшуюся часть третьего. Или 1/4, уклон на 1/2, замедление также на 1/4.

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

Джастин Л.
источник
Вы очень правы в отношении линейного движения. Моей главной заботой было использование алгоритма, подобного этому, с физическим движком, который обеспечивает мне только рыскание, наклон и управление креном для крутящего момента. Эти оси не ортогональны, когда вы начинаете вращаться, поэтому я надеялся, что было лучшее решение. Однако ваш подход к выбору времени все равно будет применяться.
Каранца
Ах; извини, я не понял твоего вопроса. Я не уверен, что смогу ответить более подробно, не видя спецификаций вашего двигателя. Но наверняка есть способ применить постоянный крутящий момент в постоянном направлении?
Джастин Л.
Да, ваш ответ, вероятно, как можно ближе. Я решил свою конкретную проблему, взламывая кватернионы, пока не получил что-то, к чему применим линейный алгоритм. Спасибо!
Каранца