[[https://poz.ping.de/?p=1026|Worum geht es]]? Selbstfahrende Modellautos nach dem Vorbild des DonkeyCar Projekts um uns mit Maschine Learning auseinanderzusetzen. Das Gehirn des Fahrzeugs ist ein Raspberry Pi 3 B und als Auge dient eine Raspberry Pi Kamera (Clone) mit 160° Weitwinkelobjektiv. Demnächst setzen wir auch nVidia Jetson Nano als Boards ein, dies ermöglicht dann das Trainieren des neuronalen Netzes direkt im Fahrzeug. (!) Anmelden zu Donkeycar-Workshops könnt ihr euch auf der [[https://weiterbildung.ping.de/|Weiterbildungs-Seite]]. Das Donkeycar Projekt hat die Homepage http://www.donkeycar.com und die Doku liegt unter https://docs.donkeycar.com Einen Slack-Chat gibt es unter https://donkeycar.slack.com/ - schaut mal im Channel #community_germany vorbei! == PINGs Donkeycars == PING hat drei DonkeyCars von der Variante "Donkey Pro" ([[http://docs.donkeycar.com/guide/build_hardware/#choosing-a-car|hier]] in der Doku erwähnt). Sie basieren auf dem [[https://hobbyking.com/de_de/1-10-hobbykingr-mission-d-4wd-gtr-drift-car-arr.html|Mission-D]] 1:10 Driftcar von Hobbyking. Dazu gehört noch ein Raspberry Pi 3B (bzw 3B+) und ein [[https://tutorials-raspberrypi.de/mehrere-servo-motoren-steuern-raspberry-pi-pca9685/|PCA9685 Servo-Board]] (kostet unter 2€ bei AliExpress) das die PWM-Signale erzeugt und selbst per I2C angesteuert wird. Sender (Funkfernsteuerung) und Empfänger benötigt man nicht, wohl aber ein USB-/Bluetooth-Gamepad (oder anderen Joystick) für den PC für das Trainieren (dass dann über das WLAN des RasPi erfolgt). Die 3D-Modelle für den 3D-Druck des Griffs bzw für den Lasercutter (Holzplatte) findet ihr bei [[https://www.thingiverse.com/thing:2805287|Thingiverse]]. Bei anderen RC-Autos im Maßstab 1:10 muss man in der Regel nur die Löcher in der Bodenplatte anpassen. Wichtig ist bei der Wahl des Fahrzeugs eigentlich nur dass Lenkservo und Fahrtenregler separat ausgeführt sind und einzeln per PWM Signal angesteuert werden können. PINGs DonkeyCars haben unterschiedliche Hostnamen. Sie sind über die `.local` TLD erreichbar und werden via mDNS resolved. Die Autos von ping haben die Hostnamen * donkey1.local * donkey2.local * donkey3.local Die Nummer des Fahrzeugs seht ihr auch auf der Holzplatte (one, two, three). === WLAN === Das WLAN wird in `/etc/wpa_supplicant/wpa_supplicant.conf` konfiguriert. Alle referenzierten Dateien befinden sich übrigens auf der `rootfs` Partition. Diese solltet ihr auch vergrößern auf die Größe der MicroSD-Karte (mit `parted` und `resize2fs`) um mehr Platz für Trainigsdaten zu haben. Bei WLANs ohne Verschlüsselung muss die Zeile `psk=“…“` durch `key_mgmt=NONE` ersetzt werden. === Shell-Zugang === Nachdem der RasPi gebootet hat kann man sich z.B. mit `ssh pi@donkey1.local` einloggen. Das Passwort bekommt ihr von Sven. Damit ihr es nicht ständig eingeben müsst packt euren SSH public key ins `~/.ssh/authorized_keys`. Die Daten für donkeycar befinden sich i.d.R. unter `~/mycar` Dort gibt es ein Verzeichnis „models“ mit den fertig trainierten Modellen und ein Verzeichnis „tub“ mit Daten fürs Training. Das Training findet nicht auf dem RasPi statt sondern auf einem (schnellen) PC. Nötige Befehle nach der Installation: === Autonomes Fahren des RasPi mit einem Model: === `python manage.py drive --model models/mymodel` === Manuelles Fahren mit der Möglichkeit Daten fürs Trainieren aufzunehmen: === `python manage.py drive` In beiden Fällen könnt ihr nach dem Start des Webservers auf Port 8887 mit einem Browser verbinden (bei mir geht das Live Video nur mit Google Chrome). * http://donkey1.local:8887/ * http://donkey2.local:8887/ * http://donkey3.local:8887/ Wenn ihr Daten aufnehme so liegen diese im Ordner "tub". Daten müssen vor den Trainieren des neuronalen Netzes noch bereinigt werden. Sämtliche Fahrfehler müssen entfernt werden, sonst erzielt ihr keine brauchbaren Ergebnisse! Dazu löscht alle Bilder und dazugehörigen record_XXX.json Dateien auf denen die Lenkrichung nicht richtig ist. === Trainieren eines Modells model3 auf dem PC mit Daten im Verzeichnis tub: === `python manage.py train --tub tub --model models/model3` === Trainieren eines Modells model4 basierend auf einem model3 auf dem PC mit (weiteren) Daten im Verzeichnis tub: === `python manage.py train --tub tub --base_model models/model3 --model models/model4` Man kann mit der Tastatur lenken: Gasgeben mit “i”, bremsen mit “k”. Besser ist aber ein USB- oder Bluetooth-Gamepad. Dazu im Browser auf den entsprechenden Button drücken. Derzeit haben die Autos zwei getrennte Akkus: Ein USB Powerpack für den RasPi und einen LiPo Akku für das Fahrzeug. Am Auto gibt es für den LiPo einen etwas versteckten Ein-/Ausschalter neben dem Fahrtregler. Wenn ihr den Schalter einschaltet piepst es. /!\ Denkt dran beide Akkus vom Fahrzeug zu trennen wenn ihr fertig seid, da sie sonst kaputt gehen. Wenn ihr den RasPi herunterfahrt mit „sudo shutdown -h now“ dann achtet auf die grüne LED auf dem RasPi neben der roten LED. Wenn sie ausgeht (und bleibt) dann könnt ihr den Micro-USB-Stecker ziehen. == LiPo == Wir haben vier Lithium-Polymer Akkus (2S 2200mAh 7,4V) und ein Akkuladegerät ([[http://cdn-reichelt.de/documents/datenblatt/D400/IMAX_B6AC_V2_BDA.pdf|SkyRC iMax B6AC V2]]). Man kann immer nur einen Akku gleichzeitig laden. Zum Laden muss man das Balancer-Kabel des Akkus und das eigentliche Stromkabel des Akkus an das Ladegerät anschließen. Zum Starten des Ladevorgangs hangelt euch durch das Menü und haltet dann 1 Sekunde lang die Start/OK Taste gedrückt. Wenn ihr mit den Donkeycars fahrt werdet ihr merken dass allmählich die Geschwindigkeit des Fahrzeugs sinkt. /!\ Achtet darauf dass die LiPo Akkus nicht tiefentladen werden. Spätestens bei 3V Zellenspannung sollten die Akkus wieder geladen werden. Die Spannung könnt ihr ermitteln indem ihr den LiPo Akku an das Ladegerät anschließt. LiPo Akkus sollten im LiPo-Schutzbeutel gelagert werden. Bei längerer Lagerung am besten mit einem Ladestand von ca. 70%. == USB Power Pack == Wir haben 3 USB Power Packs. Achtet darauf dass der RasPi am Port der mit „2,1A“ beschriftet ist angeschlossen wird. Zum Laden der Power Packs nutzt ihr den Micro-USB Port am Powerpack. Die Powerpacks haben einen kleinen Knopf mit dem man den Ladezustand überprüfen kann. Bei voller Batterie leuchten 4 blaue LEDs. == Old but good == Hier sind Dinge aus der Vergangenheit gut aufgehoben. [[https://cryptpad.ping.de/code/#/1/edit/WQZpGgvv+SbLY+-IoEypgw/fqcSfHS1LOu7M+4EtkH3Y7py/|Planung für die Maker Faire Ruhr]] im März 2019 im Cryptpad damit Nicht-Pingmitglieder auch editieren können.