Implementierung von Kollisionsvermeidung zu 100%


21

Ich bin ein absoluter Anfänger in der Spieleentwicklung und alles, was ich über Kollisionsvermeidung / -lösung weiß, habe ich in der letzten Woche auf oder über diese Website gelernt. Also zögern Sie nicht, mich zu korrigieren, wenn ich hier etwas frage basierend auf falschen Annahmen / Missverständnissen. Ich habe mein Bestes getan, um klar zu sein, aber das Thema ist für mich immer noch neu.

Fahrzeuge

In meinem Spiel habe ich Fahrzeuge, die sich autonom bewegen. Sie befinden sich in einem 3D-Raum und ihre Bewegung wird von einer Reihe von Variablen bestimmt, die für jedes Fahrzeug unterschiedlich sind. Die hier von Interesse sind in erster Linie:

  • Nur Vorwärtsbewegung .
  • Eine Geschwindigkeit , die zwischen min und max variieren kann, deren min aber nicht (sogar nahe bei) Null liegt.
  • Ein Lenkradius , der von der Geschwindigkeit (die höhere Geschwindigkeit ist , desto größer Radius) abhängig ist ,
  • Zwei maximale Beschleunigungen (zum Verringern und Erhöhen der Geschwindigkeit)

Tor

Mein Ziel ist es, eine Art KI zu implementieren, die eine 100% genaue Kollisionsvermeidung ermöglicht (dh ich bin sicher, dass die Fahrzeuge niemals kollidieren werden).

Design

  • Obwohl ich lieber die Idee hätte, die KI "an Bord" zu haben (dh jedes Fahrzeug hat eine eigene "Kollisionsvermeidungs-KI", die eventuell Nachrichten abfragt und / oder an andere Fahrzeuge sendet), ist es mir auch möglich, die KI der CA unter zu implementieren eine zentrale Ebene (Versenden von Befehlen an die Fahrzeuge).
  • In den meisten Fällen muss das Fahrzeug lediglich in eine beliebige Richtung ausweichen, aber unter bestimmten Umständen müssen sie eine Kollision vermeiden und auf dasselbe Ziel zufahren

Was ich bisher gefunden habe und wo ich stecken geblieben bin

Innerhalb der vielen vielen Links, die ich in anderen Fragen auf dieser Site gefunden habe, habe ich insbesondere diese gefunden:

  1. Kollision zwischen Billardkugeln
  2. Nicht ausgerichtete Kollisionsvermeidung
  3. Anstehen

Obwohl diese drei Links in vielerlei Hinsicht "meine Augen geöffnet" haben, ist mir nicht sofort klar, wie ich diese Informationen in meinem Fall verwenden soll. Insbesondere "versucht" Artikel 2 nur, eine Kollision zu verhindern (Kollisionen treten jedoch von Zeit zu Zeit auf). Während Artikel 3 manchmal Fahrzeuge anhalten muss, um Kollisionen zu vermeiden.

Was mir auch aufgefallen ist, ist, dass die oben verknüpften Kollisionsvermeidungsalgorithmen eine "Sofortprojektion" der Lineargeschwindigkeit verwenden, um zu überprüfen, ob sich etwas auf dem Weg des Fahrzeugs befindet. Ich habe mich gefragt, ob dies in meinem Fall ausreicht oder ob ich meine Position realistischer projizieren muss (z. B .: Wenn ich 60 ° in eine Lenkung von 90 ° nach rechts bin, sollte ich meine Position für den Rest der Position berechnen 30 ° der Kurve und dann unter der Annahme einer linearen Bewegung).

Schließlich habe ich besonders Angst vor Deadlocks . Mit anderen Worten: Obwohl die Dichte der Fahrzeuge auf der Welt relativ gering sein wird, befürchte ich, dass bei einer bestimmten Anzahl von Fahrzeugen, die sich dem gleichen Punkt annähern, keine Ausweichmanöver möglich sein werden, sobald sie feststellen, dass sie sich auf einem Kollisionskurs befinden als würde es das Fahrzeug auf einen Kollisionsweg mit einigen anderen bringen.

Frage

Wie kann ich mein "Ziel" erreichen? Eine ausführliche Erklärung wird natürlich sehr geschätzt, aber Links zu externen Ressourcen wären auch eine große Hilfe (Ich bin mir sicher, dass ich nicht der Erste mit diesem Problem bin, aber wahrscheinlich habe ich die falschen Keywords verwendet, um im Web zu suchen? )

Vielen Dank im Voraus für deine Hilfe!


20
Lassen Sie jedes Fahrzeug anhalten. 100% Vermeidung erreicht.
Martin Sojka

