Modifica dell'orientamento mediante l'applicazione di coppie


9

Supponiamo di avere un oggetto fluttuante liberamente nello spazio. Hai un vettore verso cui vuoi puntare questo oggetto e un vettore che rappresenta la direzione verso cui è attualmente rivolto. Da questi due, è possibile ottenere la rotazione (matrice, quaternione, qualunque cosa) che rappresenta il cambiamento di orientamento per allineare i due vettori.

Se hai solo la possibilità di applicare la coppia (derivata della velocità angolare) al tuo oggetto, qual è un buon algoritmo per applicare la coppia nel tempo che non supererà / scenderà la destinazione?

(In questo caso, è una nave spaziale che vuole orientarsi automaticamente nella direzione di marcia usando i propulsori. Il rollio è irrilevante.)


Stai cercando di ottimizzare il consumo di carburante (coppia totale esercitata) o la velocità? Inoltre, la nave inizia con velocità angolare zero all'inizio di questa operazione?
Justin L.,

Bene, ottimizzare per la velocità significherebbe avere un'accelerazione quasi infinita, e ottimizzare per l'uso del carburante sarebbe avere un'accelerazione quasi zero. Quindi, in pratica, userò un compromesso che sembra buono. Per quanto riguarda l'avvio della velocità angolare, spero di poterlo includere naturalmente nel calcolo.
Karantza,

Risposte:


4

Questo può essere gestito come il caso simile per l'accelerazione lineare.

Primo fatto da notare: poiché la nave inizia con una velocità angolare pari a zero, e si desidera che finisca con una velocità angolare pari a zero, ciò significa che la variazione totale della velocità deve essere uguale a zero.

Da questo possiamo vedere che l'integrale dell'accelerazione nel tempo deve essere uguale a zero - ci deve essere esattamente "tanto" accelerazione positiva quanto vi è accelerazione negativa.

Pertanto, la tua soluzione, qualunque essa sia, deve essere vincolata a questa proprietà: uguale accelerazione "totale" avanti e indietro.

Ecco cosa dovrebbe seguire la forma della tua accelerazione nel tempo:

Grafico dell'accelerazione nel tempo

Guardando questo, ci sono così tante forme e forme possibili nella tua accelerazione! Facciamo alcune ipotesi sulla forma di accelerazione che desideri, al fine di dare una risposta facile / concisa.

Per una semplice risposta, avrò l'accelerazione in uno dei tre stati: avanti, indietro o zero. Avanti e indietro avranno la stessa ampiezza e gli stati possono essere commutati istantaneamente. (non c'è graduale accelerazione dell'accelerazione)

Puoi trovare la variazione di distanza per una determinata accelerazione in un determinato periodo di tempo con questa equazione:

s = 0.5*a*t^2

La soluzione più semplice qui sarebbe quella di accelerare fino a raggiungere il punto a metà strada, quindi rallentare il resto del percorso.

Prenderemo Pcome distanza totale che vuoi spostare:

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

Quindi in poche parole:

  1. Accelera a aper sqrt(P/a)unità di tempo (unità basate sulle tue unità per l'accelerazione)
  2. Decelerare alla stessa grandezza per la stessa quantità di tempo

Questa non è l'unica soluzione. Ti porterà lì nel più breve tempo ( 2*sqrt(P/a)). E se volessi una versione più rilassata?

In questo caso, puoi accelerare 1/3 del percorso, costeggiare il 1/3 e decelerare il resto del terzo. Oppure 1/4 °, costa per 1/2, rallenta anche 1/4 °.

O forse potresti accelerare per un determinato periodo di tempo, quindi decelerare per un determinato periodo di tempo, ma attendi che arrivi alla posizione esatta prima di iniziare a rallentare.


Hai ragione sul fatto che questo sia il caso del movimento lineare. La mia preoccupazione principale era usare un algoritmo come questo con un motore fisico che mi fornisce solo controllo di imbardata, beccheggio e rollio per la coppia. Quegli assi non sono ortogonali una volta che inizi a ruotare, quindi speravo che ci fosse una soluzione migliore. Il tuo approccio alla tempistica, tuttavia, si applicherà comunque a prescindere.
Karantza,

ah; scusa, non devo aver capito la tua domanda. Non sono sicuro di poter rispondere in modo più approfondito senza vedere le specifiche del tuo motore. Ma sicuramente c'è un modo per applicare una coppia costante in una direzione costante?
Justin L.,

Sì, la tua risposta è probabilmente il più vicino possibile. Ho risolto il mio problema particolare hackerando i quaternioni fino a quando non ho ottenuto qualcosa a cui si sarebbe applicato l'algoritmo lineare. Grazie!
Karantza,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.