KI für Carrera Bahn

Hab ich das richtig verstanden das deine Idee ist das Auto im try and error verfahren einen Plan der Strecke erstellen zu lassen. Das hab ich mir auch schon überlegt.

Try & Error | Regelprozess....ok, regelung geht normal nicht in den Error-Zustand.

Aber müsste man dann noch eine Möglichkeit finden dem Auto im Falle eines Abflugs, der ja zwangsläufig kommen wir, zu sagen wo auf der Strecke es sich befindet. Was mich an der Variante ein bisschen stört ist, dass der Wagen nicht auf Anhieb schnell ist. Wir wollen erst mal versuchen die regelnde Lösung umzusetzen falls das aber nicht möglich sein sollte werden wir die Version machen wie sie auch du vorgeschlagen hast.

Das ist Plan B falls das Auto zu träge ist um schnell genug Geschwindigkeit abzubauen.

plan der Strecke...ja - so wie es ein menschlicher fahrer auch macht. runde um runde um die grenzen auszutesten und am maximum zu bleiben. Abflug findet in deinem fall ja nicht statt, weil du eh eine feste begrenzung der Fliehkraft wolltest. das mit der startgeschwindigkeit kannst du als fixwert vorgeben. braucht ja nicht mit 0,1mm/sec anfangen die g-kräfte auszumessen :D. wenn du einmal die beiden max-werte hast, kannst ja mit 90% von dem wert anfangen und dich nach 3 runden am maxlanespeed befinden. beschleunigungs- und verzögerungswert als Konstanten definieren, dann tust dir im programm leichter und vereinfachst den regelprozess. bedenke, du hast in deinem Lab andere Umgebungsbedingen als bei einer Vorführung. evtl. ist mal dreck oder "fingerfett" auf der bahn...du musst regeln, ob du willst oder ned :wink:

halt uns auf dem laufenden

Mit Try an Error meinte ich die geschwindigkeit solange zu erhöhen bis der Wagen abfliegt und dann einen schritt zurück. Aber man muss das ja nur einmal machen und dann weiß man ja ab welcher geschwindigkeit das Auto abfliegt.

Ich halte euch auf jeden fall auf dem Laufenden. Es wird wahrscheinlich noch die ein oder andere Frage auftauchen. Dann werde ich mich nochmal an euch wenden.

bimini:
Die idee ist sehr interresant. Ich werde das morgen mal mit der Gruppe besprechen.
Wobei es noch zwei kleine probleme gibt. Einmal ist es dann nicht möglich zwei autos auf die bahn zu setze oder man müsste da eine andere lösung finde. Das andere ist das die Controller der Bahn ein Regelbarer Widerstand ist das müsste man dann irgentwie Simulieren. Aber ich denke die Probleme sind alles lösbar.
Da wir 4 Monate zeit für das Projekt haben kann man ja evtl. beide Versionen realisieren und dann schauen welches auto schneller ist.

Der regelbare Vorwiderstand des Controllers wird durch einen Transistor mit PWM - Ansteuerung ersetzt; dazu noch einen kleinen Strommeßwiderstand in Serie um zu sehen ob das Auto aus der Bahn geworfen wurde.

Um 2 Autos auf der Bahn fahren zu lassen, brauchst Du 2 Lichtschranken um jedes Fahzeug eindeutig zu messen. Wenn ein Mensch gegen Arduino fahren sollte, dann genügt das Arduinoauto durch einen erhöten Aufbau (Papierfähnchen) eine höhergestellte Lichtschranke zu unterbrechen und das andere Auto so flach ist daß es nicht die Lichtschranke unterbricht.

Man könnte auch das Leitschwert mit einer Lichtschranke in der Führungsrille messen, das ist dann aber ein gravierender Einschnitt in die Fahrbahn.

Grüße Uwe

