Nach dem ich jetzt mehrere Donkey Cars aufgebaut habe und mit diesen Modellautos Trainingsdaten sammele, hatte ich immer wieder das Problem, dass die Software-Installationen der einzelnen Autos unterschiedlich waren. Eine einzige SD Karte für alle Donkey Cars, mit der installierten Donkey Car Software, konnte ich nicht einfach zwischen den Autos hin und her tauschen. Damit das möglich ist habe ich ein paar kleinere Veränderungen an der Software vorgenommen, die nachfolgend erklärt werden.
Im ersten Schritt wird die Software bzw. das fertige Image von der Donkey Car Webseite herunter geladen und auf die SD-Karte geschrieben. Hier unterscheidet sich das Vorgehen von der offiziellen Donkey Car Seite nicht. Die Image Datei gibt es hier zum Download. Für diese Anleitung habe ich die Version “donkey_2.5.0_pi3.zip” als Basis-Image verwendet.
Download: Image-Datei
Nach dem die SD Karte im Donkey Car steckt, das W-LAN funktioniert und die SSH Verbindung zum Raspberry Pi besteht beginnt erst einmal der individueller Teil der Software Installation bis dann wieder das Donkey Car Framework ansich auf dem Raspberry Pi installiert wird.
Individuelle Software Installation
Für die Installation der nachfolgenden Softwarepakte verlässt Du jetzt die virtuelle Umgebung Deines Raspberry Pi. Denn das Image das auf der Donkey Car Seite angeboten wird startet bei der Anmeldung des Users Pi eine virtuelle Umgebung. In dieser befindest Du Dich dann nach dem login egal ob am Monitor oder via SSH/PuTTY.
Du erkennst die aktive virtuelle Umgebung an dem (env) das jeder Kommandozeile in der Konsole vorgestellt ist.
Um die virtuelle Umgebung zu deaktivieren wird der folgende Befehl eingegeben.
Befehl: deactivate
Jetzt führst Du den folgenden Befehl aus um die Informationen über die neuesten Softwarepakete des Raspbian Repository zu erhalten
Befehl: sudo apt-get update
Der nächste Befehl ist optional da wir eigentlich das Donkey Car Image als solches nicht aktualisieren möchten. Der Gedanke dabei ist das keine negativen Seiteneffekte entstehen.
Befehl optional: sudo apt-get upgrade
Für alle die mit der Konsole und den Befehlen nicht so vertraut sind bietet sich immer der Midnight Commander an. Diesen installierst Du mit dem folgenden Befehl:
Befehl: sudo apt-get install mc -y
Der Midnight Commander wird mit dem folgenden Befehl und Root-Rechten gestartet.
Befehl: sudo mc
Beenden kannst Du den Midnight Commander mit der Taste F10.
Für die Dateifreigabe in einem Windows Netzwerk installiert der folgende Befehl das SAMBA Paket.
Befehl: sudo apt-get install samba samba-common-bin ffmpeg -y
Damit der SAMBA Server auch den richtigen Ordner im Netzwerk freigibt muss die /etc/samba/smb.conf Datei noch angepasst werden.
Diese öffnest Du z. B. mit dem Midnight Commander und F4 (wähle als Editor z . B. Nano aus) oder mit dem folgenden Befehl.
Befehl: sudo nano /etc/samba/smb.conf
Genau an das Ende der Datei kopierst Du die folgenden Zeilen für die Dateifreigabe.
[DonkeyCar]
path = /home/pi
writeable = yes
public = yes
guest ok = yes
guest only = yes
guest account = nobody
browsable = yes
Damit das Donkey Car wenn es in einem Netzwerk mit Internetzugang hängt auch die aktuelle Uhrzeit und Datum erhält wird der NTP Dienst zusätzlich installiert. Dazu führe den folgenden Befehl aus.
Befehl: sudo apt-get install ntp -y
Um die Zeitzone zu setzen in der Du Dich aufhältst führe anschließend den folgenden Befehl aus.
Befehl: sudo dpkg-reconfigure tzdata
Jetzt kann der ntp-Dienst mit dem folgenden Befehl neu gestartet werden.
Befehl: sudo /etc/init.d/ntp restart
Um zu überprüfen ob der NTP Dienst auch eine Verbindung zu Peers hat die ihn mit der aktuellen Zeit versorgen führe den nachfolgenden Befehl aus.
Befehl: ntpq -c peers
Jetzt ändern wir noch den Namen des Conkey Cars im Netzwerk und führen den Befehl aus um den gesamten Platz der SD-Karte nutzen zu können. Dazu muss das Konfigurationsmenü von Raspbian aufgerufen werden.
Befehl: sudo raspi-config
Hier einmal den Host namen ändern und den Eintrag Expand file System aufrufen.
Optional: USB Stick EXFAT einbinden
Möchtest Du einen USB Stick am Raspberry Pi verwenden um z. B. die Trainingsdaten auf diesen kopieren zu können empfehle ich das nachfolgende Vorgehen. Der USB Stick muss noch z. B. unter Windows als exFAT formatiert und eingebunden werden. Dazu bitte den Schritte in dieser hier verlinkten sehr ausführlichen Anleitung folgenRaspberry Pi: USB-Stick und USB-Festplatte einbinden.
Für den Fall das der Link nicht mehr erreichbar sein sollte hier die wesentlichen Befehle um den USB Stick als exFAT (unter Windows formatiert) einbinden zu können.
1. Software Installation:
Befehl: sudo apt-get -y install ntfs-3g hfsutils hfsprogs exfat-fuse
2. Geräte Namen suchen:
Befehl: sudo blkid -o list -w /dev/null
3. USB Stick als exFAT einbinden (z. B. unter Windows entsprechend formatiert)
Befehl: sudo mount -t exfat -o utf8,uid=pi,gid=pi,noatime /dev/sda1 /media/usbstick
Optional: OLED Display
Ich habe mir noch günstige OLED Displays gekauft und an meine Autos angebaut, um zu sehen ob das Donkey Car eine IP Adresse in einem mir fremden Netzwerk zugewiesen bekommen hat und welche IP Adresse das Auto dann auch wirklich hat. Hier hatte ich in der Vergangenheit bei anderen großen Veranstaltungen mit ca. 25 Modellroboter Autos so die Tücken von Enterprise Netzwerken und den Admins dazu kennen gelernt. Wie eingangs geschrieben verwende ich an meinem Donkey Car’s immer OLED Display um die IP Adresse sofort sehen zu können. Dafür werden ein paar weitere Softwarepakete installiert. Bitte immer darauf achten, dass Ihr euch nicht in der virtuellen Umgebung des Donkey Cars befindet.
Zuerst werden I2C Tools installiert.
Befehl: sudo apt-get install i2c-tools -y
Jetzt sollte es möglich sein die I2C Adressen der einzelnen I2C Geräte sich anzeigen zu lassen. Dazu den folgenden Befehl ausführen.
Befehl: sudo i2cdetect -y 1
Nach dem das OLED Display mit seiner Adresse angezeigt wurde können die weiteren Pakete installiert werden.
Befehl: sudo apt-get install build-essential python-dev python-pip -y
Befehl: sudo pip install RPi.GPIO
Befehl: sudo apt-get install git -y
Als nächstes wird die Adafruit Bibliothek für das SSD1306 OLED Display auf den Raspberry Pi geklont und installiert.
Befehl: git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
Befehl: cd Adafruit_Python_SSD1306
Befehl: sudo python setup.py install
Befehl: sudo apt-get install libjpeg-dev zlib1g-dev
Befehl: pip install image
Nach dem die Software erfolgreich installiert wurde führst Du das mitgelieferte Beispiel aus, dass die IP Adresse und weitere Informationen des Raspberry Pi auf dem OLED Display anzeigt.
Befehl: python ~/Adafruit_Python_SSD1306/examples/stats.py
Ich habe das Programm stats.py noch in die crontab eingebunden damit es automatisch nach jedem Neustart des Raspberry Pi ausgeführt wird. So sehe ich sofort die wichtigen Informationen wie die IP Adresse meines Donkey Cars.
Dazu die crontab mit dem folgenden Befehl öffnen.
Befehl: sudo nano /etc/crontab
Dann fügst Du nach der Zeile “# m h dom mon dow user command” die folgende Zeile ein die das stats.py Programm im Hintergrund startet und über jeden Startvorgang eine Logging Informationen in die Datei “/home/pi/oled.log” schreibt:
@reboot pi python /home/pi/Adafruit_Python_SSD1306/examples/stats.py >> /home/pi/oled.log 2>&1 &
Soweit wäre jetzt alles installiert und der Raspberry Pi kann neu gestartet werden. Nach dem Neustart und einem anschließenden anmelden via SSH siehst Du dass Du Dich wieder in der virtuellen Umgebung des Donkey Cars befindest. Auch ist ab jetzt die Dateifreigabe /home/pi des SAMBA Servers im Netzwerk erreichbar. Die IP Adresse sollte jetzt auch auf dem OLED Display erscheinen wenn Du dieses verbaut hast.
Hinweis: Display Rotation
Je nach dem wie Du das Display verbaut hast steht dieses z. B. über Kopf. Damit die Anzeige dennoch gut abgelesen werden kann ist es möglich die Anzeige im Display zu drehen. Dazu fügst Du vor der Zeiele “disp.display()” die folgende Zeile noch ein:
disp.image(image.rotate(180))
Im nächsten Abschnitt geht die Installation der Donkey Car Software weiter.
Python Programm in der virtualenv automatisch starten
Die nachfolgende Beschreibung ist sicher interessant für die Leser die automatisch nach dem Startvorgang von Raspbian gleich ein Programm in der virtuellen Umgebung starten möchten. Ich hatte genau diese Anforderung, dass ich ein Python Programm in der virtualenv ausführen wollte nach dem ich das Donkey Car eingeschalten hatte.
Dazu habe ich mir ein contorl.sh Skript im Ordner /home/pi/ angelegt mit dem folgenden Inhalt.
#!/bin/bash
source ~/env/bin/activate
python /home/pi/button.py >> /home/pi/button.log 2>&1 &
Dieses Skript wurde über die /etc/crontab ausgeführt mit dem folgenden Aufruf.
@reboot pi /home/pi/control.sh >> /home/pi/control.log 2>&1 &
So konnte ich ein Programm starten, mit dem ich via Knöpfe das Donkey Car Framework steuern konnte. Es ermöglichte mir die Möglichkeit ohne eine WLAN Verbindung z. B. den drive Modus zu starten, das Donkey Car herunter zu fahren oder den autonomen Modus zu starten mit dem Standard mypilot Piloten.
Donkey Car Framework installieren
Ich habe aktuell (Mitte Dezember 2018) mit der neuesten Donkey Car Version schlechte Erfahrungen gemacht und habe mir daher die 2.5.1 Version installiert.
Wenn Du nicht mehr in der virtuellen Umgebung sein solltest, starte Deinen Raspberry Pi jetzt neu und melde Dich wieder an. Achte darauf, dass dieses kleine (env) am Anfang der Kommandozeile steht.
Die Installation der Donkey Car Version 2.5.1 startet mit dem folgenden Befehl in der virtuellen Umgebung des Donkey Cars.
Befehl: pip install donkeycar==2.5.1
Wenn aber die neueste Donkey Car Version installiert werden soll dann bitte diesen Befehl ausführen. Allerdings kann ich dann nicht weiterhelfen bei eventuellen Problemen.
Befehl (optional): pip install donkeycar[pi]
Die Installation dauert einen Augenblick. Nach der erfolgreichen Installation wird mit dem folgenden Befehl eine Instanz des Donkey Cars erzeugt.
Befehl: donkey createcar ~/mycar
Hinweis: Donkeycar Basis-Image Version
Diese nachfolgenden Pakete haben bei mir noch gefehlt da je nach Image das als Startpunkt von der donkeycar.com Seite herunter geladen wird es Variationen in den vorinstallierten Softwarepaketen gibt. Falls diese doch vorhanden sein sollten müssen sie nicht installiert werden und der Installationsprozess überspringt die Installation mit einem entsprechenden Hinweis.
Jetzt noch die folgenden Pakte in der virtuellen Umgebung installieren.
Befehl: sudo apt-get install python3-picamera
Befehl: pip install adafruit-pca9685
Ab jetzt habt Ihr die Software des Donkey Cars komplett neu aufgesetzt und könnt loslegen. Ergänzend möchte ich noch an dieser Stelle auf die Anpassungen in der config.py Datei eingehen die im Ornder “/home/pi/mycar” liegt und mit den Parametern für die Lenkung und Beschleunigung die Hardwareseite eures Donkey Cars abbildet.
Donkey Car config.py
Damit die SD-Karte zwischen den Autos hin und her getauscht werden kann müssen immer die Werte für die Lenkung und Beschleunigung für das jeweilige Auto automatisch konfiguriert werden. Ein Möglichkeit diese Schwierigkeit zu lösen wäre mit einer einfachen if-Abfrage z. B. der MAC-Adresse der Netzwerkkarte möglich um zu unterschieden in welchem Auto die SD-Karte gerade steckt. Genau so eine Abfrage habe ich in die config.py Datei der Donkey Car Installation implementiert.
Weiter habe ich den Namen der einzelnen Tub-Ordnern in denen Aufzeichnungen der abgefahrenen Strecken gespeichert werden individuell benannt mit Datum und Uhrzeit. Das ist wiederum sehr komfortabel, wenn man Meetups, Schulungen oder Trainings mit mehreren Donkey Cars veranstaltet.
Die config.py Datei wurde an den Stellen angepasst, an denen ein Kommentar mit Datum zu finden ist. Weiter wird ein PS4 Joystick / Gamepad für die Steuerung des Donkey Cars verwendet. Die Konfigurationsdatei gibt es nachfolgend als ZIP Datei zum Download.
Download: Donkey Car config.py
Anpassung manage.py
In der Donkey Car Version 2.5.1 hat sich noch ein kleiner Fehler eingeschlichen. So wird bei der Aufzeichnung der Trainingsdaten, also Bild- und JSON-Dateien der Timestamp in der JSON-Datei nicht gespeichert. In dem entsprechenden Feld steht einfach “null”.
Um dieses Problem zu lösen muss eine kleine Anpassung in der manage.py Datei vorgenommen werden. Dazu einfach die folgende Zeile in der manage.py Datei suchen.
V.add(clock, outputs=’timestamp’)
In dieser Zeile fehlen die eckigen Klammern um die Variable timestamp herum. Die Zeile sollte aber korrekt wie die hier nachfolgend gezeigte Zeile aussehen.
V.add(clock, outputs=[‘timestamp’])
Anschließend ist der timestamp in der JSON Datei mit einem Wert statt null gefüllt.
Zusammenfassung
Ich hoffe mit dieser kleinen Anleitung allen zu helfen die selber ein Donkey Car aufsetzen möchten. Die Anleitung geht selber etwas weiter als nur das Donkey Car zum Laufen zu bekommen. Aber mit dem OLED Display und der Dateifreigabe sind dem Donkey Car Funktionen hinzugefügt die das Arbeiten einfacher machen.
Artikel Übersicht Donkeycar Roboter Auto:
Autonom fahrendes Raspberry Pi KI Roboter-Auto – EinleitungAutonom fahrendes Raspberry Pi KI Roboter-Auto – Chassis
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Elektronik
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Software Installation
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Kalibrierung
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Trainings Vorbereitungen
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Trainingsdaten aufzeichnen
Autonom fahrendes Raspberry Pi KI Roboter-Auto – das Neuronale Netz trainieren
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Donkeycar training in einem Docker Container (optional)
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Donkey Car UNIMOG Upgrade
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Manuelle Short Keys
Autonom fahrendes Raspberry Pi KI Roboter-Auto – IMU Sensor 9-DOF absolute Orientation
Autonom fahrendes Nvidia Jetson Nano AI Roboter-Auto – Vorbereitung
Autonom fahrendes Nvidia Jetson Nano AI Roboter-Auto – Software Installation
Autonom fahrendes Nvidia Jetson Nano AI Roboter-Auto – Konfiguration des Donkey Car Frameworks
Hallo Herr Stapel,
ich habe Ihren Buch (ISBN: 978-3-8362-4294-3) “Roboter-Autos mit dem Raspberry Pi” gekauft
und habe einen Raspberry Pi sowie einen Donkey car gekauft und möchte mit dem Programm
(autonomous-driving.py) was ich von Ihrer web seite heruntergeladen habe über usb stick das Programm
starten. Ist es möglich die software einfach über den usb stick den Donkey car zu starten ohne da noch was
gemacht werden muss?
Für eine Kurze Antwort wäre ich Ihnen sehr , sehr Dankbar.
LG
E.Yazar