Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

KI für autonomes Fahren für Donkey Car Garbage Collector

Verwenden Sie eine TensorFlow SSD MobileNetV2 DNN auf dem Raspberry Pi plus Pi-Kamera, um ein autonomes Auto zu bauen, das zur Objekterkennung fähig ist.

Geschichte

Dieses Projekt zeigt, wie man ein (Raspberry Pi + Pi Camera ) angetriebenes RC-Auto in ein Fahrzeug mit Objekterkennung und autonomem Fahren umwandelt. Dazu werden wir zwei tiefe neuronale Netze einsetzen. Einer für die Objekterkennung und der andere für autonomes Fahren mit Inferenz für Lenkung und Gas. Als Fahrzeugrechner dient ein RPi 3. Aufgrund begrenzter Ressourcen auf dem RPi kann immer nur eines der Netzwerke gleichzeitig ausgeführt werden.

Die Idee ist, das neuronale Netz so zu trainieren, dass es Mülltonnen erkennt, damit das Auto sie autonom aufnehmen kann.


Auto und Laptop identifizieren

Das Projekt besteht aus zwei Teilen. Im ersten Teil ist geplant, ein Faltungsnetzwerk mittlerer Größe zu verwenden, um Objekte im Eingangsvideofeed der Pi-Kamera zu erkennen. TensorFlow wird verwendet, um das CNN-Modell bereitzustellen, und OpenCV wird verwendet, um den Video-Feed von der Pi-Kamera zu verwalten.

Im zweiten Teil werden wir Verhaltensklonen verwenden, um das Auto autonom zu navigieren. Das modifizierte Auto wird auch mit zusätzlichen Sensoren wie Ultraschall-Distanzsensor, GPS und 6-DOF-IMU ergänzt sowie zusätzliche Telemetriefunktionen implementieren.

Einführung

Im Jahr 2017 (vor einem Jahr) veröffentlichte Google MobileNet und Anfang dieses Jahres MobileNetV2. Diese Netzwerke sind speziell für die Arbeit mit eingebetteten Geräten wie Smartphones optimiert. Zufälligerweise fällt die auf RPi 3 verwendete MPU in diese Kategorie, da sie entweder Linux oder Android ausführen kann.

Das erste Problem, auf das man stößt, ist der begrenzte RAM und die begrenzte Rechenkapazität des Raspberry Pi 3. Obwohl dies eine Quad-Core-MPU ist, reicht sie immer noch nicht aus, wenn es um massive Gewichtsdateien geht, die von YOLO benötigt werden (nur Sie Einmal schauen) geben Sie Netzwerke ein.

Die erste Lösung, die mir in den Sinn kommt, ist, das über die Pi-Kamera aufgenommene Bild per WIFI an einen externen PC zu senden und dort die Objektinferenzstufe durchzuführen und dann Befehle an das Donkey Car zu senden. Im Wesentlichen müssen wir bei jedem Schritt das Mutterschiff kontaktieren. Dies ist ineffizient und unpraktisch in Szenarien, in denen eine Kommunikation mit einem externen Laptop nicht möglich ist.

Ich habe zunächst ein VGG16-Netzwerk getestet, das bei der Erkennung von Mülltonnen relativ genau war. Es konnte jedoch nicht auf dem RPi laufen, da die Gewichte allein etwa 350 MB betrugen! Um das VGG-Netzwerk zu testen, beziehen Sie sich auf den beigefügten Code am Ende mit ähnlichen Bildern als Eingabe.

Problem:

Python KerasVGG_test.py

Um das Problem der großen Gewichte zu lösen, werden wir alle Modelle auf dem RPi mit schlankeren Netzwerken betreiben. Insbesondere werden wir das auf einem MobileNetV2 Single Shot Detector basierende CNN verwenden. Dies ist ein DNN, das für sehr kleine (relativ) Gewichte optimiert wurde.