Falls die Autos nicht abfliegen können kann man auch einfach mit Vollgas fahren. Falls sie abfliegen können gilt weiterhin was ich gesagt habe. Welche Räder Du dabei bremst ist völlig egal. Die Drehmomentenbilanz ist dabei immer die gleiche --> beim Bremsen wird die Achslast immer in Fahrtrichtung verlagert --> wenn Du in einer Kurve bremst wird (ohne Tricks) immer das Heck zuerst nach außen ausbrechen. Dabei ist es völlig egal ob dabei die Räder blockiert werden oder der Motor kurzgeschlossen wird.

Wie man leicht nachrechnet wird der Abflug immer zum Kurvenanfang auftreten. Das ist einfach die Massenträgheit. Entweder man bringt genügend Zentripetalkraft auf oder das Auto fährt die Kurve nicht. Bremsen wenn es schon zu spät ist macht die Sache nur schlimmer.

Was die Lichtschranke angeht: ich würde eine Reflexlichtschranke unter der Bahn montieren. Dann kann man jede Spur getrennt messen. Oder eine Induktionsspule. Das klappt bei großen Autos ja auch, warum sollte das nicht auch bei den kleinen Flitzern gehen?

Wegen der sache mit dem Abflug. Genau die befürchtung das das auto trotz der Bremsung abfliegt hab ich auch. Deswegen werde ich auch morgen nochmal mit meine Physiklehrer reden was der meint. Bei einem Auto das nicht geführt ist ist es ja auf jeden fall so das es nur schlimmer wird wenn man in der kurve bremst. Durch die Führung des wagens könnte sich das aber auch anderst verhalten.Außerdem sind die Bremskräfte in Relation zu gewicht und Geschwindigkeit ungleich höher.

@uwefed
Ich hab des nochmal überlegt. Hab ich das richtig verstand das du nur die Maximal Geschwindigkeit ohne Abflug herausfinden willst und dann ohne zu regeln die über die Komplette strecke fahren willst? Wenn nein wie soll das Auto wissen wo die kurve ist? Wenn ja ist das suboptimal da sehr weit vom Maximum entfernt.

Edit: UNO und Prototyping Shield ist bestellt. Nächste woche gehts los.

Nein; Ich dachte daß ich einen Streckenplan in Funktion der Zeit erstelle und so weiß daß nach x Sekunden eine Kurve kommt und deshalb langsamer gefahren werden muß. Nach der Kurve nach y Sekunden wieder Vollgas.
Grüße Uwe

Wie soll des zeitbasiert funktionieren. Umso schneller das auto fährt umso kürzer wird doch auch die rundenzeit. Dann stimmen doch die zeitabstände nichtmehr.

So Arduino ist heute angekommen. Vorgestern um 22 Uhr bestellt und Geld überwiesen, gestern versendet und heute morgen angekommen. Komputer.de kann ich nur weiterempfehlen. Und ne kleine Tüte Haribo gabs auch noch. Jetzt kanns losgehen. Da ich ja jetzt Bestellt habe änder ich mal noch den Threadtitel.

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:

bimini:
Wie soll des zeitbasiert funktionieren. Umso schneller das auto fährt umso kürzer wird doch auch die rundenzeit. Dann stimmen doch die zeitabstände nichtmehr.

Deswegen hast Du ja die Lichtschranke am Start; alles ist von diesem Moment an gerechnet und startet an jedem Durchlauf neu.
Grüße Uwe

sth77:
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.

Wie schnell das Auto wirklich aus der Bahn fliegt und an welcher Stelle will ich innerhalb der nächsten Woche mal austesten. Ich will einfach mal eine Kamera über die Bahn hängen und dann einen Abflug bei unterschiedlichen Geschwindigkeiten filmen. Ich denke das wird in dieser Hinsicht einiges an Informationen einbringen.

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.

Was da ja auch Abhilfe schaffen würde wäre einfach ein andere Sensor. Beispielsweise ein Line Tracking Sensor der an einem 3-4 cm langen Arm vor dem Auto befestigt ist und die Schiene Erkennt. Oder irgendetwas anderes Optisches. Der G-Kraft Sensor war nur eine Idee von mir. Ich habe den in der CT Hardware-Hacks gesehen und so bin ich überhaupt auf die Idee gekommen.

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:

