Buchempfehlung:
Roboter-Autos mit dem Raspberry Pi

Roboter Autos mit dem Raspberry Pi

Bei einen meiner Roboter genauer gesagt bei dem GoPiGo Modell von Exter Industries hatte ich mir einen 9-DOF IMU Sensor den BNO055 von Bosch dazu gekauft. Das tolle an diesem Sensor ist das er die Orientierung als XYZ als absolute Werte ausgibt. Das vereinfacht doch einiges bei der Entwicklung der eigenen Software im Roboter. Der von mir verwendete Sensor ist unter dem folgenden Link (IMU Sensor) bei Dexter Industries zu finden.

Dexter Industries BNO055 Sensor

Dexter Industries BNO055 Sensor

Hinweis Software: Ich hatte so meine Probleme die Dexter Industries Software zum Laufen zu bekommen wenn ich eigentlich nur den Sensor verwenden wollte ohne den Roboter. So habe ich dann die Software von Adafruit zu Ihrem BNO055 Sensor installiert.

Hinweis I2C Bus: Auch erwartet der BNO055 Sensor eine spezielle I2C Konfiguration. So muss die Baudrate des I2C Bus gedrosselt werden. Das kann wiederum zu Problemen mit weiteren I2C Geräten führen. Eine Lösung wäre den BNO055 Sensor über die serielle Schnittstelle anzuschließen.

BNO055 über die I2C Schnittstelle

Im ersten Abschnitt wird die I2C Schnittstelle verwendet um mit dem BNO055 Sensor zu kommunizieren. Dazu wird die Software von Adafruit installiert und die Testprogramme ausgeführt.

Software Installation circuitpython

Wie im ersten Hinweis geschrieben habe ich die Software von Adafruit installiert. Hier bin ich auch der Anleitung Schritt für Schritt gefolgt und konnte so nach dem ich die I2C Bus Geschwindigkeit gedrosselt hatte den Sensor in Betrieb nehmen.

Befehl: sudo apt-get update

Befehl: sudo apt-get install i2c-tools

Befehl: sudo apt-get install python-smbus

Nach dem auch der I2C Bus aktiviert wurde sollte der Sensor mit dem folgenden Befehl am I2C Bus gefunden und angezeigt werden.

Befehl: i2cdetect -y 1

Die Anleitung für die Software Installation findet sich hier: Python Installation of BNO055 Library

Der Befehl um die notwendigen Pakete zu installieren lautet wie folgt.

Befehl: sudo pip3 install adafruit-circuitpython-bno055

Adafruit circuitpython bno055 installation

Adafruit circuitpython bno055 installation

Nach der Installation muss noch die Geschwindigkeit am Bus angepasst werden. Die Anleitung hat Adafruit dazu hier veröffentlicht: I2C Clock Stretching

Wichtig ist, das der I2C Bus am Raspberry Pi aktiviert ist über das Konfigurationsmenü. Dann muss in der /boot/config.txt eine kleine Änderung vorgenommen werden. Dazu die /boot/config.txt Datei mit dem folgenden Befehl öffnen und anpassen.

Befehl: sudo nano /boot/config.txt

In der config.txt Datei dann bitte nach den drei Einträgen suchen die abhängig von der eigenen Bus-Konfiguration leicht abweichend aussehen können.

  • dtparam=i2c_arm=on
  • dtparam=i2s=off
  • dtparam=spi=off

Anschließend nach diesen drei Zeilen die folgende Zeile einfügen um die Bus-Geschwindigkeit zu drosseln.

# Clock stretching by slowing down to 10KHz
dtparam=i2c_arm_baudrate=10000

I2C clock stretching

I2C clock stretching

Sehr zufrieden bin ich mit dieser Lösung nicht und werde in einem nächsten Schritt wohl die serielle Schnittstelle des BNO055 Sensors aktivieren. Dazu muss soweit ich das verstanden habe der Pin1 auf HIGH gezogen werden.

Testprogramm ausführen

Jetzt sollte die Software Installation und die Konfiguration soweit abgeschlossen sein, dass das Testprogramm laufen sollte. Dazu bitte den Programmcode von der Adafruit Webseite kopieren und als Python Programm mit dem Namen “bno055.py” speichern und mit dem folgenden Befehl ausführen.

Befehl: python3 bno055.py

BNO055 Sensor

BNO055 Sensor

