-
Notifications
You must be signed in to change notification settings - Fork 0
04 Meeting Minutes
Markus Ziegler edited this page Jul 11, 2017
·
4 revisions
- Map Enthält Tiles, die Renderinformationen für die GUI enthalten (z.B. ich bin eine gerade Straße, o.ä.)
- Jedes Tile hat zusätzlich Subkoordinaten, auf denen sich jeder Teilnehmer bewegen kann
- Der Verbund der Subkoordinaten kann als gerichteter Graph interpretiert werden, d.h. auf jeder Koordinate lassen sich dessen Nachfolge- und Vorgängerkoordinaten ermitteln
- POS/GPS und MAP dienen nur zur gemeinsamen Datenhaltung, Graf meinte, wir sollten dies nur als Dateien lösen, auf die schreibend und lesend zugegriffen wird
- Simulation soll nicht mehr als Taktgeber fungieren, sondern lediglich zum Starten der anderen Prozesse und zum gelegentlichen Erzeugen neuer Teilnehmer an zufälligen Einstiegspunkten auf der Karte
- Regeln sind direkt mit einer Subkoordinate verknüpft, somit können Teilnehmer immer die Regeln der nächsten Koordinaten prüfen
- Kommunikation zwischen den Prozessen findet indirekt über die Files statt, Simulation und Teilnehmer könnten jedoch in einem Prozess laufen (da die Simulation direkt die Erstellung von Teilnehmern auslöst, jedoch könnte man diese Erstellung auf das Teilnehmer Modul auslagern dann brauchen wir da nach dem Start des Teilnehmer Moduls gar keine Kommunikation mehr zwischen diesen beiden Modulen)
- Simulation ist Entry Point für die gesamte Applikation, von der aus die anderen Applikationen wie GUI, Rules und Teilnehmer gestartet werden
Noch ein paar Gedanken von Markus:
- Evtl. sollten wir uns Anforderungen überlegen an Regeln, wie sie kommen können und vorerst wirklich nur Ampeln und komplett ungeregelte Kreuzungen mit Rechtsvorrang implementieren
- Überholvorgänge könnten wir auch noch als optional sehen und später nach entwickeln
- Für Regeln wäre es gut wenn eine bestimmte anzahl von Knoten hinterlegt werden kann, wo sich kein Fahrzeug befinden darf für die Erlaubnis weiterzufahren (z.B. bei ungeregelter Kreuzung darf sich kein Fahrzeug im Knoten XY und dessen 8 Vorgängerknoten befinden damit ein Fahrzeug überfahren darf)
- In jedem Node könnten wir die Entfernung zu allen Ausgangsnodes hinterlegen (bleibt ja immerhin konstant), das würde IMHO die Wegfindung vereinfachen (Beispiel: Ich mach nach Ausgang A und kann mich zwischen zwei Nodes entscheiden, Node X hat eine Entfernung von 500 und Node Y hat eine Entfernung von 750, also entscheide ich mich als Teilnehmer für die Strecke, die über den Node X führt)
- Evtl. führt die Verwendung von Tiles zu zusätzlicher Komplexität, da hier Übergänge vorgesehen werden müssen. Wäre eine Gesamtkarte mit einem bestimmten Hintergrund evtl. einfacher zu implementieren?
- Watchdog: Zuständig für das synchrone Starten und anschließenden asynchronen Überwachung der Applikationen in einem eigenen Thread
- DataManager: Zuständig für das holen der Daten aus dem DataAccess, der Synchronisation und der Anreicherung um Simulationsspezifische Daten. Des Weiteren bietet dieser DataManager "Fire & Forget" Methoden zum Aktualisieren der AgentPositions im DataAccess an (PhysicEngine muss nicht auf Fertigstellung der Synchronisation warten)
- PhysicEngine: Aktualisiert Geschwindigkeit der Agents aufgrund deren Beschleunigung, aktualisiert Position der Agents aufgrund deren Geschwindigkeit und gewählten Route
- AgentSim: Entscheidet über Beschleunigung und gewählter Route aufgrund von Regeln und anderen Verkehrsteilnehmern
- AgentSpawner: Erstellt neue Agents mit zufälligen Eigenschaften aus den AgentSimConfigurations aus dem Data Access
PhysicEngine, AgentSim und AgentSpawner laufen in eigenen Threads und kommunizieren unabhängig voneinander mit dem DataManager. DataManager wäre ein Singleton evtl. sinnvoll, damit alle auf die gleichen Daten zugreifen können (Achte auf Thread Locking!)
- Main wird aufgerufen
- Data Access Dependencies werden durch Factory Aufruf instanziert
- Watchdog wird synchron gestartet, startet Subapplikationen
- Watchdog wird in asynchrones Watching überführt
- DataManager wird initialisiert, alle simulationsrelevanten Daten werden vom Data Access selektiert
- DataManager baut im Speicher den Objektbaum der ganzen Knoten und Kanten des Kartengraphes
- DataManager startet Synchronisationsthread für die DynamicRules (restliche Daten werden nur von der Simulation manipuliert, d.h. diese müssen nicht ständig gelesen werden)
- PhysicEngine Main Thread wird gestartet
- AgentSim Main Thread wird gestartet
- AgentSpawner Main Thread wird gestartet