Buchempfehlung:
Roboter-Autos mit dem Raspberry Pi

Roboter Autos mit dem Raspberry Pi

In diesem Beitrag beschreibe ich wie ein Donkey Car auf Basis des NVIDIA Jetson Nano aufgebaut werden kann. Dabei ist der Unterschied zu einem Setup mit einem Raspberry Pi ist sehr gering. Ich möchte einen Jetson Nano verwenden da ich einige Vorteile sehen. Der Jetson Nano ist deutlich schneller als ein Raspberry Pi 3 Model B+ und mit der GPU kann das neuronale Netz nicht nur ausgeführt werden sondern auch direkt in dem Donkey Car berechnet werden. So wird kein zusätzlicher Computer mit einer GPU für das Training des neuronalen Netzes benötigt. Da der Preisunterschied mit ca. 65,-€ eher gering ist lohnt sich der Kauf eines Jetson Nano wenn man auf einen extra Computer mit GPU Unterstützung für das Training des neuronalen Netzes verzichtet werden kann.

Vorbereitung der Installation:

Als erstes muss das offizielle Image von NVIDIA für das Jetson Nano Board auf eine SD-Karte geschrieben werden. Für diese Anleitung wurde von mir das Image mit der Bezeichnung und Version „jetson-nano-sd-r32.1-2019-03-18.img“ verwendet.

Die Image Datei findet man auf der NVIDA Webseite unter der folgenden URL: https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write

Sie sollten die Image Datei auf eine schnelle Mirco-SD Karte schreiben, die mindestens 32GB groß ist. Anschließend stecken Sie diesen in das Nano Board, schließen das Board an einem Monitor, Maus, Tastatur an und schalten es sein (Stromversorgung via micro-USB Stecker herstellen).

NVIDIA Jetson Nano Donkey Car

NVIDIA Jetson Nano Donkey Car

Die ersten Schritte sind ganz einfach. Es muss einmal die Sprache festgelegt werden und das Tastaturlayout. Anschließend wird eine Verbindung via WIFI USB Adapter zum eigenen Netzwerk aufgebaut. Eine Alternative ist natürlich auch das LAN-Kabel. Aber dieses macht an einem Donkey Car nicht wirklich Sinn.

Der folgende USB WIFI Adapter hat bei mir einwandfrei am Jetson Nano funktioniert.

Loading ...

Hinweis – Netzwerk automatisch starten:

Damit eine Netzwerkverbindung über den WIFI USB Adapter sich immer automatisch verbindet, auch wenn Sie nicht User/Passwort über einen Monitor / Tastatur eingeben, müssen Sie unter den Benutzereinstellungen Ihr Profil so einrichten das sich Ihr User automatisch unter Ubuntu anmeldet.

Um den User Account anzupassen bitte links oben auf das Symbol für die Suche klicken und nach “user” suchen (1). Jetzt auf das Symbol für User Accounts klicken (2). Das Fenster mit den vorhandenen User Accounts öffnet sich.

Jetson Nano User Account

Jetson Nano User Account

Jetzt den entsprechenden User auswählen der sich automatisch anmelden soll. Dazu rechts oben (1) mit dem Admin Passwort das Profil entsperren (lock). Anschließend den Schalter für “Automatic Login” auf ON umschalten (2).

Jetson Nano User Account Settings

Jetson Nano User Account Settings

Nach dem alles soweit konfiguriert wurde wechseln Sie in das Terminal Fenster um mit der Software Installation fortzufahren.

Hinweis – Netzwerkverbindung:

Für die komplette Installation empfehle ich das Donkey Car via Netzwerkkabel an dem eigenen LAN anzubinden. Die WIFI Verbindung hat sich bei meinem Jetson Nano und USB WIFI Adapter als sehr instabil erwiesen.

Hilfreiche Tools:

Damit die Konfiguration etwas leichter klappt verwende ich immer den Text-Editor Nano sowie den Midnight Commander. Beide Tools werden über die nachfolgenden Befehle auf dem Jetson Nano installiert.