Das Programm zeigt die aktuellen Werte an und der Sensor funktioniert somit am I2C Bus. Die Einstellung an der Bus-Geschwindigkeit wurden auch übernommen. Denn ohne dieser Konfiguration wird der Sensor nicht gefunden.

BNO055 über UART serielle Schnittstelle

Im nun folgenden Abschnitt wird die serielle Schnittstelle statt des I2C Bus verwendet. Dazu muss eine andere Bibliothek von Adafruit installiert werden die nicht circuitpython verwendet sondern nativ Python.

Hinweis: Zum Zeitpunkt als ich diesen Bericht geschrieben habe deutete sich schon an, dass die Kommunikation über die serielle Schnittstelle die von mir bevorzugte Art der Kommunikation wird.

Serielle Schnittselle Konfigurieren

Wenn der BNO055 am Raspberry Pi an der seriellen Schnittselle angeschlossen wird an statt am I2C Bus muss diese noch entsprechend konfiguriert werden. Adafruit hat das genaue Vorgehen hier beschrieben Hardware.

Als erste muss unter der Raspberry Pi Konfiguration die Serielle Schnittstelle für ein Login über diese deaktiviert werden. Dennoch wenn die Fragen kommen sollte muss die Serielle Schnittstelle aktiv bleiben. Lediglich die Verwendung für eine Anmeldung über diese muss deaktiviert werden.

Befehl: sudo raspi-config

Dann noch den folgenden Befehl ausführen.

Befehl: sudo systemctl disable serial-getty@ttyAMA0.service

Jetzt den Raspberry Pi neustarten.

Befehl: reboot

PySerial installieren

Der BNO055 bzw. die Bibliothek von Adafruit braucht PySerial für die Kommunikation. Da ich aktuell Probleme hatte PySerial zu installieren, es kam immer ein SSL Zertitikat Fehler, habe ich PySerial herunter geladen und selber von Hand installiert. Die nachfolgende Beschreibung erklärt die einzelnen Schritte.

Donwload: https://pypi.org/project/pyserial/#files

  1. Extract the Archive
    tar -zxvf pyserial-X.X
  2. Go the pyserial directory
    cd pyserial-X.X
  3. Build the package
    python3 setup.py build
  4. Install the package
    sudo3 python setup.py install

Software Installation Python Bibliotheken

Damit die UART Schnittstelle des Chips auch unter Python verwendet werden kann muss die Adafruit Software wie folgt installiert werden. Dazu erst einmal vom GitHub das Repository wie folgt herunter laden.

Befehl: git clone https://github.com/adafruit/Adafruit_Python_BNO055

Nach dem das Git Repository herunter geladen ist kann es wie folgt unter Raspbian installiert werden.

Befehl: sudo python setup.py install

Dann müssen noch die folgenden Bibliotheken installiert werden.

Befehl: sudo apt-get install python-rpi.gpio python3-rpi.gpio

Aktivieren der UART Schnittstelle am BNO055

Damit die UART Schnittstelle statt der I2C Schnittstelle aktiv ist muss der PS1 Pin bzw. Pad auf HIGH gezogen werden. Dazu muss ediglich die kleine Brücker über dem PS1 Pin zwischen den beiden Löt-Pads durchgetrennt werden. Anschließend ist die UART Schnittstelle aktiv. Möchte man wieder die I²C Schnittstelle aktivieren muss die Brücke wieder mit z. B. Lötzinn geschlossen werden.

BNO055 Sensor kalibrieren

Der BNO055 Sensor kann mit dem Python Programm das eine einfache Web-Oberfläche bereitstellt kalibriert werden. Dazu muss das Programm im Ordner /examples/ im Verzeichnis /webgl_demo/server.py gestartet werden. Durch bewegen des Sensors wird dieser dann kalibriert. Haben alle Drei Achsen einen Wert von 3 erreicht ist der Sensor kalibriert.

Allerdings erfolgt die Kalibrierung fortlaufend und ich habe den Sinn dieses Schrittes noch nicht ganz verstanden. Denn die Kalibrierung kann auch wieder schlechter werden mit der Zeit.

Alternative BNO055 Sensor Boards

Es gibt verschiedene alternative BNO055 Sensoren zu dem von Dexter-Industries. Hier eine kleine Auswahl von Sensoren die ich auf Amazon gefunden habe.

Loading ...
Loading ...
(Visited 254 times, 1 visits today)