2
Es ist genug, wenn sie relativ zueinander aufhören. Das heißt, sie bewegen sich alle in genau die gleiche Richtung und mit genau der gleichen Geschwindigkeit. Das größere Problem ist, dass es (nachweislich) UNMÖGLICH ist, einen Algorithmus zu erreichen, der dies für jede mögliche Konfiguration mit einer Rate von 100% ausführt. Angenommen, zwei Fahrzeuge mit sehr großen Kurvenradien in einem Mindestabstand ungleich Null fliegen mit maximaler Geschwindigkeit aufeinander zu.
Martin Sojka

12
@mac - Eine Sache, die Sie bei der Entwicklung dieses Algorithmus beachten sollten, ist, dass es ein Spiel ist. Wenn Sie zu viel Zeit damit verbringen, dieses Problem zu lösen, versuchen Sie möglicherweise, das falsche Problem zu lösen. Sie können betrügen - Fahrzeuge bewegen oder deren Handhabungsregeln verletzen, wenn Sie eine schwierige Situation feststellen, insbesondere wenn der Spieler sie nicht sieht. Stellen Sie sicher, dass die Regeln für das Fahrzeughandling nicht langweilig werden. Es ist wichtiger, unterhaltsam zu sein als richtig zu liegen.
Flip

3
@mac Naja ich würde wohl einen Global Controller mit A * verwenden. Ich weiß, dass Sie sich von dieser Lösung fernhalten wollten, aber es ist sinnvoller, eine globale Sicht auf die Fahrzeuge zu haben und Wege vorausberechnen zu können. Möglicherweise möchten Sie auch Fahrzeugen eine Priorität zuweisen (diejenige, die dem Ziel am nächsten ist, erhält eine höhere Priorität, sodass der Pfad unverändert bleibt und andere sie umleiten).
Jonathan Connell

6
@Flip Ein Flugsimulator wird immer noch als Spiel betrachtet. Wenn Sie jedoch "betrogen" haben, wird das Spiel für jeden Spieler, der dies erkannt hat, unterbrochen.
Jonathan Connell

Antworten:


5

Haben Sie sich mit Flocking-Algorithmen befasst ? Wenn ich mir deine Beschreibung ansehe, fällt mir das ein. Dafür gibt es viele Artikel, hier ist einer, den ich mag . Wahrscheinlich werden Sie nicht alle Aspekte der Beflockung wie den Zusammenhalt nutzen. Die meisten Aspekte sind hilfreich für das, was Sie tun möchten, z. B. Ausrichtung und Trennung. Beides trägt zur Vermeidung von Kollisionen bei. Sie würden mit etwas anderem enden als Flocken, aber es sollte Ihnen helfen, loszulegen.

Viel Glück!


2
Der hier relevante Suchbegriff ist Boids . Ich glaube jedoch nicht, dass dies das ist, wonach OP gesucht hat - es hört sich eher so an, als ob er will, dass Autos überall hin fahren.
BlueRaja - Danny Pflughoeft

Beim Beflocken geht es immer noch darum, dass die KI Kollisionen miteinander vermeidet.
Matt Jensen

OP fordert zuverlässige Kollisionsvermeidung. Das Beflocken stellt keine Garantie dar, da das kraftbasierte Modell keine strengen Auflagen enthält. Obwohl die Beflockung sicherlich ein guter Einstiegspunkt in das Thema ist, ist die Antwort damit falsch. Ich schlage dem OP vor, stattdessen nach "Geschwindigkeitshindernissen" zu suchen.
Tobias Gurdan

@TobiasGurdan Wenn Sie eine passendere Antwort haben (und ich bin damit einverstanden), sollten Sie eine Antwort erstellen.
MichaelHouse

3

Hier ist ein Ansatz: Jedes Fahrzeug hat einen kurzen projizierten Weg, auf dem das Fahrzeug am Ende langsamer wird und in eine Schleife einfährt. Diese Wege dürfen sich nicht überlappen. Immer wenn ein Fahrzeug an den Punkt kommt, an dem es langsamer wird, versuchen Sie, einen neuen Pfad zu generieren, der keinen der vorhandenen überlappt. Wenn sich herausstellt, dass dies nicht möglich ist, fährt das Fahrzeug auf dem angegebenen Pfad fort und versucht, in regelmäßigen Abständen einen neuen Pfad zu erstellen.

Das Verfahren könnte verbessert werden, um einen dichteren Verkehr zu ermöglichen, indem Pfade, die zu Schleifen führen, einander überlappen und Schleifen, bei denen festgestellt werden kann, dass dies keine Kollision verursacht.