Als erstes bringen Sie die Repository-informationen auf den neuesten Stand. Dazu führen Sie den folgenden Befehl aus.

Befehl: sudo apt-get update

Nano ist der von mir persönlich vervorzugte einfache Text-Editor. Daher empfehle ich an dieser Stelle die Installation.

Befehl: sudo apt-get install nano

Mit dem Midnight Commander können im Linux Terminal ganz einfach Dateien editiert oder kopiert werden ohne das man die dazu notwendigen Linuxbefehle kennen muss.

Befehl: sudo apt-get install mc

Da nmap nicht installiert ist auf dem Jetson Nano muss dieses noch mit dem folgenden Befehl installiert werden.

Befehl: sudo apt-get install nmap

Nach dem das Update durchgelaufen ist, die beiden Tools “Nano” und “MC” installiert sind beginnt die eigentliche Softwareinstallation für das Donkey Car Framework auf dem Jetson Nano.

Remote Desktop Steuerung

Ich bin immer wieder gescheitert die Remote Desktop Steuerung zu aktivieren. So habe ich im Internet nach einer Lösung gesucht und bin auf folgende Seite “Getting Started with the NVIDIA Jetson Nano Developer Kit” gestoßen. Die hier beschriebene Lösung funktioniert ohne Probleme und ermöglicht mir den Jetson Nano remote über eine grafische Oberfläche zu steuern. Ich brauche diese grafische Sicht, da ich so z. B. die WIFI Verbindung ändern / wählen kann.

Da es wohl eine inkompatibilität mit dem Gnome Desktop gibt und die grafische Konfiguration der Desktop Sharing Eingenschaften lautlaus abstürzt müssen ein paar kleine Anpassungen vorgenommen werden um die Einstellung vornehmen zu können. Nach diese Anpassungen ist es möglich sich mit dem RealVNC Client von z. b. einem Windows Rechner aus sich mit dem Jetson Nano Computer zu verbinden.

Als erstes öffnet bittet über das Terminal Fenster mit dem folgenden Befehl die Datei “org.gnome.Vino.gschema.xml”:

Befehl: sudo nano /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml

Füge anschließend die folgenden Zeilen in die “org.gnome.Vino.gschema.xml” Datei ein. Ich habe diese Zeilen direkt am Anfang eingefügt.

<key name='enabled' type='b'>
   <summary>Enable remote access to the desktop</summary>
   <description>
   If true, allows remote access to the desktop via the RFB
   protocol. Users on remote machines may then connect to the
   desktop using a VNC viewer.
   </description>
   <default>false</default>
</key>

Das folgende Bild zeigt an welcher Stelle ich die Zeilen in die XML Datei eingefügt habe.

org.gnome.Vino.gschema

org.gnome.Vino.gschema

Anschließend speichere die Änderungen ab. Jetzt müssen die Gnome Schemata “glib-compile-schemas” mit dem folgenden Befehl neu kompelliert werden.

Dazu bitte den nachfolgenden Befehl im Terminal Fenster ausführen:

Befehl: sudo glib-compile-schemas /usr/share/glib-2.0/schemas

Ab jetzt ist es möglich die Desktop Sharing eigenschaften über die grafische Oberfläche zu starten und das Desktop Sharing zu konfigurieren.

Dazu bitte links unten auf das Symbol für “Einstellungen” klicken und dann auf den Eintrag “Desktop Sharing” klicken. Die Desktop Sharing Konfiguration startet jetzt. In der Desktop Sharing Oberfläche nehme wie im nachfolgenden Bild gezeigt die Änderungen vor.

Jetson Nano - Desktop Sharing

Jetson Nano – Desktop Sharing

Damit der VNC Server auf dem Jetson Nano automatisch startet muss noch eine weiter Einstellung vorgenommen werden. Dazu klicke oben links bitte auf das “A” Symbol für die Suche. Suche heir nach “startup applications” um den VNC Server immer nach jedem neustarten des Jetson Nano zu starten. Klicke auf den Eintrag “startup applications” und nehme die folgenden Einstellungen in der “Startup Applications Preferences” Sicht vor.

