Buchempfehlung:
Roboter-Autos mit dem Raspberry Pi

Roboter Autos mit dem Raspberry Pi

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.

Donkey Car - OLED Display

Donkey Car – OLED Display

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.

Viurtuelle Umgebung

Viurtuelle Umgebung

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: 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 – Einleitung
Autonom 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 – Trainingskurs
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Donkeycar training in einem Docker Container
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Donkey Car UNIMOG Upgrade
Autonom fahrendes Raspberry Pi KI Roboter-Auto – Manuelle Short Keys
(Visited 731 times, 3 visits today)