Controllo modulare dell'astronave


8

Sto sviluppando un gioco basato sulla fisica con astronavi.

Un'astronave è costruita da cerchi collegati da giunti. Alcuni dei cerchi hanno motori collegati.

I motori possono ruotare attorno al centro del cerchio e creare spinta. Voglio essere in grado di muovere la nave in una direzione o ruotare attorno a un punto impostando la rotazione e la spinta per ciascuno dei motori della nave.

Come posso trovare la rotazione e la spinta necessarie per ogni motore per raggiungere questo obiettivo?

inserisci qui la descrizione dell'immagine



1
Non dimenticare di guardare il controllo pid en.wikipedia.org/wiki/PID_controller per evitare fluttuazioni non necessarie (instabilità temporanea) o targeting innaturale.
huseyin tugrul buyukisik,

Risposte:


6

Immaginiamo la semplice situazione di una nave con un solo motore. Al fine di spostare la nave, puntiamo semplicemente il propulsore lontano dalla direzione in cui vogliamo andare e lo spingiamo fuori. Questo ci spinge nella direzione in cui vogliamo andare. Non è possibile ruotare una nave composta da un solo propulsore.

Ridimensioniamo la nostra nave su tre motori per renderlo più interessante:

inserisci qui la descrizione dell'immagine

Se volessimo spostare questa nave da qualche parte verso l'alto e verso sinistra, avremmo semplicemente puntato tutti i nostri propulsori nella direzione opposta e il fuoco:

inserisci qui la descrizione dell'immagine

Stessa soluzione del singolo propulsore che si occupa del movimento lineare.

Ma cosa succede se ci manca un propulsore? Abbiamo un carico disuguale?

inserisci qui la descrizione dell'immagine

Seguire la stessa strategia farà ruotare la nave. In molte situazioni, ciò sarà per lo più inevitabile, e in alcuni casi preferibile poiché orienterà la nave per un migliore utilizzo dei propulsori disponibili.

Una strategia per mitigare questo sarebbe l'equalizzazione. Dividi la nave lungo l'asse del movimento desiderato:

inserisci qui la descrizione dell'immagine

Quindi assicurarsi che il lato destro e il lato sinistro siano uguali. Se non ridimensionano l'uscita del propulsore fino a quando non lo fanno. Ciò può facilmente comportare l'applicazione di nessuna spinta. Sta a te decidere se vuoi invece lanciarti provocando la rotazione o forzare il giocatore a ridisegnare la sua nave riorganizzando i suoi propulsori.

Che ne dici di rotazione?

Questa domanda descrive molto bene l'idea.

inserisci qui la descrizione dell'immagine

Dovrai calcolare il centro di massa . Quindi calcolare la coppia fornita da ciascun propulsore. Fortunatamente per te, i tuoi propulsori ruotano, quindi puoi ruotarli per fornire la massima coppia. La coppia massima verrà da un angolo retto al braccio del momento. Applicando la somma delle coppie si ruoterà il corpo attorno al centro di massa. Puoi anche scegliere qualche altro punto di rotazione arbitrario come il ponte della nave.

Se vuoi assicurarti di ruotare in posizione puoi ridimensionare la spinta dei propulsori che faranno muovere la tua nave in modo lineare. Puoi farlo sommando tutti i propulsori che hanno una coppia positiva e tutti quelli con una coppia negativa, quindi confrontare i loro valori assoluti. Il gruppo con il valore assoluto più grande deve essere ridimensionato per corrispondere al valore assoluto dell'altro gruppo.

È inoltre possibile trovare una risorsa molto utile in Amit Patel .

inserisci qui la descrizione dell'immagine

Ha fatto una serie di 4 parti su navi spaziali configurabili qui: parte 1 , parte 2 , parte 3 , parte 4


Ci sono altre soluzioni (più eleganti) a questo. Ma idealmente, se il giocatore crea buoni progetti, queste strategie dovrebbero funzionare. Questa risposta è intesa solo come punto di partenza di base per questo tipo di controllo. C'è molto margine di miglioramento.
MichaelHouse

-5

Ho risolto questo con la ricerca locale. Funziona, ma le prestazioni sono quasi pessime. Forse è meglio usare la meccanica teorica ma non lo so.


4
-1, questa è una risposta molto vaga. Puoi spiegare di più cosa hai effettivamente fatto per risolvere il problema?
MichaelHouse
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.