Jump to content
Zum Start hinzufügen

Weitere Informationen

3D-Modellbahn Studio

Eine Vollbild-App auf Ihrem Startbildschirm mit Push-Benachrichtigungen und mehr.

So installieren Sie diese App auf iOS und iPadOS
  1. Tippen Sie auf das Teilen-Symbol in Safari
  2. Scrollen Sie durch das Menü und tippen Sie auf Zum Startbildschirm hinzufügen.
  3. Tippen Sie oben rechts auf Hinzufügen.
So installieren Sie diese App auf Android
  1. Tippen Sie auf das 3-Punkte-Menü (⋮) in der oberen rechten Ecke des Browsers.
  2. Tippen Sie auf Zum Startbildschirm hinzufügen oder App installieren.
  3. Bestätigen Sie durch Tippen auf Installieren.

Empfohlene Beiträge

Geschrieben

Hallo @Neo ,

ich habe einen Wunsch. 9_9

Ist es möglich, die Methode vehicle:isHeadingToward(object) um die Option und Rückgabe der Strecke in [m] zu erweitern, um die tatsächlich noch zu fahrende Strecke eines Fahrzeuges zurückzugeben.

Screenshot 2025-07-26 172250.jpg

Im Moment (missbrauche ;)) bzw. verwende ich dazu die Fahrstraßen. D

Screenshot 2025-07-26 172316.jpg

Aber die Strecke gilt ja nur für den Abstand zwischen 2 Gleisen oder Gleiskontakten. Befindet sich das Fahrzeug schon zwischen den Kontakten auf dem Weg zum Zielkontakt, dann muss der Restweg noch aufwändig berechnet werden.

Hier mal ein Beispiel, wie das aussehen könnte.

Screenshot 2025-07-26 173753.jpg

Interessant ist, obwohl es beide Varianten nicht gibt, im Ereignisprotokoll für Variante 1 mit (object, 1) kein Fehler erzeugt wird und ein Boolean-Wert zurückgegeben wird.

Und bei Variante 2 die Fehlermeldung sowieso einen numerischen Wert erwartet. Diese würde ich somit auch bevorzugen.

Screenshot 2025-07-26 175505.jpg

Da es auch nur um eine kurze Strecke von < 150m geht, wie bei :getVehiclesOnRoute(contact1,contact2) ,

Screenshot 2025-07-26 173927.jpg

dürfte doch bei der Ermittlung der Strecke bei der internen Berechnung kaum ein Performance-Verlust entstehen.

VG,

Hawkeye

Bearbeitet von Hawkeye
Korrektur

Geschrieben

Hallo,

vor 2 Stunden schrieb Hawkeye:

Ist es möglich, die Methode vehicle:isHeadingToward(object) um die Option und Rückgabe der Strecke in [m] zu erweitern, um die tatsächlich noch zu fahrende Strecke eines Fahrzeuges zurückzugeben.

... da ich neugierig bin, was möchtest Du mit der Information über den Abstand machen?

vor 2 Stunden schrieb Hawkeye:

Interessant ist, obwohl es beide Varianten nicht gibt, im Ereignisprotokoll für Variante 1 mit (object, 1) kein Fehler erzeugt wird und ein Boolean-Wert zurückgegeben wird.

... es wird nur ein Übergabeparameter erwartet und ausgewertet, weitere Parameter werden einfach ignoriert.

Gruß
EASY

Geschrieben
  • Autor
vor 10 Minuten schrieb EASY:

da ich neugierig bin, was möchtest Du mit der Information über den Abstand machen?

Hallo @EASY ,

das habe ich eigentlich versucht mit den Bildern der Testanlage oben darzustellen.

Treffen Fahrzeuge an zwei zusammenlaufende Spuren aufeinander, dann wirkt die Fahrphysik des MBS noch nicht, solange sich die Fahrzeuge noch auf den getrennten Spuren befinden.

Das führt zu unschönen Kollision. Auf der Testanlage oben ändern Fahrzeuge bei solchen Kollisionen sogar ihre Fahrtrichtung, so das man manuell eingreifen und einzelne Fahrzeuge wieder neu positionieren muss.

Durch die Geschwindigkeiten und die Reststrecke der Fahrzeuge zum selben Zeitpunkt kann ich ermitteln, welches der Fahrzeuge A oder B zuerst am „Treffpunkt“ also dem Zielkontakt ankommt und daraus berechnen, wie weit das andere Fahrzeug z.B. Fahrzeug B abgebremst werden muß, damit es sich hinter Fahrzeug A „einreiht“, ohne das beide kollidieren.

