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:
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!
Antworten:
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!
quelle
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.
quelle
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.
quelle
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.
quelle
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:
http://gamma.cs.unc.edu/research/crowds/
quelle
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
quelle