0

Führen Sie in jedem Fahrzeug eine Methode durch, bei der eine radiale Suche um sich selbst durchgeführt wird. Befinden sich andere Fahrzeuge innerhalb dieses Radius, bewegen Sie sich in einer Weise, die Ihren Wünschen entspricht: 1) Bewegen Sie sich in den entgegengesetzten Vektor, 2) Verlangsamen Sie, 3) beschleunigen, etc.

Sie können sogar Kombinationen durchführen: Wenn der Vektor des anderen Fahrzeugs nicht gerade oder direkt dahinter ist: Gehen Sie weg; sonst, wenn es gerade aus ist: langsamer fahren; sonst: beschleunigen.


0

Mein Ziel ist es, eine Art KI zu implementieren, die eine 100% genaue Kollisionsvermeidung ermöglicht (dh ich bin sicher, dass die Fahrzeuge niemals kollidieren werden).

Wenn dies möglich wäre, wäre es inzwischen in alle Flugzeuge der Welt eingebaut worden.

Ich schlage vor, den "autonomen" Aspekt zu lockern und eine Funktion zu haben, die vorhergesagte Kollisionen zwischen zwei (oder mehr) Fahrzeugen auflöst. Es kann so naiv sein, wie zufällige neue Fahrtrichtungen zu wählen und zu prüfen, ob das Problem dadurch behoben wird. Wichtig ist jedoch, dass die Funktion nur dann zurückgegeben wird, wenn eine Vereinbarung getroffen wurde, die beiden Fahrzeugen entspricht.

Ich schlage außerdem vor, dass jedes Fahrzeug, das in naher Zukunft voraussichtlich kollidieren wird, seine Geschwindigkeit bei gleichem Vorausschau-Abstand verringert. So haben Ihre Fahrzeuge mehr Möglichkeiten, Kollisionen zu vermeiden, als im wirklichen Leben.


Da er die Regeln des Universums entwirft, ist das absolut möglich. Die reale Welt ist offensichtlich komplizierter, aber ich bin sicher, dass reale Flugzeuge eine
Menge

0

Es klingt für mich, als wäre die Crowd-Simulation das Thema, das für das, was Sie erreichen wollen, am relevantesten ist. Die GAMMA-Gruppe bei der UNC hat eine Fülle von Arbeiten zu diesem Thema, die es wert sein könnten, durchgesehen zu werden. Ihre Beschreibung:

Bei der Crowd- und Multi-Agent-Simulation wird eine große Anzahl von Personen, Kreaturen oder anderen Charakteren simuliert, die jeweils in einer Umgebung interagieren. Von diesen Akteuren wird erwartet, dass sie ihre Ziele erreichen, mit ihrer Umgebung interagieren und aufeinander reagieren. Crowd-Simulationen haben viele Verwendungszwecke, einschließlich der Verbesserung der Architekturplanung, der Verbesserung von Trainingsumgebungen und virtuellen Immobilien sowie der Steuerung künstlich intelligenter Charaktere in Spielen und Filmen. Unsere Gruppe hat an vielen Problemen in der Crowd-Simulation gearbeitet, darunter schnelle, garantierte Kollisionsvermeidung, Echtzeit-Bahn- und Bewegungsplanung, Crowd-Flows und gezieltes Verhalten.

http://gamma.cs.unc.edu/research/crowds/


-1

Ich glaube nicht, dass es eine 100-prozentige Vermeidungsmethode gibt, aber wenn Ihre Fahrzeuge über vollständige Weltinformationen verfügen, können Sie jedes Fahrzeug in eine Box einhüllen, deren Länge von der Geschwindigkeit abhängt, und eine Kollisionsprüfung für diese Boxen durchführen. Wenn es tatsächlich zu einer Kollision kommt, lenken Sie mit einer Stärke weg, die von der unmittelbaren Auswirkung (oder dem Bereich der Kollision zwischen den beiden Kisten) und dem langsamen Absenken abhängt (aber halten Sie Ihre Kiste während des Ausweichvorgangs auf der gleichen Länge).

Dies funktioniert natürlich nicht, wenn das Fahrzeug nicht über vollständige Informationen verfügt, aber in diesem Fall garantiert nichts eine 100% ige Vermeidung (außer wie bereits erwähnt, Parallelbewegung).

Einige hier beschriebene Methoden wären wahrscheinlich nützlich, insbesondere diese: Unaligned Collision Avoidance-Lenkverhalten

Grüße


1
Hast du die ursprüngliche Frage gelesen? Dieser von Ihnen empfohlene Link ist bereits in der Frage ...
Bummzack
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.