Die Technik wird Transfer-Lernen genannt, da wir vortrainierte Netzwerkgewichtungen verwenden.

Bevor wir uns mit der Software beschäftigen, müssen wir einige Hardware-Modifikationen vornehmen.

Hardware

Ein Magnetauto wurde für das Donkey Car-Projekt verwendet. Magnet ist ein RC-Auto (ferngesteuert), das mit einem 2,4-GHz-Mehrkanalradio betrieben wird. Um den Magneten in ein Eselauto zu verwandeln, sind einige Schritte erforderlich.

1. Demontage

Entfernen Sie zuerst die obere Abdeckung, indem Sie die Clips und zwei Schrauben auf der Rückseite entfernen. Sie finden einen Käfig mit zwei Treibern. Entfernen Sie auch diesen und entfernen Sie dann den äußeren oberen Käfig. Jetzt haben Sie Zugriff auf die Stromkreise am Auto. Von oben sieht man einmal den Empfänger, den ESC (Electronic Speed ​​Controller) und das Servo.

Ein bloßes DonkeyCar

Der Empfänger ist ein 4-Kanal-Empfänger mit einer B/C-Schaltung (Batteriebeseitigung). Jeder Kanal verwendet einen 3-Draht-Anschluss. Die Kanäle CH3 und CH4 werden nicht verwendet. Der Regler nimmt den Akku als Eingang, Netzschalter und den Eingang vom Empfänger Kanal 1. Das Servo wird an Kanal 0 des Empfängers angeschlossen. Das Servo wird zum Lenken verwendet. Der Lenkwinkel kann beim Fahren über einen Joystick manuell getrimmt werden oder muss kalibriert werden.

2. Montieren Sie die Adapter

Zwei 3D-gedruckte Kunststoffadapter werden verwendet, nachdem die beiden Schrauben und das Gehäuseoberteil entfernt wurden. Sie müssen die beiden Adapter anstelle der vorhandenen Clips mit den gleichen Schrauben anschrauben. Nachdem wir die beiden Clips durch die beiden 3D-gedruckten Adapter ersetzt haben, können wir jetzt die obere hölzerne Donkey-Autoplatte montieren.

Adapter, die die langen Clips ersetzen

Schrauben Sie als nächstes den Kameragriff auf der Grundplatinenplatte fest. Setzen Sie dann die Kunststoffgewindeteile auf jedes Loch. Diese dienen zur Befestigung des Raspberry Pi und des Servocontrollers.

3. Servocontroller und RPi

Montieren Sie das RPi und den Servocontroller auf der Holzplatte. Am Ende habe ich Kabelbinder zum Befestigen des RPi verwendet, da ich keine Metallschraube in der Nähe der Antenne anbringen wollte. Nach dem Festschrauben des Servocontrollers verbinden Sie die I2C-Buspins vom RPi mit dem Servocontroller. Nehmen Sie als nächstes ein kleines Messer und schneiden Sie die Kabelbinder durch, die die 3-poligen Drähte des Reglers und des Servos zusammenhalten.

Beim Anschluss an den externen Servocontroller müssen beide Anschlüsse zum Empfänger von diesem getrennt und mit den Kanälen 0 und 1 des Servocontrollers verbunden werden, den wir später auf dem DonkeyCar-Top montieren werden. Platte.

4. Holzplatte

Montieren Sie die Holzplatte an den Adaptern. Verwenden Sie nun die Clips, um die DonkeyCar-Platte an den Magnetchassis-Adaptern zu befestigen.

Montieren Sie das Donkey-Autoschild oben und verwenden Sie ein kurzes USB-Kabel, um den USB-Akku mit dem RPi zu verbinden. Die Gas- und Lenkkabel ragen aus der Öffnung in der Platte heraus und werden mit den Kanälen 0 und 1 des Servocontrollers verbunden, der auf der Donkey-Autoplatte montiert ist.