1. Klicke auf “add” um einen neuen Eintrag für den VNC Server vorzunehmen und nenne diesen Vino.

2. Füge in dem Feld “Command” die folgende Zeile ein “/usr/lib/vino/vino-server”.

3. Im Feld “Comment” kannst Du z. B. “VNC Server” eintragen.

4. Speichere die Einstellungen über den Knopf “Save” ab.

Jetson Nano VNC Server Auto Start

Jetson Nano VNC Server Auto Start

Vino verwendet die Verschlüsselung nach TLS security type (18) welche von vielen Programmen wie dem TightVNC Client oder RealVNC Client nicht unterstützt werden. Daher müssen noch die folgenden Befehle im Terminal Fenster ausgeführt werden um die Verschlüsselung zu deaktivieren. Daher sollte nach dem deaktivieren die Kommunikation mit dem Jetson Nano nur noch innerhalb einem sicheren Netzwerk erfolgen.

Befehl: gsettings set org.gnome.Vino require-encryption false

Befehl: gsettings set org.gnome.Vino prompt-enabled false

Jetzt starte bitte den Jetson Nano neu. Der VNC Server sollte jetzt automatisch starten und überprüfen kannst Du dies mit dem kleinen Programm nmap.

Ob der VNC Server aktiv läuft kannst Du mit dem folgenden Befehl jetzt im Terminal Fenster überprüfen.

Befehl: nmap <Name des Computer z. B. nano>

Da mein Jetson Nano den Namen “nano” erhalten hat führe ich “nmap nano” aus.

Jetson Nano nmap VNS server

Jetson Nano nmap VNS server

Software Installation:

An dieser Stelle möchte ich mich bei allen Usern im NVIDIA Forum bedanken für die vielen dort verfügbaren Hinweise sowie bei „Fei Cheung“ für diese Beschreibung Getting started with Jetson Nano and Donkey car aka Autonomous Car Portal.

Zunächst werden Sie ein paar Python Bibliotheken und Bibliotheken für die Verwendung von TensorFlow installiert.

Befehl: sudo apt-get install python3-pip libhdf5-serial-dev hdf5-tools

Nach der Installation muss unbedingt ein Neustart des Systems durchgeführt werden. Denn der nachfolgende Schritt warf bei mir immer eine lange Liste an Fehlern und nach vielen Wiederholungen muss es wohl am fehlenden Neustart gelegen haben.

Starten Sie den Nano mit dem folgenden Befehl neu:

Befehl: sudo reboot

Bei mir hat dann die Installation von TensorFlow mit dem folgenden Befehl irgendwann ohne Fehler geklappt. Für alle die den nachfolgenden Befehl besser in seinem Aufbau verstehen möchten empfehle ich folgende Erklärung von NVIDIA (Installing TensorFlow)

Befehl: pip3 install --no-cache-dir --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v42 tensorflow-gpu==1.13.1+nv19.3 --user

Hinweis: Ich hatte in den letzten Tagen mehrfach Probleme die Software zu installieren. Mit dem Zusatz –no-cache-dir hat es jetzt funktioniert. Daher wenn es während der Installaton zu einem Fehler kommt hilft eventuell dieser Post hier weiter. Unable to install TensorFlow on Jetson Nano because of “404” on NVidia server!

Die Installation dauert recht lange und es lohnt sich nicht den Bildschirm zu beobachten. Nach der Installation von TensorFlow können Sie wie folgt prüfen ob diese erfolgreich war.

Starten Sie in der Konsole python3 mit dem folgenden Befehl:

Befehl: python3

Anschließend importieren Sie TensorFlow in dieser Python3 Umgebung mit dem folgenden Befehl.

Befehl: import tensorflow as tf

