KI, Straßenverkehr simulieren

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

KI, Straßenverkehr simulieren

Beitrag von Dummie »

Hallo,

ich möchte gerne eine KI entwickeln, die den Straßenverkehr simuliert. Als Grafikengine kommt Unity zum Zug. Hier gibt es bereits einige fertige Komponenten, aber ich möchte gerne etwas eigenes probieren.

Ich möchte mit euch hier über einen möglichst cleveren Ansatz nachdenken, der für meine Rahmenbedingungen dann auch besonders gut geeignet ist. Die fertigen Komponenten sind alle sehr komplex und unterstützen viele Dinge, die ich nie brauchen werde. Das ist ebenfalls ein Grund warum ich etwas leichtes selber entwickeln will.

Zu den Rahmenbedingungen:
- Es gibt nur gerade Streckenverläufe, keine geschwungenen Kurven o.ä.
- Es gibt viele Kreuzungen
- Kreuzungen oder z.B. Fußgängerüberwege sind evtl. durch Ampeln geregelt
- Mehrspurige Fahrbahnen
- Fahrzeuge spawnen im Umfeld des Spielers, um ein stetiges Verkehrsaufkommen zu gewährleisten
- Es wäre genial, wenn Fahrzeuge die Spur wechseln würden

Meine Idee wäre zunächst, dass jeder auf jeden achtet. Ein Fahrzeug bremst ab, um dem Vordermann nicht hinten rein zu fahren. Positiver Nebeneffekt: Bremst ein Fahrzeug wegen einer Ampel, dann halten auch alle anderen Fahrzeuge nach und nach an.

Eine Ampel könnte ich so realisieren, dass jede Ampel schaut, ob sich ein Fahrzeug in ihren Regelbereich befindet. Ist das der Fall und der Ampelstatus rot, dann sendet sie ein Motor-Stop-Befehl an dieses Fahrzeug. Schaltet die Ampel auf grün, dann sendet sie ein Motor-Start-Befehl an das Fahrzeug.

Soweit alles relativ simpel und sollte sicher funktionieren. Bleibt die Frage nach der Kreuzung. Ich könnte an den Stellen, wo ein Abbiegen möglich ist einen Collider platzieren. Fährt das Fahrzeug in diesem rein, wird eine Kollision ausgelöst. Diese weist dem Fahrzeug an, dass es abbiegen soll oder eben nicht.

Da jeder auf jeden achtet, sollte das selbst dann funktionieren, wenn ein Fahrzeug auf der äußersten Spur abbiegen will. Ist hier noch Verkehr, dann wird es selber anhalten oder vorgelassen.

Eine perfekte Welt eben. :D

Was sind eure Eindrücke dazu? Wie gesagt, es soll möglichst einfach sein.

Viele Grüße
Patrick
NytroX
Establishment
Beiträge: 364
Registriert: 03.10.2003, 12:47

Re: KI, Straßenverkehr simulieren

Beitrag von NytroX »

Eine Idee wäre, dass sich die Autos an den Kreuzungen fahren lassen.

Also generell wird ein Auto ja immer von einer Kreuzung zur nächsten unterwegs sein, und das relativ gradlinig.
Dann brauchst du auf geraden Strecken keine andere Ki als die "nicht vorne auffahren".

Kommt ein Auto dann in die Nähe einer Kreuzung, registriert es sich dort und der "Autopilot" für die Kreuzung übernimmt.
Für jede Kreuzung haste dann einen "Bot" der alle Autos im Kreuzungsbereich steuert, da ist das Koordinieren mit mehreren Spuren usw. dann ggf. einfacher.
Und auf der anderen Seite der Kreuzung "ploppt" das Auto dann wieder raus.

So kannst du dann auch relativ einfach verschiedene Kreuzungs-Klassen haben, z.B. eine für Ampeln, rechts-vor-links, Kreisverkehr, T- oder X- Kreuzung, usw.
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Re: KI, Straßenverkehr simulieren

Beitrag von Dummie »

Okay, das entspricht ja mehr oder weniger meiner eigentlichen Idee. Nur die Verantwortlichkeiten sind etwas anders aufgeteilt.

