6  Bewegungsmessung

Autor:in

Pia Bereuter

Veröffentlichungsdatum

22. Oktober. 2024

Zusammenfassung
Bewegungssensoren werden heute fast allgegenwärtig in vielen Bereichen eingesetzt, wie in Smartphones oder auch vielen Messgeräten der Geomatik. Diese Übung führt in die Funktionsweise von MEMS Bewegungssensoren ein und zeigt wie Bewegungsmessungen mit einem ICM20948 9DoF Motion Sensor durchgeführt werden können.

Einführung

Ziel dieser Übung ist es Bewegungsmessung mit inertialen Messeinheiten (IMU) über den ICM20948 Bewegungssensor kennen zu lernen und die Sensordaten auszulesen und testen. Der ICM20948 ist ein 9DoF Bewegungssensor, der über eine I2C Schnittstelle mit dem Raspberry Pi verbunden wird und einer Python Library angesteuert werden kann.

Unterlagen: E03_Bewegungsmessung.zip

Vorbereitung

Unterlagen
Produkt ICM20948 Breakout
Datenblatt ICM 20948
GitHub icm20948-python

Beschleunigungssensoren IMU

Beschleunigungssensoren, oder inertiale Messeinheit (inertial measurement unit IMU) messen die Beschleunigung von Objekten mit dem Messprinzip der Trägheit und erfassen die Kraft die auf die Masse des Objekt wirkt, wenn dieses beschleunigt wird.

Für die Erfassung der sechs kinematischen Freiheitsgrade werden drei Achsen der Beschleunigung (Accelerometer) und drei Achsen der Rotation (Gyroskop) gemessen, die die Beschleunigungsmessung und Winkelgeschwindigkeit der Drehraten ausgeben. Für die Erfassung der Orientierung im Raum wird ein Magnetometer eingesetzt, welches die Ausrichtung des Objekts im Magnetfeld der Erde misst, um die Ausrichtung im Raum zu bestimmen. Wenn alle drei Sensoren kombiniert werden, spricht man von 9DoF Motion Sensoren, der neun Freiheitsgrade (9 Degrees of Freedom) misst.

Beschleunigungssensoren werden in vielen Anwendungen eingesetzt, wie z.B. in der Automobilindustrie (Auslösen von Airbags), der Luft- und Raumfahrt, der Medizintechnik (Beschleunigungssensoren in Herzschrittmachern) und der Unterhaltungselektronik (Smartphones für die Ausrichtung des Bildschirms).

ICM20948 9DoF Motion Sensor

Der ICM-20948 von TDK InvenSense (Abb. 6.1) ist ein 9-Achsen MEMS Bewegungssensor, mit einem 3-Achsen Gyroskop, einem 3-Achsen Beschleunigungssensor und einem 3-Achsen Magnetometer und sehr geringem Stromverbrauch. Er enthält zwei Chip, einen für die Bewegungsmessung mit Gyroskop und Beschleunigungssensor und einen zweiten für das Magnetometer.

MEMS sind mikroelektromechanische Systeme, die aus mikroskopisch kleinen mechanischen und elektrischen Komponenten bestehen. Diese werden meist aus Silicium hergestellt und sind im Falle von Beschleunigungssensoren sehr kleine Massen, die sich bei Beschleunigung bewegen und die Änderung der elektrischen Kapazität messen.

9DoF Motion Accelero-, Gyro-, Magnetometer

  • ±2/±4/±8/±16 g 3-axis accelerometer
  • ±250/±500/±1000/±2000 DPS (degrees per second) 3-axis gyroscope
  • 3-axis compass with wide range up to ±4900 μT
  • Python, C Library
  • I2C interface (address: 0x68 or0x69)
  • Qw/ST (Qwiic/STEMMA QT) connector
  • I2C interface (address 0x68/0x69 (cut trace))
Abb. 6.1: a) schematische Darstellung eines MEMS Beschleunigungssensors Quelle: Bosch, b) raw, pitch, roll bei Flugzeugen, c) ICM-20948 Breakout von Pimoroni, d) Orientierung von IMU Sensoren.

Übungsaufbau

  • Schliesse den Raspberry Pi an Monitor, Keyboard und Maus an oder verbinde Dich mit diesem über SSH (und SFTP).
  • Erstelle auf dem Raspberry Pi im Documents Ordner einen neuen Ordner ICM20948, in welchem Du Änderungen und neue Dateien für diese Übung speichern kannst.
  • Schliesse den Sensor ICM20948 an den Raspberry Pi über die Breakout Garden I2C Schnittstelle korrekt an (siehe E01 Luftqualität), so dass die Beschriftung der Anschlüsse am Sensor und bei der Schnittstelle übereinstimmen.
  • Kontrolliere mit dem Befehl i2cdetect -y 1 ob der Raspberry Pi mit dem Sensor verbunden ist. Der Sensor sollte auf der Adresse 0x68 erkannt werden.
  • Aktiviere die virtuelle Environment von Python mit source ~/.env/bin/activate und kontrolliere, ob die Library icm20948 installiert ist mit python -c "import icm20948". Bei einer Fehlermeldung muss die Library in der aktivierten virtuellen Environment mit pip install icm20948 installiert werden.

