Contrôle de vaisseau spatial modulaire

8

Je développe un jeu basé sur la physique avec des vaisseaux spatiaux.

Un vaisseau spatial est construit à partir de cercles reliés par des articulations. Certains cercles ont des moteurs attachés.

Les moteurs peuvent tourner autour du centre du cercle et créer une poussée. Je veux pouvoir déplacer le navire dans une direction ou tourner autour d'un point en définissant la rotation et la poussée pour chacun des moteurs du navire.

Comment puis-je trouver la rotation et la poussée nécessaires pour chaque moteur pour y parvenir?

entrez la description de l'image ici

SSS
la source
1
N'oubliez pas de regarder le contrôle pid en.wikipedia.org/wiki/PID_controller cela empêche les fluctuations inutiles (instabilité temporaire) ou le ciblage artificiel.
huseyin tugrul buyukisik

Réponses:

6

Imaginons la situation simple d'un navire avec un seul moteur. Afin de déplacer le navire, nous pointons simplement le propulseur loin de la direction dans laquelle nous voulons aller, et nous le poussons. Cela nous pousse dans la direction que nous voulons prendre. Il n'est pas possible de faire tourner un navire composé d'un seul propulseur.

Permet de dimensionner notre navire à trois moteurs pour le rendre plus intéressant:

entrez la description de l'image ici

Si nous voulions déplacer ce vaisseau quelque part vers le haut et vers la gauche, nous pointerions simplement tous nos propulseurs dans la direction opposée et tirer:

entrez la description de l'image ici

Même solution que le propulseur simple qui prend en charge le mouvement linéaire.

Mais qu'en est-il si nous manquons un propulseur? Nous avons une charge inégale?

entrez la description de l'image ici

Suivre la même stratégie entraînera la rotation du navire. Dans de nombreuses situations, cela sera principalement inévitable, et dans certains cas préférable car il orientera le navire pour une meilleure utilisation des propulseurs disponibles.

Une stratégie d'atténuation serait la péréquation. Divisez le navire sur l'axe du mouvement souhaité:

entrez la description de l'image ici

Assurez-vous ensuite que le côté droit et le côté gauche sont égaux. S'ils ne mettent pas à l'échelle la sortie du propulseur jusqu'à ce qu'ils le fassent. Cela peut facilement entraîner aucune poussée appliquée. C'est à vous de décider si vous voulez au lieu de cela lancer la rotation ou forcer le joueur à repenser son vaisseau en réorganisant ses propulseurs.

Et la rotation?

Cette question décrit très bien l'idée.

entrez la description de l'image ici

Vous devrez calculer le centre de masse . Calculez ensuite le couple fourni par chaque propulseur. Heureusement pour vous, vos propulseurs tournent, vous pouvez donc les faire tourner pour fournir un couple maximal. Le couple maximal proviendra d'un angle droit au bras de moment. L'application de la somme des couples fera tourner le corps autour du centre de masse. Vous pouvez également choisir un autre point de rotation arbitraire comme le pont du navire.

Si vous voulez vous assurer que vous tournez en place, vous pouvez réduire la poussée des propulseurs qui entraînera le déplacement linéaire de votre navire. Vous pouvez le faire en additionnant tous les propulseurs qui ont un couple positif et tous ceux qui ont un couple négatif, puis comparez leurs valeurs absolues. Le groupe avec la plus grande valeur absolue doit être réduit pour correspondre à la valeur absolue de l'autre groupe.

Vous pouvez également trouver une ressource très utile dans Amit Patel .

entrez la description de l'image ici

Il a fait une série de 4 parties sur les vaisseaux spatiaux configurables ici: partie 1 , partie 2 , partie 3 , partie 4

MichaelHouse
la source
Il existe d'autres solutions (plus élégantes) à cela. Mais idéalement, si le joueur crée de bons designs, ces stratégies devraient fonctionner. Cette réponse ne sert que de point de départ de base pour ce type de contrôle. Il y a beaucoup de place pour l'amélioration.
MichaelHouse
-5

Je suis résolu cela avec la recherche locale. Cela fonctionne, mais les performances sont presque mauvaises. Peut-être vaut-il mieux utiliser la mécanique théorique mais je ne le sais pas.

SSS
la source
4
-1, c'est une réponse très vague. Pouvez-vous expliquer davantage ce que vous avez réellement fait pour résoudre le problème?
MichaelHouse