Ich habe auf meinem Donkey Car einen IMU Sensor 9 DOF absolute Orientation verbaut. Die Idee die ich damit verfolge ist, das Neuronale Netz mit den gemessenen Beschleunigungswerten zu trainieren anstatt mit den Werten des PS4 Kontrollers. So sollte es dem Neuronalen Netz möglich sein z. B. einen Berg hoch zu fahren oder auf einen sich leerenden Akku entsprechend durch die Befehle der Motorsteuerung an den Motor zu reagieren. Ob das auch so ist und überhaupt funktioniert werden die noch ausstehenden Tests zeigen. Generell sollte es aber nicht schaden mehr Daten über das Fahrzeug, sein Fahrverhalten und weiteren Eigenschaften zu sammeln als auf diese zu verzichten.

Dexter Industries BNO055 Sensor

Dexter Industries BNO055 Sensor

Welchen Sensor ich verbaut habe und wie ich diesen generell unter Raspbian in betrieb genommen habe erkläre ich im folgenden Post hier auf meinem Blog: Dexter Industries IMU Sensor 9-DOF Absolute Orientation BNO055

BNO055 Donkey Car Part

Damit das Donkey Car Framework den BNO055 Sensor verwenden kann muss ein extra Part dafür geschrieben werden. Dieses Part habe ich in Python geschrieben und online gestellt. Das Part ermöglicht es alle Daten die der Sensor ausgibt in die JSON Datei pro aufgezeichnetem Bild zu schreiben.

Das Part steht auf GitHub in seiner noch frühen Version online zur Verfügung:

URL: donkeypart_bno055

Einbinden des Donkey Car Parts BNO055

Das Einbinden des Parts ist eigentlich recht einfach.

In der manage.py Datei muss die folgende Zeile hinzugefügt werden. Diese lädt das neue Part bno055 wenn das Framework gestartet wird.

from donkeycar.parts.imubno055 import bno055

Nach dem das Part eingebunden ist muss noch festgelegt werden welche Sensorwerte gespeichert werden sollen. Dazu habe ich die folgenden Zeilen nach der “V.add(cam, out….)” Zeile und vor der “if use_joystick or…” eingefügt.

V.add(cam, outputs=['cam/image_array'], threaded=True)

# Ingmar Stapel 20190311
imu = bno055()
V.add(imu, outputs=['imu/acl_x', 'imu/acl_y', 'imu/acl_z', 'imu/acg_x', 'imu/acg_y', 
'imu/acg_z', 'imu/gyr_x', 'imu/gyr_y', 'imu/gyr_z', 'imu/temp', 'imu/cali_sys', 
'imu/cali_gyro', 'imu/cali_accel', 'imu/cali_mag'], threaded=True)  

if use_joystick or cfg.USE_JOYSTICK_AS_DEFAULT:

Jetzt ist bekannt welche Werte gespeichert werden sollen. Damit diese auch in der JSON Datei landen und von den weiteren Programmen die die Dateien verarbeiten auch verstanden werden muss die Meta-Beschreibung der JSON Datei angepasst bzw. ergänzt werden. Dazu habe ich die folgende Änderung vorgenommen. Die bestehende Definition von inputs und types habe ich einfach auskommentiert und meine neue Definition ergänzt.

# add tub to save data
#inputs = ['cam/image_array', 'user/angle', 'user/throttle', 'user/mode', 'timestamp']
#types = ['image_array', 'float', 'float',  'str', 'str']

#Ingmar Stapel 20190311 add tub to save data
inputs = ['cam/image_array', 'user/angle', 'user/throttle', 'user/mode', 'timestamp',
          'imu/acl_x', 'imu/acl_y', 'imu/acl_z', 'imu/acg_x', 'imu/acg_y', 'imu/acg_z', 
          'imu/gyr_x', 'imu/gyr_y', 'imu/gyr_z', 'imu/temp', 'imu/cali_sys', 'imu/cali_gyro', 
          'imu/cali_accel', 'imu/cali_mag']
types = ['image_array', 'float', 'float',  'str', 'str', 'float', 'float', 'float', 'float', 
         'float', 'float', 'float', 'float', 'float', 'float', 'int', 'int', 'int', 'int']

Ab jetzt steht das neue Part zur Verfügung und die von dem BNO055 Sensor gemessenen Werte werden in der JSON Datei für jedes Bild gespeichert.

Zusammenfassung

Mit dieser Ergänzung ist es jetzt möglich die IMU Werte bzw. die Beschleunigungswerte zu erfassen und zu speichern. In einem ersten Test sahen die Werte ganz gut aus. Unsicher bin ich mir noch ob der BNO055 Sensor kalibriert werden muss oder ob die automatische Kalibrierung die grundsätzlich aktiv ist ausreichend ist. Dann muss noch weiter abgeklärt werden ob das Neuronale Netz jetzt das Donkey Car besser anhand der IMU Werte steuern kann wenn auf die Lenk- und Beschleunigungswerte des PS4 Kontrollers verzichtet wird.


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 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
(Visited 1.064 times, 1 visits today)