Es sollte keine Meldung im Terminalfenster erscheinen. Wenn einer Fehler erscheinen sollte dann ist TensorFlow nicht richtig installiert. Mit der Tatenkombination „CTRL + D“ verlassen bzw. beenden Sie die Python3 Umgebung wieder.

Befehl: CTRL + D

Als nächstes können Sie das Pytorch Framework installieren. Dazu laden Sie dieses zunächst von der NVIDIA Seite mit dem folgenden Befehl im Terminal Fenster herunter:

Befehl: wget https://nvidia.box.com/shared/static/veo87trfaawj5pfwuqvhl6mzc5b55fbj.whl -O torch-1.1.0a0+b457266-cp36-cp36m-linux_aarch64.whl

Anschließend starten Sie die Installation mit diesem Befehl:

Befehl: pip3 install numpy torch-1.1.0a0+b457266-cp36-cp36m-linux_aarch64.whl

Nach der erfolgreichen Installation testen Sie erneut ob Pytorch erfolgreich installiert wurde. Dazu müssen Sie wieder

Befehl: python3

Importineren Sie jetzt Pytorch mit:

Befehl: import torch

Es sollte die Versionsnummer z. B. „1.1.0a0+b457266“ angezeigt werden. Allerdings kam bei mir keine Meldung mehr.

Als nächstes interessiert uns ob die CUDA Treiberunterstützung verfügbar ist. Dazu führen Sie den folgenden print Befehl aus.

Befehl: print('CUDA available: ' + str(torch.cuda.is_available()))

Es sollte jetzt die Medlung „CUDA available: True“ im Terminal Fenster erscheinen.

Mit der Tastenkombination „CTRL + D“ verlassen Sie die Python3 Umgebung wieder.

Befehl: CTRL + D

Zum Schluß werden noch die Pakete SCIPY und KERAS installiert. Beide werden benötigt um das Donkey Car Framework auf dem Jetson Nano laufen lassen zu können. Dazu führen Sie die beiden folgenden Befehle nacheinander aus.

Befehl: sudo apt-get install python3-scipy

Befehl: sudo apt-get install python3-keras

Hier testen wir nach der Installation ob KERAS erfolgreich installiert wurde. Dazu wechseln Sie wieder in die PAthon3 Umgebung.

Befehl: python3

Anschließend importieren Sie KERAS in dieser Umrebung.

Befehl: import keras

Es sollte eine Meldung wie folgt erscheinen „Using TensorFlow backend.“.

Jetzt ist der Teil der Softwareinstallation abgeschlossen der die Basis für das Donkey Car Framework legt. Jetzt folgen noch spezielle Pakete die benötigt werden wie die Bibliothek von Adafruit für den PCA9685 Servo-Kontroller.

Dieses installieren Sie mit dem folgenden Befehl:

Befehl: pip3 install Adafruit_PCA9685

Die Pins sind identisch zum Raspberry Pi angeordnet. Das soll heißen 3,3V, SCL, SDA und GND sind die gleichen Pins und daher ergibt sich hier keine Änderung zum Raspberry Pi.

Jetson Nano I2C bus

Jetson Nano I2C bus

Nach dem Sie den PCA9685 Servo Kontroller angeschlossen haben führen Sie den folgenden Befehl aus um zu sehen ob der Servo-Kontroller auch gefunden wird.

Befehl: sudo i2cdetect -y -r 1

Sie sollten den Servo-Kontroller mit den beiden I²C Adressen 40 und 70 im Terminal Fenster angezeigt bekommen.

Damit der User mit dem Sie am JEtson Nano arbeiten, also der User den Sie zu beginn der Installaton angelegt haben auch ohne sudo auf den I²C Bus zugreifen darf muss dieser User der Gruppe i2c hinzugefügt werden.

Dazu führen Sie den folgenden Befehl aus.

Befehl: sudo usermod -a -G i2c <hier den usernamen eingeben>

Bitte starten Sie den Nano jetzt neu mit dem folgenden Befehl:

Befehl: sudo reboot

