Neo Posted November 5 Posted November 5 Hallo HaNNoveraNer, ich habe deine Anlage nur kurz überflogen, mir sind das etwas zu viele Variablen und Timer. Ich habe selber deine Straße genutzt um eine eigene Version zu implementieren: DB356342-5047-4E9D-8584-93B785CED91D Meine Version folgt dem immer gleichen Prinzip: (Vorbereitung): Nähert sich ein Fahrzeug der Kreuzung, wird ein zufälliges Ziel ermittelt Betritt ein Fahrzeug den Vorfahrtskontakt, wird zuerst die Richtung ermittelt, in die das Fahrzeug fährt Für jede Richtung gibt es ein eigenes benutzerdefiniertes Ereignis Ist die Strecke frei, fährt das Fahrzeug weiter Ist die Strecke blockiert, stoppt das Fahrzeug und probiert es später noch einmal Zur Prüfung, ob eine Strecke frei ist, nutze ich die neue Funktion "GetVehiclesOnRoute". Da Fahrzeuge beim Stoppen am Vorfahrtskontakt den Kontakt aber minimal überfahren, würden wartende Fahrzeuge die Strecke fälschlicherweise blockieren. Ich nutze daher eine Erweiterung, die nur fahrende Fahrzeuge prüft (mit dem Nachteil, das Fahrzeuge nicht mitten auf der Kreuzung stehen bleiben dürfen). Die Funktion "Fahrzeug fährt in Richtung eines Gleiskontakts" nutze ich, um die Fahrtrichtung zu ermitteln. Diese hat den Nachteil, dass sie 150 m weit schaut, d.h. ich musste die Straßen soweit verlängern, dass andere Kontakt der Kreuzung außerhalb der 150 m liegen. Hier könnte man über eine Erweiterung nachdenken, bei der der Nutzer die maximale Reichweite selber bestimmen kann. Das System lässt sich auf beliebige Kreuzungen erweitern und auch noch weiter abstrahieren, da immer die gleichen Abläufe stattfinden, mit dem Ziel, eine voll funktionsfähige Kreuzung im Katalog anzubieten, die ein Nutzer einfach nur auf die Anlage zieht. Im Moment soll die Anlage aber auch nur ein Ideengeber sein. Viele Grüße, Neo
HaNNoveraNer Posted November 5 Posted November 5 Danke, im Prinzip mache ich das auch so ähnlich, ich schaue mir das mal an.
HaNNoveraNer Posted November 5 Posted November 5 (edited) Hallo @Neo Du hast Dir das etwas zu einfach gemacht ;-) Es gilt ja, die Vorfahrtsregeln nachzubilden. Das heißt, die Haupt/Vorfahrtsstraße hat Vorrang. Edited November 5 by HaNNoveraNer
Neo Posted November 5 Posted November 5 Zunächst ging es mir um eine kollisionsfreie Kreuzung durch Nutzung der neuen EV-Möglichkeiten. Prioritäten können darauf aufbauen.
Hawkeye Posted November 5 Author Posted November 5 Hallo, ich habe mal den Ansatz von @Neo ausprobiert. Am 3.11.2024 um 20:13 schrieb Neo: Dann kannst du meiner Meinung nach auch darauf verzichten, wohin ein Fahrzeug tatsächlich fährt. Es genügt, einfach die Bereiche auf Vorhandensein eines Fahrzeugs zu prüfen, die zu einer Kollision führen könnten. Natürlich gleich an der großen Kreuzung. Es geht tatsächlich ohne die Fahrziele zu benutzten. Und die Steuerung ist auch einigermaßen übersichtlich. Leider geht es nicht ganz ohne Lua. Da sich aber einige Vorfahrtregeln gegenseitig ausschließen, kommt es noch häufig zu unplanmäßigen Stop's. Dafür habe mal ein paar Schalter mitberücksichtigt, um den Verkehr wieder zum Laufen zu bringen. Bei der hier dargestellten Situation, sollte eigentlich das Fahrzeug von "Ost" schon fahren können. Da aber das Fahrzeug von "West" auf den GK steht, wird die gesamte Abbiegestrecke nach "Nord" schon blockiert. @Neo Verbesserungsvorschlag: Ein Fahrzeug das auf dem GK und hält (V=0), sollte den kommenden Streckenabschnitt nach "Nord" nicht blockieren. Hier mal die Testanlage dazu. V9-große Kreuzung 01.mbp VG, Hawkeye
Hawkeye Posted November 5 Author Posted November 5 vor 5 Stunden schrieb Neo: Da Fahrzeuge beim Stoppen am Vorfahrtskontakt den Kontakt aber minimal überfahren, würden wartende Fahrzeuge die Strecke fälschlicherweise blockieren. Das gilt wohl auch für die neue Bedingung „Fahrzeuge zwischen zwei Gleiskontakten“. Kann hier nicht ein stehendes Fahrzeug ignoriert werden? VG, Hawkeye
Neo Posted November 5 Posted November 5 vor 38 Minuten schrieb Hawkeye: Kann hier nicht ein stehendes Fahrzeug ignoriert werden? In meinem Beispiel habe ich das mit Lua gelöst, standardmäßig würde ich das aber nicht in die Funktion integrieren, weil sie ja auch für andere Zwecke eingesetzt werden kann (z.B. um alle Fahrzeuge innerhalb eines Bereiches anzusprechen). Eine Option wäre aber, einen "Filter" zu "Fahrzeuge zwischen zwei Gleiskontakten" hinzuzufügen, um nur bestimmte Fahrzeuge je nach Einstellung zu berücksichtigen. Das würde ich am Ende entscheiden, wenn die Vorfahrtsexperimente abgeschlossen sind.
Phrontistes Posted November 5 Posted November 5 Hallo @Hawkeye, vor 2 Stunden schrieb Hawkeye: Hier mal die Testanlage dazu. Die läuft schon weitgehend unfallfrei - aber das habe ich mehrfach gesehen. Immer Linksabbieger West --> Nord vs. von Ost kommend entweder gerade nach West (wie im Bild) oder rechtsabbiegend nach Nord. Beste Grüße Phrontistes
streit_ross Posted November 5 Posted November 5 Nur mal als Anmerkung. Die Straßenverkehrsordnung , jedenfalls die deutsche, verlangt die Einrichtung von separat getrennten Abbiege- und Geradeausspuren. Die im vorherigen Beitrag gezeigte Kreuzung erfüllt diese Anforderung nicht. Hier eine real existierende Kreuzung in meiner Heimatstadt. Man beachte die Spurenanordnung und die Markierung. Normalerweise sollte auch das MBS sich an die Straßenverkehrsvorschriften halten. Gruß streit_ross
Goetz Posted November 6 Posted November 6 vor 33 Minuten schrieb streit_ross: Die Straßenverkehrsordnung , jedenfalls die deutsche, verlangt die Einrichtung von separat getrennten Abbiege- und Geradeausspuren. Zeig mir mal bitte, wo sie das tut. Und erklär mir dann bitte diese Kreuzung hier: https://maps.app.goo.gl/CjXjSwKGfzxdJnhW7 Klar sind Abbiegespuren häufig zu finden, weil sie den Verkehrsfluss verbessern. Aber wo es nicht passt, da gibt es keine.
Hawkeye Posted November 6 Author Posted November 6 vor 10 Stunden schrieb Neo: In meinem Beispiel habe ich das mit Lua gelöst, Danke, werde ich auch mal versuchen. vor 9 Stunden schrieb Phrontistes: aber das habe ich mehrfach gesehen. Immer Linksabbieger West --> Nord vs. von Ost kommend entweder gerade nach West (wie im Bild) oder rechtsabbiegend nach Nord. Ja, leider. Das liegt wohl daran, das die 3 Gleiskontakte so dicht beieinander liegen. Dadurch stoppt manchmal ein Fahrzeug auf einem falschen GK, der nicht der Fahrtrichtung entspricht. Schiebt man die GK etwas weiter nach vorne, dann fahren Fahrzeuge wieder durch die davor stehenden durch. @Neo In der obigen Anlage habe ich Probleme mit den Schaltern Nord und Süd. Obwohl die Fahrzeuge auf den in den Schaltern hinterlegten GK stehen, findet das Programm die Fahrzeuge nicht und weist ihnen somit keine Geschwindigkeit zu. VG, Hawkeye
Phrontistes Posted November 6 Posted November 6 vor 15 Minuten schrieb Hawkeye: 3 Gleiskontakte so dicht beieinander liegen Die hatte ich auch gesehen und mir schon gedacht, dass das auf Dauer keine Lösung ist.
Hawkeye Posted November 6 Author Posted November 6 Hallo, hier die Kreuzung mit einer verbesserten Steuerung. (Skript von @Neo integriert) Und einem kleine aber wirkungsvollen Trick, der es erlaubt die Stoppkontakte weiter auseinander zu schieben. V9-große Kreuzung 02.mbp VG, Hawkeye
HaNNoveraNer Posted November 6 Posted November 6 (edited) Am 5.11.2024 um 18:44 schrieb Neo: Zunächst ging es mir um eine kollisionsfreie Kreuzung durch Nutzung der neuen EV-Möglichkeiten. Prioritäten können darauf aufbauen. Hallo @Neo Ich habe die Prioritäten mal darauf aufgebaut. Jetzt werden die Vorfahrtsregeln in den meisten Fällen eingehalten. Die Fahrzeuge tragen sich in eine Prioritätenliste ein. Wer immer fahren darf erhält Prio 1. Wer einen vorlassen muß erhält Prio 2. Wer zwei vorlassen muß erhält Prio 3. u.s.w. Damit kann man jetzt gut leben. P.S. Nochmal korrigiert nach 1. hochladen. Vorfahrt1.mbp Edited November 6 by HaNNoveraNer
Hawkeye Posted November 6 Author Posted November 6 Hallo, habe jetzt mal die Anlage um einen Abzweig erweitert. Die Steuerung ist für die Kreuzung und den Abzweig identisch. Läuft (fast) fehlerfrei. V9-Kreuzung und Abzweig 01.mbp VG, Hawkeye
Hawkeye Posted November 7 Author Posted November 7 Hallo, und der Kreisverkehr ist jetzt auch hinzugefügt. Nur eine "Universal"-Steuerung für alles. @Neo Du hast recht gehabt, mit dem Ansatz, das das Fahrziel eines Fahrzeuges keine Rolle spielt. Es kommt nur darauf an, die neue Funktion "Fahrzeug zwischen zwei Gleiskontakten" für die Vorfahrtsregeln an den Stoppkontakten sinnvoll einzustellen. Jetzt musst du nur noch das Problem mit dem "Hindurchfahren von vorausfahrenden Fahrzeugen" bei Abbiegern lösen. Ich nutzte hierfür bis dahin die "unsichtbaren" Anhänger. VG,V9-Kreuzung_Abzweig_Kreisverkehr 01.mbp Hawkeye
HaNNoveraNer Posted November 7 Posted November 7 Hallo Hawkeye Es fällt auf, daß die Fahrzeuge vor der Einfahrt in den Kreisverkehr warten, obwohl das FZ im Kreisverkehr die Ausfahrt davor wählt. Sie könnten also fahren. Das Hindurchfahren passiert ja eigentlich nur, wenn Gleiskontakte auf unterschiedlichen Spuren nebeneinander liegen, bzw. Fahrzeuge dort halten wo die Spuren zu dicht liegen. Das kann man vermeiden, indem man die Stopkontakte VOR so eine Verzweigung plaziert. LG Thomas
Hawkeye Posted November 7 Author Posted November 7 vor 16 Minuten schrieb HaNNoveraNer: Das Hindurchfahren passiert ja eigentlich nur, wenn Gleiskontakte auf unterschiedlichen Spuren nebeneinander liegen, bzw. Fahrzeuge dort halten wo die Spuren zu dicht liegen. Ja, das stimmt. Aber auch dann, wenn ein nachfolgendes Fahrzeug bei Verwendung einer anderen Fahrspur an einer Kreuzung schneller beschleunigt. Ich habe die Spuren der Kreuzung angepasst, damit genau das erreicht wird. Mein Ansatz basiert darauf, das ich für jede Fahrtrichtung einen einzelnen Stoppkontakt verwende. Das ermöglich z.Z. eine übersichtlichere Tabelle für die Vorfahrtsregelung. vor 22 Minuten schrieb HaNNoveraNer: Es fällt auf, daß die Fahrzeuge vor der Einfahrt in den Kreisverkehr warten, obwohl das FZ im Kreisverkehr die Ausfahrt davor wählt. Sie könnten also fahren. Das kann z.B. an der Schalterstellung "Vorrang" in den Stoppkontakten liegen. Wenn an einer Kreuzung oder im Kreisverkehr alle auf "false" stehen, dann kommt der Verkehr manchmal zum Stillstand, weil sich Vorfahrtregeln überschneiden. Deshalb haben einige Stoppkontakte die Einstellung "true". In diesem Fall wird eine Vorfahrtsregel ignoriert und der Verkehr läuft weiter ohne in der EV Änderung durchführen zu müssen . Hier sind sicherlich noch Optimierungen möglich. Auch wenn man z.B. die Verzögerungszeit für die erneute Prüfung auf "defer(0.5, "Verzögerung") setzt, oder die Regeln nochmal anpasst. Auch ist die Verwendung von Anhängern/ Gelenkbussen mit dieser Steuerung noch nicht zufriedenstellend gelöst. VG, Hawkeye
HaNNoveraNer Posted November 8 Posted November 8 (edited) Puh, ich komme meinen Vorstellungen jetzt langsam näher. Ich versuche jetzt mal meine weiter optimierten Routinen an Deiner Anlage. Erstmal das T-Stück. Ziel wenige Kontakte und leicht anpassbarer, kopierbarer Lua Code. Und natürlich möglichst keine Kollisionen bei Einhaltung der Vorfahrtsregeln. Vorfahrt1.mbp Edited November 8 by HaNNoveraNer
Hawkeye Posted November 9 Author Posted November 9 Hallo @Neo und @Goetz, ich komme mal wieder an die Grenze. Für die Steuerung an Kreuzungen ist es für die Prüfung wichtig, das bei Fahrzeugen, die mit Anhängern fahren oder aus mehreren Teile bestehen, wie z.B. der Gelenkbus, das in den Schleife das angetriebene Fahrzeug auch an Platz "1" in der Liste steht. Das isst aber nicht immer der Fall! Ich habe mal zwei unterschiedliche Wege von Schleifen untersucht, die aber das gleiche falsche Ergebnis liefern. Der "Gelenkbus-Nachläufer" oder der "Gelenkbus-Faltenbalg" habe keine Antriebe. Trotzdem steht der Nachläufer an Position 1 der Liste. Gibt es eine andere Variante die Liste/Tabelle zu lesen, so das auch das erste Element das gewünschte Fahrzeug (hier: "Gelenkbus rot" mit eingeschaltetem Antrieb ist? Sonst fahren die anderen Fahrzeuge bei der Prüfung zwischen 2 Gleiskontakten schon los, obwohl der Bus die Kreuzung noch nicht verlassen hat, bzw. der Bus wird bei der Prüfung gar nicht erst erkannt. VG, Hawkeye
Phrontistes Posted November 9 Posted November 9 Hallo @Hawkeye, was layout:getVehiclesOnRoute(a, b) in welcher Reihenfolge zurückgibt, kann nur @Neo beeinflussen. Ersichtlich, geht er in Fahrtrichtung von a nach a die Fahrzeuge durch. Zweckmäßig wäre wohl, die Reihenfolge umzudrehen, d.h. die Fahrzeuge entgegen der Fahrtrichtung aufzulisten. Beste Grüße Phrontistes
Hawkeye Posted November 9 Author Posted November 9 (edited) vor 38 Minuten schrieb Phrontistes: was layout:getVehiclesOnRoute(a, b) in welcher Reihenfolge zurückgibt Ist wohl im Moment noch völlig willkürlich. Die Reihenfolge, wie der Bus im obigen Beispiel in Fahrtrichtung tatsächlich zusammengebaut ist, lautet 3,4,1,2. Wichtig ist, das in bestimmten Streckenabschnitten die Prüfung auf Anhänger unterschiedlich bewertet werden muß. Steht ein Fahrzeug auf einem Stoppkontakt und wartet darauf, das die Prüfabschitte frei werden, dann spielen die Anhänger keine Rolle. Fährt aber ein Fahrzeug mit Anhänger durch eine Prüfstrecke, dann darf diese erst freigegeben werden, wenn der Anhänger den Abschnitt auch mit verlassen hat, sonst fahren wartende Fahrzeuge zu früh los oder durch andere an Kreuzungen hindurch. VG, Hawkeye Edited November 9 by Hawkeye
Phrontistes Posted November 9 Posted November 9 vor 6 Minuten schrieb Hawkeye: im Moment noch völlig willkürlich Dann kann es erst recht nur @Neo ändern.
Hawkeye Posted November 9 Author Posted November 9 Hallo, hier die Erweiterung für Fahrzeuge mit Anhängern oder Gelenkbusse. Habe etwas mit den Einstellungen experimentieren müssen. Dafür gibt es in Stoppkontakten und den Startkontakten zwei "Schalter", damit der Verkehr in bestimmten Situationen weiterläuft. 1. "Auf_Vorfahrt_verzichten" (true/false) - ein Fahrzeug das auf einem Stoppkontakt steht, lässt einen anderen die Vorfahrt 2. "Anhängerprüfung" (true/false) - (nur, wenn "Auf_Vorfahrt_verzichten" = true) Das ist z.B. im Kreisverkehr und bei der Kreuzung notwendig, damit die Anhänger auf der Prüfstrecke mit berücksichtigt werden. V9-Krzg_Abzg_KreisVkr 02.mbp Ein paar kleine Problemstellen gibt es leider immer noch. Aber sonst läuft die Anlage recht flüssig. VG, Hawkeye
Hawkeye Posted November 11 Author Posted November 11 Hallo @Neo, die Funktion Anz = #layout:getVehiclesOnRoute(a, b) scheint in Verzögerungen (= Wiederholungsprüfungen, die kurz hintereinander ausgeführt werden) die Fahrzeuge nicht immer zu erkennen. Das führt zu Problemen. Hier mal ein paar Auszüge aus dem Protokoll: VG, Hawkeye
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now