Vermutlich werde ich im Kreuzungsbereich dann Wegpunkte anlegen, damit die Fahrzeuge wissen wohin sie sich beim Abbiegen orientieren sollen. Auf diesen Weg sollten jedes Fahrzeug (egal wie groß, wie lang, etc.) korrekt abbiegen können.

Problematisch ist noch, dass ein Spieler sicher die Fahrzeuge von der Position abbringen wird. Hier müssten die Fahrzeuge noch in der Lage sein wieder auf die Strecke zu kommen. Wenn sie einfach zum nächsten Wegpunkt fahren, sollte auch das klappen...

Eine andere Idee von mir ist es, dass ich ein Raycast nach unten schicke und abhängig vom Untergrund Aktionen durchführen lasse. Allerdings denke ich, dass die Variante mit den "Triggern" für die Performance besser ist.

Vermutlich sind Wegpunkte doch die beste Idee. Dann entscheidet sich bei Kreuzungen zufällig nur, ob der nächste Wegpunkt geradeaus liegen soll oder eben zur Seite, was ein Abbiegen bewirkt. Mich stört daran nur, dass es recht komplex wird diese anzulegen und zu verknüpfen.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4256
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: KI, Straßenverkehr simulieren

Beitrag von Chromanoid »

Vielleicht solltest Du das mit Steering Behaviors implementieren: http://www.red3d.com/cwr/steer/
Im Grunde sind viele der genannten Ideen ja Aspekte von Steering Behaviors. Die werden wohl häufig für solche Probleme genutzt.
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Re: KI, Straßenverkehr simulieren

Beitrag von Dummie »

Vielen Dank! Ich muss mal schauen, wie ich es konkret mache. Aktuell können die Fahrzeuge nur geradeaus fahren und halten bei einer roten Ampel an. Ich habe auch Kleinigkeiten wie eine Verzögerung beim Anfahren (Reaktionszeit), etc. eingebaut. Diese Kleinigkeiten sind so interessant anzusehen und zu programmieren, dass ich nicht gut voran komme. :D

Man kann wirklich sehr gut erkennen, wie sich auch ein Rückstau, etc. bildet. Wenn erst mal die Kreuzungen, etc. hinzukommen, dann wird es wohl noch interessanter. :D
Dateianhänge
Traffic.png
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Re: KI, Straßenverkehr simulieren

Beitrag von Dummie »

So, es nimmt langsam Gestalt an. Die Fahrzeuge können nun auch abbiegen. Man sieht auf dem Bild sehr gut, dass die einzigen Wegpunkte in Kreuzungsbereichen sind. Aktiviert werden sie durch entsprechende Trigger. Ansonsten legt sich jedes Fahrzeug automatisch ein Wegpunkt weiter entlang der Strecke. Sollte es also vom Kurs abgebracht werden, so findet es dort auch wieder hin.

Eine übergeordnete Klasse kann diese Trigger nun steuern damit auch Ampelschaltungen etc. ermöglichen. Fehlt nur noch etwas Feintuning, usw. und dann ist das System schon relativ fertig. :D

Ich muss dann nur noch die Autos an sich etwas schlauer machen. Bisher gibt es nur ein Raycast nach vorne und so werden manche Hindernisse übersehen, was zu einer Kollision führen kann. Wobei es später eigentlich eh keine Kollisionen dieser Art mehr geben kann, da die Fahrzeuge sich strikt an die Regeln halten werden.

Das System ist durch den Aufbau relativ flexibel und ich kann Kreuzungen etc. als Vorlagen (Prefab) speichern und hintereinander schalten und so schnell eine Stadt aufbauen. Genau so hatte ich mir das vorgestellt. :)
Dateianhänge
Neu.png
Dummie
Beiträge: 97
Registriert: 09.02.2004, 20:45

Re: KI, Straßenverkehr simulieren

Beitrag von Dummie »

Hey,

funktioniert nun alles soweit. Hab noch ein paar mehr Dinge drum herum gebaut und das Spiel ist somit fast fertig. Release ist für nächste Woche zum Wochenende geplant.

Viele Grüße
Patrick
Dateianhänge
Unbenannt.png
Antworten