KI für Carrera Bahn

Ich habe fleißig mitgelesen und mir ebenso Gedanken darüber gemacht. Die Aufgabe ist komplexer, als es am Anfang schien.

Ein großes Problem ist, dass der Arduino nicht weiß, wie die Strecke aussieht. Das wurde ja bereits geschrieben, dass das Abbremsen des Fahrzeugs zu spät erfolgt. Das ist natürlich auch den Gegebenheiten der Modellbahn geschuldet: Kurven bestehen aus Steckelementen mit festem Radius, die sich an gerade Strecken unmittelbar anschließen. Demnach schlägt die Fliehkraft das Auto sehr schnell aus der Bahn.
Nur zur Info. bei der Straßenplanung macht man das natürlich nicht, hier wird der Kurvenradius beim Einfahren in die Kurve stetig verkleinert und beim Herausfahren wieder vergrößert: Übergangsbogen – Wikipedia
Okay, ich schweife schon wieder ab. :wink: Aber halten wir mal fest, das Fahrzeug muss vor der Kurve wissen, dass es nicht mit Volldampf in reinfahren darf. Dazu muss eine Art Karte vorgegeben sein, dass Fahrzeug muss seine Umgebung (er)kennen.

Im ersten (unspektakulären) Schritt speicherst du die Abfolge der Einzelelemente der Bahn codiert in einem Array zum Beispiel mit dem Werten Gerade=1 und Kurve=2. Dazu legst du die eine maximale Geschwindigkeit für die beiden Elemente fest (Links- und Rechtskurven sollten theoretisch gleich schnell befahren werden können), die du per try&error ermittelst. Um zu wissen, wo sich das Fahrzeug gerade befindet könnte man auf jedes Element eine Markierung für eine Reflexlichtschranke (CNY 70) setzen. Natürlich muss man nicht darum herum, einen Referenzpunkt für die Startlinie zu setzen, der sich in irgendeiner Weise von den genannten Streckenmarkierungen unterscheiden sollte. Ob man hier nun einen "Doppelstrich" auswertet, oder in die Spurrinne eine LED setzt die zusätzlich ausgewertet wird, ist dir überlassen. :wink: An dieser Stelle hätte man die Vorbereitung der Bahn auch für meine nächsten Schritten fertig. (An dieser Stelle würde ich ein Schulprojekt auch schon beenden, finde ich für Schüler schon anspruchsvoll genug.)

Das ist natürlich keinesfalls optimiert, aber dieses Prinzip kann noch erweitert werden. Im Array speichern wir nun nicht mehr die Bauteile, sondern direkt die Geschwindigkeiten, die darauf gefahren werden können. Auch hier würde ich vorerst try&error favorisieren, also die Geschwindigkeiten manuell in den Programmcode setzen. Zugegeben, der Schritt war klein, bezeichnet aber den Wechsel vom "Streckenarray"
zum "Geschwindigkeitsarray".

An dieser Stelle rudern wir einen Schritt zurück, wir implementieren den Sensor. Am besten in irgendeiner Form, dass uns ein HIGH zurückgegeben wird, wenn das Auto aus der Bahn fliegt. Klingt wiederum einfach ist es aber vermutlich nicht - so meine Theorie. Damit haben die Möglichkeit, zu hohe Geschwindigkeiten zu detektieren - und zwar abhängig von der Position auf der Strecke. Somit könnten wir also eine Grundgeschwindigkeit festlegen, wenn die Strecke damit absolviert ist, können wir streckenabschnittsweise die Geschwindigkeit bis zum Überschlag anpassen. Wenn uns der Wahrheitswert für den Überschlag mitgeteilt wird, reduzieren wir die Geschwindigkeit wieder ein wenig. Problem dabei: Das Auto hat keinen Strom mehr... Daher sollten wir (wie es ja auch schon genannt wurde) die Versorgungsspannung einen Moment abpuffern können. Also Motor ausschalten und die Restenergie nutzen, um das Ereignis zu speichern, bspw. im Eeprom.
Also wieder das Auto auf die Bahn setzen und an der Stelle des Rauswurfs mit reduzierter Geschwindigkeit fahren und den nächsten Streckenabschnitt austesten.

Das ist bereits ein einigermaßen optimiertes, selbstermitteltes Geschwindigkeitsbild, was sich aber immer noch steigern lässt! So kann man Beschleunigungs- und Abbremsrampen implementieren, um sanfte Geschwindigkeitsanpassungen zwischen den Streckenabschnitten zu haben. Will man diese nicht programmieren, kann man auch die Streckenabschnitte verkleinern: So wird dem Teilstück Gerade1-Gerade2-Kurve1-Kurve2 (z.B.mit den Geschwindigkeiten 255-255-100-100) noch jeweils eine Zwischenmarkierung verpasst: Gerade1a-Gerade1b-Gerade2a-...Kurve2a-Kurve2b. Das Geschwindigkeitsarray wird damit auch doppelt so groß: 255-255-255-200-150-100-100-100. Das bedeutet, dass die Auflösung unserer Karte steigt.

Weitere theoretische Überlegungen wären die Berücksichtigung des Folgeabschnittes bei der Geschwindigkeitsanpassung: Kann ich bspw. ein einzelnes Kurvensegment mit höherer Geschwindigkeit durchfahren als zwei aufeinanderfolgende? Aber ich denke, dass sprengt eindeutig den Rahmen eines Schulprojektes. :smiley:

Danke fürs Lesen... :wink: