Modulare Raumschiffsteuerung

8

Ich entwickle ein physikbasiertes Spiel mit Raumschiffen.

Ein Raumschiff besteht aus Kreisen, die durch Gelenke verbunden sind. In einigen Kreisen sind Motoren angebracht.

Motoren können sich um den Mittelpunkt des Kreises drehen und Schub erzeugen. Ich möchte in der Lage sein, das Schiff in eine Richtung zu bewegen oder um einen Punkt zu drehen, indem ich die Drehung und den Schub für jeden der Schiffsmotoren einstelle.

Wie finde ich die Rotation und den Schub, die für jeden Motor erforderlich sind, um dies zu erreichen?

Geben Sie hier die Bildbeschreibung ein

SSS
quelle
1
Bei pid Kontrolle aussehen Vergessen Sie nicht en.wikipedia.org/wiki/PID_controller Dies verhindert unnötige fluctiations (vorübergehende Instabilität) oder unnatürliche Targeting.
Huseyin Tugrul Buyukisik

Antworten:

6

Stellen wir uns die einfache Situation eines Schiffes mit nur einem Motor vor. Um das Schiff zu bewegen, richten wir das Triebwerk einfach von der Richtung weg, in die wir gehen möchten, und stoßen es aus. Das treibt uns in die Richtung, in die wir gehen wollen. Es ist nicht möglich, ein Schiff zu drehen, das nur aus einem Triebwerk besteht.

Skalieren wir unser Schiff auf drei Motoren, um es interessanter zu machen:

Geben Sie hier die Bildbeschreibung ein

Wenn wir dieses Schiff irgendwo nach oben und links bewegen wollten, würden wir einfach alle unsere Triebwerke in die entgegengesetzte Richtung richten und feuern:

Geben Sie hier die Bildbeschreibung ein

Gleiche Lösung wie das einzelne Triebwerk, das sich um die lineare Bewegung kümmert.

Aber was ist, wenn wir ein Triebwerk vermissen? Wir haben eine ungleiche Last?

Geben Sie hier die Bildbeschreibung ein

Wenn Sie der gleichen Strategie folgen, dreht sich das Schiff. In vielen Situationen ist dies meistens unvermeidbar und in einigen Fällen vorzuziehen, da das Schiff für eine bessere Nutzung der verfügbaren Triebwerke ausgerichtet wird.

Eine Strategie, um dies zu mildern, wäre der Ausgleich. Teilen Sie das Schiff entlang der Achse der gewünschten Bewegung auf:

Geben Sie hier die Bildbeschreibung ein

Stellen Sie dann sicher, dass die rechte und die linke Seite gleich sind. Wenn sie die Triebwerksleistung erst skalieren, wenn sie dies tun. Dies kann leicht dazu führen, dass kein Schub ausgeübt wird. Es liegt an Ihnen, zu entscheiden, ob Sie stattdessen eine Rotation verursachen oder den Spieler zwingen möchten, sein Schiff neu zu gestalten, indem Sie seine Triebwerke neu organisieren.

Wie wäre es mit Rotation?

Diese Frage beschreibt die Idee sehr gut.

Geben Sie hier die Bildbeschreibung ein

Sie müssen den Schwerpunkt berechnen . Berechnen Sie dann das von jedem Triebwerk bereitgestellte Drehmoment . Zum Glück drehen sich Ihre Triebwerke, sodass Sie sie drehen können, um ein maximales Drehmoment zu erzielen. Das maximale Drehmoment kommt aus einem rechten Winkel zum Momentarm. Durch Anwenden der Summe der Drehmomente wird der Körper um den Schwerpunkt gedreht. Sie können auch einen anderen beliebigen Drehpunkt wie die Schiffsbrücke auswählen.

Wenn Sie sicherstellen möchten, dass Sie sich an Ort und Stelle drehen , können Sie den Schub der Triebwerke verringern, wodurch sich Ihr Schiff linear bewegt. Sie können dies tun, indem Sie alle Triebwerke mit positivem Drehmoment und alle mit negativem Drehmoment addieren und dann ihre absoluten Werte vergleichen. Die Gruppe mit dem größeren Absolutwert sollte verkleinert werden, um dem Absolutwert der anderen Gruppe zu entsprechen.

Möglicherweise finden Sie auch eine sehr hilfreiche Ressource in Amit Patel .

Geben Sie hier die Bildbeschreibung ein

Er hat hier eine 4-teilige Serie auf konfigurierbaren Raumschiffen gemacht: Teil 1 , Teil 2 , Teil 3 , Teil 4

MichaelHouse
quelle
Hierfür gibt es andere (elegantere) Lösungen. Aber im Idealfall sollten diese Strategien funktionieren, wenn der Spieler gute Designs erstellt. Diese Antwort ist nur als grundlegender Ausgangspunkt für diese Art der Kontrolle gedacht. Es gibt viel Raum für Verbesserungen.
MichaelHouse
-5

Ich bin das mit lokaler Suche gelöst. Es funktioniert, aber die Leistung ist fast schlecht. Vielleicht ist es besser, theoretische Mechanik zu verwenden, aber ich weiß es nicht.

SSS
quelle
4
-1, das ist eine sehr vage Antwort. Können Sie mehr erklären, was Sie tatsächlich getan haben, um das Problem zu lösen?
MichaelHouse