Oben im Bild z.B.: Der rote Bus auf der Geraden und der blaue Bus in der Kurve fahren jeweils 50km/h. Beide sind auf Kollisionskurs. Die Zeit zum Schnittpunkt wird für beide berechnet und das Fahrzeug mit der höheren Fahrzeit zum Ziel (z.B.: B) wird auf eine Geschwindigkeit abgebremst, die es ermöglicht, das es mit einen Abstand von ca. 3-5m hinter dem ersten Fahrzeug (A) den Zielkontakt erreicht.

Sollte sich hinter dem roten Bus noch ein Fahrzeug C befinden, soll C dann auch, falls notwendig, entsprechend abgebremst werden. Fahrzeug B soll sich dann also zwischen A und C einreihen.

Im Prinzip muß ich nur noch die Streckenermittlung optimieren, die ist mit noch zu ungenau.

VG,

Hawkeye

Bearbeitet von Hawkeye

Geschrieben

Die Funktion isHeadingToward berechnet intern bereits den Abstand bis zum Ziel (innerhalb des maximalen Suchradius von 150 Metern), ich kann diesen Wert gern zusätzlich mit zurückgeben. Es bedarf dafür keinen zusätzlichen Parameter, Lua erlaubt mehrere Rückgabeparameter.

Geschrieben
  • Autor
vor 9 Minuten schrieb Neo:

Die Funktion isHeadingToward berechnet intern bereits den Abstand bis zum Ziel (innerhalb des maximalen Suchradius von 150 Metern), ich kann diesen Wert gern zusätzlich mit zurückgeben. Es bedarf dafür keinen zusätzlichen Parameter, Lua erlaubt mehrere Rückgabeparameter

Das wäre klasse, danke @Neo 👍

Geschrieben

Hallo @Hawkeye ,

danke für die Erklärung. Eine interessante AufgabenstellungB|.

vor 7 Minuten schrieb Neo:

Die Funktion isHeadingToward berechnet intern bereits den Abstand bis zum Ziel (innerhalb des maximalen Suchradius von 150 Metern), ich kann diesen Wert gern zusätzlich mit zurückgeben.

... wäre schön, denn es würde sich auch gut dazu eignen Anfangssituationen (Startparameter, wenn eine Anlage anläuft) genauer zu erfassen...

Gruß
EASY

  • 1 Monat später...
Geschrieben
  • Autor
Am 26.7.2025 um 22:55 schrieb Neo:

Die Funktion isHeadingToward berechnet intern bereits den Abstand bis zum Ziel (innerhalb des maximalen Suchradius von 150 Metern), ich kann diesen Wert gern zusätzlich mit zurückgeben. Es bedarf dafür keinen zusätzlichen Parameter, Lua erlaubt mehrere Rückgabeparameter.

Hallo @Neo ,

eine Frage habe ich noch zu dieser Funktion.

Wird intern auch bereits eine Liste von Fahrzeugen angelegt, die aus verschiedenen Richtungen auf einen Gleiskontakt zufahren?

Screenshot 2025-08-27 121639.jpg

Screenshot 2025-08-27 121548.jpg

Screenshot 2025-08-27 121509.jpg

Screenshot 2025-08-27 121532.jpg

Bisher erstelle ich mir eine solche Liste selbst. Es wäre aber schön, wenn auch hier auf die Informationen einer intern vorhanden Liste zurückgegriffen werden könnte.

VG,

Hawkeye

Geschrieben

Eine Liste gibt es nicht, da die Fahrsimulation höchst dynamisch ist. Die Funktion isHeadingToward prüft bei jedem Aufruf erneut, ob ein Fahrzeug in Richtung eines Kontakts fährt.

Geschrieben
  • Autor
vor 36 Minuten schrieb Neo:

Eine Liste gibt es nicht, ….

Danke für die Info.

Dann werde mit meiner selbsterstellten Liste weitermachen.

VG,

Hawkeye

Geschrieben
  • Autor

Hallo @Neo ,

mal vorsichtig gefragt, wann gibst du den Zugriff auf die Strecke bei dieser Funktion frei? 9_9

Ich probiere jetzt schon eine ganze Weile an dem Thema "Schnittstelle von Fahrspuren". Die erforderlichen Längen (Vorderkante/Hinterkanten der Fahrzeuge) ermittle ich bisher nur linear, was gerade bei den unterschiedlichen Kurvenradien an Kreuzungen zu verfälschten Ergebnissen führen kann.