5. Zusätzliche Sensoren

Das Hauptproblem bei der Standardkonfiguration besteht darin, dass kein Sensor zum Messen der Geschwindigkeit oder des Abstands zu Hindernissen verwendet wird. Ich habe eine 6DOF MPU6050 IMU hinzugefügt, die es dem RPi ermöglicht, 3D-Beschleunigung und Kurven zu messen. Als nächstes habe ich ein GPS zum seriellen Port und auch einen HCSR04-Sensor zur Entfernungsmessung hinzugefügt. Der HCSR04 arbeitet jedoch über 5V und benötigt einen Pegelumsetzer.

Damit ist die Hardwarephase des Geräts abgeschlossen. Das Donkey Car wurde vollständig in ein 4-Rad-Fahrzeug umgebaut, ausgestattet mit:

a) Monokulare Weitwinkelkamera

b) Servoregler.

c) 6-DOF-IMU-Sensor

d) GPS

e) Distanzsensor

Alle zusätzlichen Sensoren werden bei der Erfassung mit einem Zeitstempel versehen und verwendet, um die Trainingsvektoren für das tiefe neuronale Netzwerk zu erweitern.

Um den zusätzlichen Sensor zu unterstützen, muss das Skript manage.py um diese Funktion hinzugefügt werden.

Um die IMU zu verwenden, habe ich zunächst eine Python-Bibliothek für FXOS8700 auf Debian Stretch ausprobiert. Dies funktionierte aufgrund des wiederholten Startfehlers des RPi nicht sofort, daher habe ich eine MPU6050 verwendet, die auch mit einem Gyroskop geliefert wird.

Um den IMU-Code zu testen, verwenden Sie das folgende Snippet unten:

aus IMU importieren MPU6050
mu =MPU6050()
a =imu.run()
a #print answer

Die folgende Software muss aus der virtuellen Umgebung für die MPU6050 stammen:

sudo apt install python3-smbus
pip install mpu6050-raspberrypi

Die Datei meta.json unter dem Tub-Ordner muss erweitert werden, um die Protokollierung von IMU-Daten zu unterstützen.