Wechsle in den Ordner Documents und kopiere mit folgenden Befehlen die Library auf Deinen Raspberry Pi.

cd Documents
git clone https://github.com/pimoroni/icm20948-python
cd icm20948-python/examples

Aufgabe 1: Bewegungsmessungen durchführen

Teste das Beispiel read-all.py im Ordner examples. Dieses Beispiel gibt die Messungen der einzelnen Bewegungsmessungen aus, der Beschleunigung, Winkelgeschwindigkeit und Orientierung mit dem Accelerometer, Gyrometer und Magnetometer.

Startet das Script mit python read-all.py1. Mit Ctrl+c kann das Script wieder gestopppt werden. Die Ausgabe sollte in etwa so aussehen (gekürzt):

python read-all.py
read-all.py
Reads all ranges of movement: accelerometer, gyroscope and compass heading.
Press Ctrl+C to exit!

Accel: 01.01 -0.02 00.01
Gyro:  -0.42 01.73 00.01
Mag:   -86.85 57.45 34.05

Accel: 01.01 -0.02 00.02
Gyro:  -0.40 01.50 -0.16
Mag:   -85.35 55.50 34.80

Folgendes Code Snippet zeigt eine gekürzte Version des read-all.py Python Beispiels für die Ausgabe der Beschleunigungsmessung.

#!/usr/bin/env python
import time
from icm20948 import ICM20948

imu = ICM20948()

while True:
1    x, y, z = imu.read_magnetometer_data()
2    ax, ay, az, gx, gy, gz = imu.read_accelerometer_gyro_data()

3    print("""
Accel: {:05.2f} {:05.2f} {:05.2f}
Gyro:  {:05.2f} {:05.2f} {:05.2f}
Mag:   {:05.2f} {:05.2f} {:05.2f}""".format(
        ax, ay, az, gx, gy, gz, x, y, z
        ))

4    time.sleep(0.25)
1
Auslesen des Magnetometers (x,y,z)
2
Auslesen des Accelerometers (ax,ay,az) und Gyrometers (gx,gy,gz)
3
Messwerte auf der Konsole ausgeben
4
Warten 0.25 Sekunden (damit die Ausgabe nicht zu schnell ist)

Übung 6.1 Bewegungsmessung

  • Führe das Beispiel read-all.py aus und beobachte die Messwerte.
  • Versuche den Sensor jeweils leicht in eine Richtung zu bewegen, zu drehen, zu kippen und beobachte die Messwerte.
  • Versuche den Sensor zu leicht zu schütteln und beobachte die Messwerte.
  • Vergleiche die Messwerte mit den Messwerten deines Smartphones mit der App phyphox.
  • Versucht zu eruieren wie die Achsen orientiert sind und vergleicht mit anderen Gruppen.
  • Schreibe die Messwerte in eine Datei und visualisiere diese mit einem Plot, modifiziere dazu das Beispiel read-all.py und speichere die Datei als read-csv.py, so dass die Messungen zeilenweise mit einem Separator gespeichert werden. Ausgaben aus einem Plot können mit dem Befehl python read-csv.py > imu_horizontal.csv in eine Datei geschrieben werden. Nun könnt ihr verschiedene Versuche mit der IMU durchführen und in einer Datei speichern. Die Datei könnt ihr beispielsweise mit LibreOffice Calc oder Excel öffnen und die Daten visualisieren.

Aufgabe 2: Magnetometer

Das Beispiel bargraph.py zeigt die Messwerte des Magnetometers in einem Balkendiagramm an und zeigt die Orientierung des Sensors an je nach dem über welche Achse gemessen wird. Der Befehl python bargraph.py --help zeigt die Optionen des Skripts an.

Die Ausgabe sollte für die Option --graph in etwa so aussehen:

python bargraph.py --graph
bargraph.py - Convert raw values to heading

Rotate the sensor through 360 degrees to calibrate.

Press Ctrl+C to exit!

043.5 █████████████                                                                                                     

Übung 6.2 Bar graph

  • Kalibriere den Sensor und vergleiche die Orientierung des Sensors mit den Himmelsrichtungen
  • Vergleiche die Ausgaben auch mit der Orientierung des Smartphones und den Messwerten der App phyphox.
  • Studiert den Code und versucht die Funktionsweise zu verstehen.

  1. Nicht vergessen zuerst die korrekte virtuelle Environment mit den installierten Libraries über source ~/.env/bin/activate zu starten↩︎