Screenshot 2025-08-31 173454.jpg

Auf der Testanlage macht das noch keinen Unterschied, da hier beide Spuren den gleichen Fehlbetrag erzeugen.

Screenshot 2025-08-31 182508.jpg

Hierzu auch mal eine erste Anlage dazu:

Test Schittstelle Spuren.mbp

Ziel ist es, wenn Fahrzeuge auf Kollisionskurs sind, ein Fahrzeuge rechtzeitig vor der Schnittstelle (rot) so abzubremsen, das die Kollision vermieden, aber trotzdem der Verkehrsfluss kaum beeinträchtigt wird. Ein Fahrzeug zu beschleunigen wäre auch eine Alternative (z.B. bei einer Autobahnauffahrt). Das ist aber erst einer der nächsten Schritte und jetzt noch nicht Thema.

Bisher verfolge ich den Ansatz über die Zeiten t der Fahrzeuge bis zum Ziel. Das wird aber bei sehr niedrigen Geschwindigkeiten problematisch, da bei V -> 0 t unendlich wird. Alternativ wäre der Ansatz über die Reststrecke. Der Ansatz berücksichtigt dann aber nicht, ob ein Fahrzeug weiter entfernt ist und das Ziel aufgrund seiner höheren Geschwindigkeit doch früher erreichen würde.

An einem Kompromiss arbeite ich noch. 9_9 (z.B. Wenn für ein Fahrzeug gilt V = 0 , dann ermittle t über die Zeit für die Beschleunigung von 0 auf 50kmh)

Wer Ideen oder Anregungen dazu hat, immer raus damit. D

VG,

Hawkeye

Geschrieben
vor einer Stunde schrieb Hawkeye:

wann gibst du den Zugriff auf die Strecke bei dieser Funktion frei?

Hallo Hawkeye,
was meinst du mit "Zugriff auf die Strecke"?
Und von welcher Funktion sprichst du?

Geschrieben
  • Autor
vor 9 Minuten schrieb Goetz:

was meinst du mit "Zugriff auf die Strecke"?
Und von welcher Funktion sprichst du?

Hallo Götz,

sorry, ich dachte das erkennt man am Thema des Threads und der Antwort von Neo vom 26. Juli.

VG,

Hawkeye

Geschrieben

Hallo Hawkeye,

okay, die Funktion ist isHeadingToward. Das habe ich jetzt herleiten können.

Aber "Zugriff auf die Strecke"? Da erschließt sich mir nicht, was du damit meinst.

Ein Fahrzeug prüft auf Anfrage (= Bedingung im Ereignis) auf eine Entfernung von ca. 130 Metern voraus liegendem Fahrweg (Maßstab 1:1) ob dort der genannte Kontakt zu finden ist.

Bearbeitet von Goetz
Wert korrigiert

Geschrieben

Hier ist ein Beispiel:

Alle Kontakte voraus werden bis zu einer Entfernung von 130 Metern erkannt,

Kontakte voraus.mbp

Ob du die Fahrstrecke gerade lässt oder (mitsamt den Kontakten darauf) nach Belieben verbiegst (ohne die Länge der Stücke zu verändern!), spielt keine Rolle. Es sind immer 130 Meter Fahrweg voraus.

Geschrieben
  • Autor
vor 12 Minuten schrieb Goetz:

Ein Fahrzeug prüft auf Anfrage (= Bedingung im Ereignis) auf eine Entfernung von ca. 150 Metern voraus liegendem Fahrweg (Maßstab 1:1) ob dort der genannte Kontakt zu finden ist.

Genau, es geht um die Fahrstrecke von Fahrzeugspitze bis zum Kontakt. Die grünen Stecken in den folgenden Bildern werden von vehicle:isheadingTowards(contact) bei Aufruf der Funktion intern ermittelt, stehen uns aber noch nicht zur Verfügung.

Screenshot 2025-08-31 202850.jpg

Screenshot 2025-08-31 203316.jpg

Bisher ermittle ich die Distanz (rot) nur annähernd genau linear mit Lua. (bzw. Vorderkante/ Hinterkante der Fahrzeuge -> siehe nächstes Bild)

Für die gestellte Aufgabe benötige ich einigermaßen genau die Strecken rot und gelb der Fahrzeuge , die auf denselben Kontakt zufahren und das zum gleichen Zeitpunkt.

Screenshot 2025-08-31 173454.jpg