Nach dem der Nano wieder hochgefahren ist prüfen Sie ob Ihr user der Gruppe i2c hinzugefügt wurde. Dazu führen Sie im Terminal Fenster den folgenden Befehl aus.

Befehl: groups

Es sollte eine Meldung ähnlich wie folgende erscheinen.

i2c adm cdrom sudo audio dip video plugdev lpadmin gdm sambashare gpio

Jetzt ist alles soweit installiert und funktionsbereit.

Die Kameraunterstützung am Jetson Nano

Als nächstes schließen Sie die Kamera an. Welche Kamera am Jetson Nano funktioniert fahren Sie im Beitrag Jetson Nano – Raspberry Pi CSI Weitwinkelkamera von mir.

Donkey Car Framework installieren:

Wie zu Beginn des Artikel erwähnt folge ich mit Dieser Anleitung in weiten Teilen der Beschreibung von Fei Cheung. Er hat eine Version des Donkey Car Frameworks auf GitHub online gestellt die mit kleinen Modifikationen auf dem Jetson Nano läuft. Daher wird im weiteren Verlauf der Beschreibung genau diese Version installiert.

Zu nächst klonen Sie das Donkey Framework von GitHub auf den Jetson Nano mit dem folgenden Befehl.

Befehl: git clone https://github.com/custom-build-robots/donkeycar.git

Dann wechseln Si emit dem Befehl “cd donkeycar“ in das Verzeichnis.

Befehl: cd donkeycar

Mit dem folgenden Befehl installieren Sie dann das Donkey Car Framework auf dem Jetson Nano. Das kann eine lange Zeit in Anspruch nehmen da noch weitere Abhängigkeiten installiert werden.

Befehl: pip3 install -e .

Nach einem Neustart ist das Donkey Car Framework installiert und kann genutzt werden sprich die nachfolgenden Schritte ausgeführt werden.

Fei Cheung schreibt in seinem Post auch etwas zu den Anpassungen die er vorgenommen hat. Diese Anpassungen sind schon soweit in dem von mir bereit gestellten GitHub Repository integriert.

For those who are interested. I edit the following things.

  1. Add a new camera class
  2. Add a default bus to Actuator parts
  3. Add Int typecasting in Keras.py for a variable to make training works

Bevor Sie jetzt die eigentliche Instanz des Donkey Car Frameworks auf Ihrem Jetson Nano initialisieren ist e seine kurze Überlegung wert dieses in einer virtuellen Umgebung vorzunehmen. Diese installieren Sie wie folgt.

Befehl: sudo apt-get install virtualenv

Das Kürzel „env“ steht hier für den Namen der virtuellen Umgebung die Sie anlegen.

Befehl: virtualenv env -p python3

Anschließend müssen Sie die virtuelle Umgebung „env“ aktivieren damit Sie in dieser die Instanz des Donkey Cars anlegen können.

Befehl: source env/bin/activate

Mit dem folgenden Befehl legen Sie die Donkey Car Instanz „mycar“ in der zuvor gestarteten virtuellen Umgebung mit dem Namen “env” an. Sie befinden sich im Pfad /home/<user name>/donkeycar.

Befehl: donkey createcar mycar

Ab jetzt können Sie über den Ordner mycar das Donkey Car Framework konfigurieren und starten. Wie das genau geht und was Sie hier machen können entnehmen Sie bitte meinen Beiträgen rund um das Donkey Car.

Hinweis –  virtuelle Umgebung automatisch starten:

Damit die virtuelle Umgebung mit dem Namen “env” immer gestartet wird wenn Du Dich mit Deinem User am Nano anmeldest musst Du in der “/home/<user name>/.bashrc” Datei ganz am Ende den Aufruf “source env/bin/activate” einfügen um die virtuelle Umgebung automatisch bei jedem Login zu starten.

Terminal auto load virtual env

Terminal auto load virtual env

manage.py und config.py

In dem Repository stehen die von mir angepassten manage.py und config.py Dateien zur Verfügung. Bitte die im Repository vorhandene “config_and_manage.zip” Datei in den zuvor erstellten “mycar” Ordner entpacken und die beiden vorhandenen manage.py und config.py Dateien überschreiben.

