Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ws1819:verkehrssimulation [2019/03/17 14:09] jonathan_p |
ws1819:verkehrssimulation [2019/04/01 19:59] (aktuell) stefanborn |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | Wir haben nichts auszusetzen. :-) | ||
+ | |||
====== Verkehrssimulation ====== | ====== Verkehrssimulation ====== | ||
Zeile 5: | Zeile 7: | ||
==== Was kann unsere Simulation? ==== | ==== Was kann unsere Simulation? ==== | ||
- | Mit der von uns entwickelten Verkehrssimulation kann ein einfaches Straßennetz mit Kurven, Kreuzungen und einspurigen Fahrbahnen angelegt werden und anschließend der Verkehrsfluss mit beliebig vielen Fahrzeugen betrachtet werden. Den Fahrzeugen können dabei Eigenschaften, wie Wunschgeschwindigkeit, Maximalbeschleunigung und Reaktionszeit übergeben werden. | + | Mit der von uns entwickelten Verkehrssimulation kann ein einfaches Straßennetz mit Kurven, Kreuzungen und einspurigen Fahrbahnen angelegt werden und anschließend der Verkehrsfluss mit beliebig vielen Fahrzeugen betrachtet werden. Den Fahrzeugen können dabei Eigenschaften, wie Wunschgeschwindigkeit, Maximalbeschleunigung und Reaktionszeit übergeben werden. An den Kreuzungen gibt es die Möglichkeit, Ampelschaltungen anzupassen und die daraus resultierenden Veränderungen zu betrachten. |
+ | |||
+ | {{:ws1819:screenshot_7_.png|}} | ||
---- | ---- | ||
Zeile 15: | Zeile 19: | ||
Unser ursprüngliches Ziel war es, einen kleinen Ausschnitt von Berlins Straßennetz in unser Programm zu übernehmen und anschließend zu optimieren. | Unser ursprüngliches Ziel war es, einen kleinen Ausschnitt von Berlins Straßennetz in unser Programm zu übernehmen und anschließend zu optimieren. | ||
- | ==== Zwischenziele: ==== | + | ==== Zwischenziele ==== |
* OpenGL, pygame und pyglet Grundlagen verstehen | * OpenGL, pygame und pyglet Grundlagen verstehen | ||
Zeile 25: | Zeile 29: | ||
* Benutzeroberfläche | * Benutzeroberfläche | ||
- | ==== Verwendete Literatur: ==== | + | ==== Verwendete Literatur ==== |
* TREIBER, Martin und Arne KERSTING, 2010. //Verkehrsdynamik und -simulation: Daten, Modelle und Anwendungen der Verkehrsflussdynamik//. Heidelberg: Springer. ISBN 978-3-642-05227-9 | * TREIBER, Martin und Arne KERSTING, 2010. //Verkehrsdynamik und -simulation: Daten, Modelle und Anwendungen der Verkehrsflussdynamik//. Heidelberg: Springer. ISBN 978-3-642-05227-9 | ||
Zeile 38: | Zeile 42: | ||
* pyglet Dokumentation: [[https://pyglet.readthedocs.io/en/pyglet-1.3-maintenance/]] | * pyglet Dokumentation: [[https://pyglet.readthedocs.io/en/pyglet-1.3-maintenance/]] | ||
* Simulationsbeispiele: [[http://traffic-simulation.de/]] | * Simulationsbeispiele: [[http://traffic-simulation.de/]] | ||
+ | |||
+ | ==== Aufgabenverteilung ==== | ||
+ | |||
+ | Jonathan: | ||
+ | * Grafische Umsetzung (also anfangs noch PyOpenGL, später dann PyGame) | ||
+ | * Programmgrundstruktur aus drei Klassen und einem ''Loop'', der ständig ausgeführt wird | ||
+ | * Die Methoden ''change'', ''fahre'', ''zeichne'', ''pruefe_ampel'', ''pruefe_kollision'', ''zeichne_fahrbahn'', ''zeichne_ampel'', ''phasen'' | ||
+ | * Das "eckige", aber zuverlässige Abbiegen der Fahrzeuge | ||
+ | * Die Wiki | ||
+ | |||
+ | Seohyun: | ||
+ | * Das "runde" Abbiegen der Fahrzeuge | ||
+ | * Die Methoden ''fahre'' und ''pruefe_ampel'' für das Abbiegen angepasst | ||
+ | * Die ''__init__''-Methoden angefangen | ||
+ | * Die Erklärung zur ''abbiegen''-Methode in der Wiki | ||
===== Protokolle ===== | ===== Protokolle ===== | ||
Zeile 46: | Zeile 65: | ||
Unser Programm besteht aus den drei Klassen ''Fahrzeug'', ''Fahrbahn'' und ''Ampel''. Bei der visuellen Darstellung haben wir uns letztendlich für PyGame entschieden, da dieses viel einfacher ist, als PyOpenGL und für unsere Simulation vollkommen ausreicht.\\ | Unser Programm besteht aus den drei Klassen ''Fahrzeug'', ''Fahrbahn'' und ''Ampel''. Bei der visuellen Darstellung haben wir uns letztendlich für PyGame entschieden, da dieses viel einfacher ist, als PyOpenGL und für unsere Simulation vollkommen ausreicht.\\ | ||
- | Das Programm besitzt eine ''Haupt-Schleife'', die mehrfach in der Sekunde ausgeführt wird. In jedem Zeitschritt des Programms wird zuerst der Hintergrund, also das Straßennetz mit Pygame gezeichnet: | + | Das Programm besitzt eine Haupt-Schleife, die mehrfach in der Sekunde ausgeführt wird. In jedem Zeitschritt des Programms wird zuerst der Hintergrund, also das Straßennetz mit Pygame gezeichnet: |
<code python> | <code python> | ||
for row in range(maphoehe): | for row in range(maphoehe): | ||
Zeile 190: | Zeile 209: | ||
</code> | </code> | ||
- | === Die fuege_fahrzeug_hinzu- und fuege_ampel_hinzu-Methode === | + | === Die ''fuege_fahrzeug_hinzu''- und ''fuege_ampel_hinzu''-Methode === |
Diese beiden Methoden speichern einmalig alle Fahrzeuge und alle Ampeln in jeweils einer eigenen Liste für jede Fahrbahn ein. Diese Listen werden dann später ständig mit den aktuellen Daten aktualisiert. | Diese beiden Methoden speichern einmalig alle Fahrzeuge und alle Ampeln in jeweils einer eigenen Liste für jede Fahrbahn ein. Diese Listen werden dann später ständig mit den aktuellen Daten aktualisiert. | ||
Zeile 205: | Zeile 224: | ||
* q (zum abspeichern der vorherigen Ampelfarbe) | * q (zum abspeichern der vorherigen Ampelfarbe) | ||
- | === Die zeichne-Methode === | + | === Die ''zeichne''-Methode === |
Diese Methode zeichnet, abhängig von der Ausrichtung der Ampel, ein Rechteck auf die entsprechende Stelle auf der Kreuzung. | Diese Methode zeichnet, abhängig von der Ausrichtung der Ampel, ein Rechteck auf die entsprechende Stelle auf der Kreuzung. | ||
Zeile 213: | Zeile 232: | ||
''ampelfarben'' ist eine Liste mit RGB-Farbcodes für die verschiedenen Ampelfarben, also z.B. ''[255,0,0]'' für ''rot'' | ''ampelfarben'' ist eine Liste mit RGB-Farbcodes für die verschiedenen Ampelfarben, also z.B. ''[255,0,0]'' für ''rot'' | ||
- | === Die phasen-Methode === | + | === Die ''phasen''-Methode === |
Diese Methode steuert die Ampelphasen. Bei jedem Aufruf wird der ''timer'' jeder Ampel um ''t'' (ist normalerweise 1) erhöht. Sobald der Timer einen bestimmten Wert überschritten hat, schaltet die Ampel um. Von rot und grün wird immer auf gelb geschaltet, von gelb, wird abhängig von ''q'' auf rot oder grün geschaltet. | Diese Methode steuert die Ampelphasen. Bei jedem Aufruf wird der ''timer'' jeder Ampel um ''t'' (ist normalerweise 1) erhöht. Sobald der Timer einen bestimmten Wert überschritten hat, schaltet die Ampel um. Von rot und grün wird immer auf gelb geschaltet, von gelb, wird abhängig von ''q'' auf rot oder grün geschaltet. |