Über die aktuellen Geschwindigkeiten lässt sich dann ermitteln, welches Fahrzeug den Kontakt zuerst erreicht und welches ggf. abgebremst werden muss, um eine Kollision zu vermeiden.

VG,

Hawkeye

Geschrieben
  • Autor
vor 1 Minute schrieb Goetz:

Alle Kontakte voraus werden bis zu einer Entfernung von 130 Metern erkannt,

Hallo Götz,

wir reden aneinander vorbei.

Ich möchte die tatsächlich noch zu fahrende Strecke eines Fahrzeuges bis zum Kontakt, wenn ich die Funktion aufrufe und die Entfernung vom Fahrzeug zum Kontakt kleiner als 100m ist.

VG,

Hawkeye

Geschrieben

Hallo Hawkeye,

Gerade eben schrieb Hawkeye:

Ich möchte die tatsächlich noch zu fahrende Strecke eines Fahrzeuges bis zum Kontakt

Das weiß ich inzwischen. Aber ich glaube, du missverstehst da etwas, weil du von "Zugriff" sprichst.
Und wir reden auch nicht aneinander vorbei, sondern ich bemühe mich, dir die Arbeitsweise dieses Systems verständlicher zu machen. Damit du daraus selbst ableiten kannst, was damit derzeit geht ... und was nicht.

Seit einer Weile erkennen Fahrzeuge voraus liegende Kontakte. Das wird benötigt, um Fahrzeuge am Signal (an der Ampel) anzuhalten.
Die Fahrzeuge sehen ständig, was vor ihnen liegt. Sowohl voraus fahrende Fahrzeuge, als auch alle Kontakte bis auf 130 Meter (1:1) Entfernung. Nur so können sie auf die dynamischen Veränderungen vor ihnen korrekt reagieren. Diesen Umstand kann man sich zunutze machen und zu einem beliebigen Zeitpunkt prüfen, ob ein bestimmter Kontakt unter diesen Objekten ist, die dem Fahrzeug bekannt sind.

Daraus lässt sich bisher nicht ableiten, wie weit dieser Kontakt zu diesem Zeitpunkt entfernt ist.
Aber den Abstand zwischen zwei Kontakten kannst du (etwas umständlich) messen: Dupliziere die Strecke, verschiebe das Duplikat an einen freien Platz und ziehe die Teile gerade ohne ihre Länge zu verändern! Dann kannst du auf gerader Strecke diesen Abstand bequem ausmessen.

Fahrstrecke 1.jpg

Fahrstrecke 2.jpg

Fahrstrecke 3.jpg

Viele Grüße
Götz

Bearbeitet von Goetz

Geschrieben
  • Autor

Hallo Götz,

vor 22 Minuten schrieb Goetz:

Aber ich glaube, du missverstehst da etwas, weil du von "Zugriff" sprichst.

danke für die Erläuterung.

Aber mit Zugriff meine ich den Zugriff auf den Wert „Abstand bis zum Ziel“ als Parameter, der uns in der aktuellen MBS-Version noch nicht zur Verfügung steht, intern aber bereits vorhanden ist.

Womit wir wieder bei der Antwort von Neo wären:

Am 26.7.2025 um 22:55 schrieb Neo:

Die Funktion isHeadingToward berechnet intern bereits den Abstand bis zum Ziel (innerhalb des maximalen Suchradius von 150 Metern), ich kann diesen Wert gern zusätzlich mit zurückgeben. Es bedarf dafür keinen zusätzlichen Parameter, Lua erlaubt mehrere Rückgabeparameter

Meine Frage lautet also übersetzt: Können wir in nächster Zeit noch mit einer kleinen Versionsänderung rechnen, oder wird dieser Wert der Funktion als Parameter erst im nächsten großen Update freigeschaltet. 😁

VG,

Hawkeye

Geschrieben
vor 3 Minuten schrieb Hawkeye:

Meine Frage lautet also übersetzt: Können wir in nächster Zeit noch mit einer kleinen Versionsänderung rechnen

jetzt habe ich es kapiert! $ Danke

Geschrieben
Am 31.8.2025 um 21:41 schrieb Hawkeye:

Können wir in nächster Zeit noch mit einer kleinen Versionsänderung rechnen, oder wird dieser Wert der Funktion als Parameter erst im nächsten großen Update freigeschaltet.

Die Änderung wird Teil des nächsten größeren Updates, aber ewig wird es bis dahin nicht dauern.

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Push-Benachrichtigungen konfigurieren

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.