Danach sollte es möglich sein mit dem Donkey Car und einem Sony PS4 Controller fahren zu können.

Hinweis – Anpassungen config.py:

In der config.py Dateien müssen Sie noch die für Ihr Donkey Car gültigen Konfigurationen vornehmen.

Mit dem folgenden Befehl wird auf dem Jetson Nano das Donkey Car Framework gestartet um die Trainingsdaten aufzuzeichnen.

Bitte in den Ordner mycar wechseln.

Befehl: cd ~/donkeycar/mycar

Trainingsdaten aufzeichnen

Anschließend den folgenden Befehl ausführen. Hier muss eventuell wie gezeigt ein sudo vorgestellt werden. Wenn ein Fehler kommen sollte dann einmal ohne sudo probieren.

Befehl: sudo python3 manage.py drive

Sie dazu auch den folgenden Bericht der an dieser Stelle unabhängig vom Raspberry Pi oder Jetson Nano Gültigkeit hat.

Autonom fahrendes Raspberry Pi KI Roboter-Auto – Trainingsdaten aufzeichnen

Neuronales Netz trainieren

Nach dem die Trainingsdaten aufgezeichnet sind kann das Neuronale Netz mit dem folgenden Befehl trainiert werden. Wichtig dabei ist, dass die für das Training zu verwendenden Daten im Ordner “/home/<user>/donkey/mycar/data” liegen. Das tranierte Neuronale Netz mit dem Namen mypilot liegt im order “/home/<user>/donkey/mycar/models”.

Befehl: sudo python3 ~/donkeycar/mycar/manage.py train --model ~/donkeycar/mycar/models/mypilot

Speicherbelegung

Beim Training des Neuronalen Netzes habe ich Fehlermeldungen erhalten, dass zu wenig speicher verfügbar ist und es so zu Performance Problemen kommen kann. Das nachfolgende Bild zeigt die Meldung beim Training des Piloten auf dem Jetson Nano.

Jetson Nano Donkey Car – training memory problem

Eine Abhilfe schafft das Anlegen einer Swap Datei in die bei zu wenig freien Arbeitsspeicher entsprechende Daten ausgelagert werden können. Dazu wird diese Swap Datei auf der micro SD-Karte angelegt. Das Anlegen der Swap Datei geht mit den nachfolgenden Befehlen.

Befehl: sudo fallocate -l 6G /var/swapfile

Befehl: sudo chmod 600 /var/swapfile

Befehl: sudo mkswap /var/swapfile

Befehl: sudo swapon /var/swapfile

Befehl: sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'

Nach dem Einrichten der Swap Datei kam es bei mir zu keinen Meldungen mehr während dem Training des Neuronalen Netzes das zu wenig Speicher verfügbar wäre.

Viele weitere gute Tips und Anleitungen finden sich unter der folgenden URL: Jetbot WIKI

Autopiloten starten

Nach dem das Neuronale Netz mypilot erfolgreich trainiert wurde kann es mit dem folgenden Befehl gestartet werden.

Befehl: sudo python3 ~/donkeycar/mycar/manage.py drive --model ~/donkeycar/mycar/models/mypilot

Video – Jetson Nano self-driving Donkey Car:

Das Video zeigt die ersten autonom gefahrerenen Runden mit dem Jetson Nano und die kleinen Fehler die noch passiert sind.

Zusammenfassung:

Mir gefällt das Jetson Nano sehr gut. Es ist ein kompaktes Board mit richtig viel Power. Auch die softwareinstallation klappte recht gut und fast ohne Probleme. Hier geht ein großer Dank an für seinen tollen Beitrag und für das überarbeitete Donkey Car Framework. Wie es mit der Stromversorgung weiter geht muss ich noch prüfen.


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 – 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 AI Roboter-Auto – NVIDIA Jetson Nano SBC
(Visited 1.691 times, 5 visits today)