Ich denke an Arbeitszeit stehen uns so etwa 100-200 Mannstunden zur Verfügung. unser Team besteht aus 2 Leuten und wir haben ab jetzt bis mindestens Ende Juni Zeit. Wie weit wir kommen wird sich zeigen. Meistens kommen dann doch wieder irgentwelche unvorhergesehen Probleme dazwischen. Unser Ziel ist es das wir bis Anfang Februar ein funktionsfähiges Basis Konzept haben und uns ab dann an die Umsetzung zu machen.
Bis dahin stehen noch folgende Sachen auf dem Zettel.

  • Carrera-Bahn organisieren
  • Arduino Programmierung lernen (in progress)
  • Abflugverhalten und Position über Film ermitteln
  • Verhalten des Sensors testen
  • Bremsverhalten und Methoden testen
  • Arduino Programmierung lernen

sth77:
Das ist auch richtig so. Das Zauberwort heißt Spannungsteiler. ;). Dafür brauchst du zwei Widerstände, oder eben ein Poti.

Entschuldige sth77; Für welche Frage war das Die Antwort?
Grüße Uwe

Auf die Frage die ich wieder gelöscht hab weil ich selbst draufgekomen bin. Kopf-->Wand
Ich hab dann meinen Post wieder gelöscht weil ich dachte das es noch niemand gelesen hat. Aber da hab ich euch wohl unterschätzt. :wink:

Also Carrera Bahn ist unterwegs hoffe das ich bis Freitag erste ergebnisse vorlegen kann.

Mit wievielen Umdrehungen dreht den so ein Rad von so nem Auto?

Ich hätte jetzt den Gedanken, das Kurvenprofil nicht nach der Zeit, sondern nach der zurückgelegten Strecke alias Umdrehungen abzuspeichern.

Eine Einführungsrunde mit einer sicheren Geschwindigkeit bei der die Kurven erkannt werden, bei der nächsten Runde Standardwerte für die Kurven. Diese könnte man dann von Runde zu Runde verfeinern.
Wohl viel viel viel Tüftlerei.

Die Frage ist ob die KI auf dem Auto oder außerhalb sitzen soll. Je nach dieser Entscheidung sind bestimmte Sachen machbar oder nicht.

Viele grüße Uwe

Die Frage ist ob die KI auf dem Auto oder außerhalb sitzen soll. Je nach dieser Entscheidung sind bestimmte Sachen machbar oder nicht.

Unser Zeil ist es ein komplett autarkes System zu bauen das Komplett im Auto untergebracht ist. Um am Anfang Erstmal die Machbarkeit zu testen soll der Arduino am Anfang noch in der Mitte der Strecke liegen und mit einem Kabel die Verbindung zum Auto herstellen. Letztendlich legen wir aber alles so aus das es auch im Auto verbaut werden kann.

Mit wievielen Umdrehungen dreht den so ein Rad von so nem Auto?

Ich hätte jetzt den Gedanken, das Kurvenprofil nicht nach der Zeit, sondern nach der zurückgelegten Strecke alias Umdrehungen abzuspeichern.

Eine Einführungsrunde mit einer sicheren Geschwindigkeit bei der die Kurven erkannt werden, bei der nächsten Runde Standardwerte für die Kurven. Diese könnte man dann von Runde zu Runde verfeinern.
Wohl viel viel viel Tüftlerei.

Den Gedanken hatte ich auch schonmal. Das Problem an der Sache ist das die Reifen sehr viel Schlupf haben und so keine Steuerung über die Umdrehungszahl schwierig wird.
Was evtl noch ganz nützlich ist, das in den Kurven gelbe Streifen auf der Strecke sind. Die könnte man ja detektieren und so einen Streckenplan erstellen.

Wieviel Schlupf hat die vorderachse? bedenke auch, dass durch das board das auto deutlich schwerer wird und somit der Schlupf reduziert werden sollte.