{"Eingänge":["cam/image_array", "user/angle", "user/throttle", "user/mode", "imu/acl_x", "imu/acl_y", "imu/acl_z","imu /gyr_x“, „imu/gyr_y“, „imu/gyr_z“], „types“:[“image_array“, „float“, „float“, „str“, „float“, „float“, „float“, „float“, „float“, „float“]}

Die manage.py Datei muss auch wie folgt geändert werden:

imu =Mpu6050()
V.add(imu, output=['imu/acl_x', 'imu/acl_y', 'imu/acl_z', 'imu/gyr_x', 'imu/gyr_y', 'imu /gyr_z'], threaded=True)
# Wanne hinzufügen, um Daten zu speichern
inputs =['cam/image_array', 'user/angle', 'user/throttle', 'user/mode', 'imu/acl_x', 'imu/acl_y', 'imu/acl_z','imu/gyr_x', 'imu/gyr_y', 'imu/gyr_z']
types =['image_array', 'float' , 'float', 'str', 'float', 'float', 'float','float', 'float', 'float']

Schließlich habe ich dem Gerät auch noch ein GPS-Modul hinzugefügt. Dies kann zwar nicht in Innenräumen verwendet werden, ist jedoch nützlich für Tests im Freien in Bereichen, in denen Sie eine Verbindung zu einem WIFI-Netzwerk herstellen können.

Wenn man GPS-Daten einloggen muss, muss die gleiche Modifikation wie bei der IMU durchgeführt werden.

Um den HSCR04-Distanzsensor einmal verwenden zu können, muss die RPI.GPIO-Bibliothek aus der Python-Umgebung installiert werden.

pi p RPi.GPIO installieren


Dies fasst alle Hardware-Modifikationen zusammen. Am Ende wirst du ein DonkeyCar haben, das so aussieht:


Software

Die Idee hier ist, eine KI-Pipeline für die Objekterkennung zu implementieren, die auf dem RPi läuft. Der erste Schritt besteht darin, ein Objekterkennungs-DNN bereitzustellen, das auf dem RPi 3 ohne Abhängigkeit von externen Geräten funktioniert. Beginnen wir mit der Installation der benötigten Software.

1. DNN-Bibliotheken installieren

Das Projekt verwendet TensorFlow und OpenCV. Einfach ausgedrückt verwenden wir für die Inferenz auf dem Raspberry Pi ein bereits trainiertes Netzwerk. Nachdem die Gewichte geladen wurden, erfolgt die Objekterkennung und Inferenz für jedes Kamerabild.

pip install tensorflow[pi]
pip install matplotlib raspberry
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-devsudo apt-get install qt4-dev-tools
pip3 install opencv-python

Eine Sache, auf die hingewiesen werden muss, ist, dass TensorFlow ein anderes Dateiformat verwendet als Keras, das einen relativ einfachen Workflow zum Laden von Gewichten als h5-Dateien hat.

sudo pip3 install keras –upgrade

Klonen Sie das offizielle TensorFlow-Modell-Repository.

git clone –recurse-submodules https://github.com/tensorflow/models.git

und exportieren Sie den Pfad:

export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim

Endlich, wenn alles installiert ist und bevor Sie das Problem neu starten

deaktiviere #um den virtuellen env-Arbeitsbereich zu verlassen, wenn du einen verwendest
sudo shutdown -h now

Der nächste Schritt besteht darin, den Protobuffer-Compiler für die Gewichte der MobileNetV2-SSD zu installieren.

2. ProtoBuffer-Compiler installieren

Keras verwendet ein anderes Dateiformat als TensorFlow. Wir müssen uns also mit Protobuffers befassen, dem nativen Format für TensorFlow.

Ich habe Version 3.5.1 installiert

sudo apt-get install autoconf automake libtool curl
wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all–3.5.1.tar.gz
tar -zxvf protobuf-all–3.5.1.tar.gzcd protobuf-3.5.1
./configure

Das Kompilieren wird auf dem RPi ziemlich lange dauern (~1,5 Stunden). Die andere Lösung ist Cross-Compilierung, aber wir müssen es vorerst einfach halten. Problem:

machen

Dann ausgeben:

make check
sudo make install
cd pythonexport
LD_LIBRARY_PATH=../src/.libs

Installiere abschließend den Compiler:

python3 setup.py build –cpp_implementation python3 setup.py test –cpp_implementationsudo python3 setup.py install –cpp_implementation

Exportiere jetzt den Pfad:

exportiere PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
exportiere PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=3
sudo ldconfig

Um den Compiler schließlich zu testen, geben Sie einfach Folgendes ein:

Protokoll

Jetzt werden wir zum Grollen gelesen. Dadurch können wir das Gewicht in ein Format umwandeln, das TensorFlow versteht.

Mehr Details lesen:Autonomes Fahren KI für Donkey Car Garbage Collector


Herstellungsprozess

  1. Echtzeit-Bewegungsplanung für autonome Autos in mehreren Situationen, Unter simulierter städtischer Umgebung
  2. Eine Fahrstunde für Betrieb und Wartung
  3. Vorbereitung auf eine autonome Zukunft
  4. Was kann 5G für das vernetzte Auto leisten?
  5. Sicherheit:Oberste Priorität für Autos der Zukunft
  6. 7 wichtige Tipps für den sicheren Staubabscheiderbetrieb
  7. 3D-Bewegungsverfolgungssystem für autonome Technologie
  8. Ladeanschluss für autonome Drohnenschwärme
  9. Daimler und BMW kooperieren beim autonomen Fahren
  10. Continental ist Pionier bei Lösungen für autonomes Fahren