Зміна орієнтації шляхом застосування крутних моментів


9

Припустимо, у вас об’єкт вільно плаває в просторі. У вас є вектор, на який ви хочете вказувати цей об'єкт, і вектор, що представляє напрямок, в який він зараз знаходиться. З цих двох можна отримати обертання (матрицю, кватерніон, що завгодно), що представляє зміну орієнтації для приведення двох векторів у вирівнювання.

Якщо у вас є лише можливість застосувати крутний момент (похідна кутової швидкості) до вашого об'єкта, який хороший алгоритм застосування крутного моменту протягом часу, який не перекриє / не підкреслює призначення?

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


Ви намагаєтесь оптимізувати використання палива (загальний обертається крутний момент) або швидкість? Також, чи судно починає з нульовою кутовою швидкістю на початку цієї операції?
Джастін Л.

Ну, оптимізувати для швидкості було б мати нескінченне сусідське прискорення, а оптимізувати для використання палива було б мати майже нульове прискорення. Тож на практиці я буду використовувати компроміс, який виглядає добре. Що стосується стартової кутової швидкості, то, сподіваюся, я зможу включити її у розрахунок природно.
Каранца

Відповіді:


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.

Або, можливо, ви могли б прискорити за фіксовану кількість часу, а потім сповільнитись протягом певного часу, але зачекайте, поки ви приїдете в точну позицію, перш ніж ви почнете зменшувати.


Ви дуже правильно ставитесь до цього випадку лінійного руху. Моя головна проблема - використання подібного алгоритму з фізичним двигуном, який забезпечує мені лише контроль рівня кручення, нахилу та кочення для крутного моменту. Ці осі не є ортогональними, коли ви починаєте обертатись, тому я сподівався, що буде краще рішення. Однак ваш підхід до термінів все ще застосовуватиметься незалежно.
Каранца

Ах; вибачте, я, мабуть, не зрозумів вашого запитання. Я не впевнений, що зможу відповісти більш ретельно, не побачивши специфікацій вашого двигуна. Але напевно є спосіб застосувати постійний крутний момент у постійному напрямку?
Джастін Л.

Так, ваша відповідь, мабуть, максимально близька. Я вирішив свою конкретну проблему, взломивши кватерніони, поки не отримав те, до чого застосував би лінійний алгоритм. Дякую!
Каранца
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.