Zmiana orientacji poprzez zastosowanie momentów obrotowych

9

Załóżmy, że masz obiekt swobodnie unoszący się w przestrzeni. Masz wektor, na który ma wskazywać ten obiekt, oraz wektor reprezentujący kierunek, w którym obecnie jest skierowany. Z tych dwóch można uzyskać obrót (macierz, czwartorzęd, cokolwiek), który reprezentuje zmianę orientacji w celu dostosowania dwóch wektorów.

Jeśli masz tylko możliwość zastosowania momentu obrotowego (pochodnej prędkości kątowej) do swojego obiektu, jaki jest dobry algorytm do zastosowania momentu obrotowego w czasie, który nie przekroczy / nie przekroczy celu?

(W tym przypadku jest to statek kosmiczny, który chce automatycznie ustawić się w kierunku podróży za pomocą silników odrzutowych. Rzut nie ma znaczenia.)

Karantza
źródło
Czy próbujesz zoptymalizować zużycie paliwa (całkowity wywierany moment obrotowy) lub prędkość? Ponadto, czy statek zaczyna od zerowej prędkości kątowej na początku tej operacji?
Justin L.,
Optymalizacja prędkości oznaczałaby przyspieszenie prawie nieskończone, a optymalizacja zużycia paliwa oznaczałaby przyspieszenie prawie zerowe. W praktyce wykorzystam kompromis, który wygląda dobrze. Jeśli chodzi o początkową prędkość kątową, mam nadzieję, że będę w stanie uwzględnić ją w obliczeniach w sposób naturalny.
Karantza

Odpowiedzi:

4

Można to traktować podobnie jak w przypadku przyspieszenia liniowego.

Pierwszy fakt, na który należy zwrócić uwagę: ponieważ statek zaczyna od prędkości kątowej równej zero, a chcesz, aby skończył się z prędkością kątową równą zero, oznacza to, że całkowita zmiana prędkości musi wynosić zero.

Z tego wynika, że ​​całka przyspieszenia w czasie musi wynosić zero - musi być dokładnie tyle samo „dużo” przyspieszenia dodatniego, ile jest przyspieszenia ujemnego.

Dlatego każde rozwiązanie musi być ograniczone do tej właściwości: równe „całkowite” przyspieszenie do przodu i do tyłu.

Oto, jak powinien wyglądać kształt wykresu przyspieszenia w czasie:

Wykres przyspieszenia w czasie

Patrząc na to, istnieje wiele możliwych form i kształtów, w których może znajdować się Twoje przyspieszenie! Dokonajmy pewnych założeń dotyczących pożądanego kształtu przyspieszenia, aby dać łatwą / zwięzłą odpowiedź.

Dla prostej odpowiedzi będę miał przyspieszenie w jednym z trzech stanów: do przodu, do tyłu lub zero. Naprzód i wstecz będą miały taką samą wielkość, a stany mogą być przełączane natychmiast. (nie ma stopniowego zwiększania przyspieszenia)

Za pomocą tego równania możesz znaleźć zmianę odległości dla danego przyspieszenia w danym okresie czasu:

s = 0.5*a*t^2

Najprostszym rozwiązaniem byłoby przyspieszenie, aż dojdziesz do połowy, a następnie spowolnienie do końca.

Przyjmiemy Pjako całkowity dystans, który chcesz przemieścić:

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

Więc w zasadzie:

  1. Przyspiesz o adla sqrt(P/a)jednostek czasu (jednostki oparte na twoich jednostkach dla przyspieszenia)
  2. Zwalniaj przy tej samej wartości przez ten sam czas

To nie jedyne rozwiązanie. Dostaniesz się tam w jak najkrótszym czasie ( 2*sqrt(P/a)). Ale co, jeśli chcesz bardziej zrelaksowaną wersję?

W takim przypadku możesz przyspieszyć 1/3 drogi, wybiegać do 1/3 i spowolnić resztę trzeciej. Lub 1/4, wybieg na 1/2, zwalniaj również 1/4.

A może możesz przyspieszyć przez określony czas, a następnie spowolnić przez określony czas, ale zaczekaj, aż dojdziesz do dokładnej pozycji, zanim zaczniesz zwalniać.

Justin L.
źródło
Masz rację, jeśli chodzi o ruch liniowy. Moim głównym zmartwieniem było użycie takiego algorytmu z silnikiem fizyki, który zapewnia mi jedynie kontrolę odchylenia, pochylenia i przechyłu dla momentu obrotowego. Osie te nie są ortogonalne, gdy zaczniesz się obracać, więc liczyłem na lepsze rozwiązanie. Twoje podejście do pomiaru czasu będzie jednak nadal obowiązywać.
Karantza
Ach; przepraszam, nie mogłem zrozumieć twojego pytania. Nie jestem pewien, czy mogę odpowiedzieć dokładniej, nie widząc specyfikacji twojego silnika. Ale czy istnieje sposób na zastosowanie stałego momentu obrotowego w stałym kierunku?
Justin L.,
Tak, twoja odpowiedź jest prawdopodobnie jak najbliższa. Rozwiązałem swój szczególny problem, hakując kwartały, aż dostałem coś, do czego miałby zastosowanie algorytm liniowy. Dzięki!
Karantza