bno055 — Driver IMU BNO055

Acest modul oferă un driver pentru senzorul de orientare absolută pe 9 axe Bosch BNO055 prin I2C. BNO055 combină pe cip datele de la accelerometru, magnetometru și giroscop și expune ieșiri de cuaternion, unghiuri Euler, accelerație liniară și gravitație, pe lângă canalele de senzor brute.

Exemplu de utilizare:

import time
from machine import I2C
import bno055

bus = I2C(1)
imu = bno055.BNO055(bus)

while True:
    print(imu.euler())
    time.sleep_ms(100)

Clase

class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)

Construiește o instanță de driver BNO055.

  • bus este un obiect de magistrală machine.I2C configurat, folosit pentru a comunica cu senzorul.

  • address este adresa I2C pe 7 biți a dispozitivului. Valoarea implicită este 0x28.

  • mode este modul de operare în care este pus dispozitivul după resetare. Vezi constantele modurilor de operare de mai jos. Valoarea implicită este NDOF_MODE.

  • axis este o valoare de configurare a remapării axelor pe 2 octeți. Vezi constantele de plasare a axelor de mai jos. Valoarea implicită este AXIS_P4.

Constructorul verifică ID-ul cipului, efectuează o resetare software, comută la alimentarea normală, aplică configurația axelor și intră în modul de operare solicitat folosind oscilatorul extern. Generează RuntimeError dacă valorile așteptate ale registrului de ID nu sunt citite înapoi.

read_registers(register: int, size: int = 1) bytes

Citește size octeți din registrul dat al dispozitivului și îi returnează ca obiect bytes.

write_registers(register: int, data: bytes) None

Scrie octeții data dați în dispozitiv, începând de la register.

operation_mode(mode: int = None) int

Obține sau setează registrul modului de operare. Fără argument, returnează modul curent ca int. Cu un argument mode, scrie noul mod în dispozitiv. Vezi constantele modurilor de operare de mai jos.

system_trigger(data: int) None

Scrie data în registrul de declanșare a sistemului (0x3F). Acesta este folosit intern pentru a emite o resetare software (0x20) și pentru a selecta oscilatorul extern (0x80).

power_mode(mode: int = None) bytes

Obține sau setează registrul modului de alimentare. Fără argument, returnează conținutul curent al registrului modului de alimentare. Cu un argument mode, scrie noul mod de alimentare în dispozitiv.

page(num: int = None) None

Obține sau setează pagina de registre. Fără argument, citește registrul paginii curente. Cu un argument num, selectează pagina.

temperature() int

Returnează valoarea registrului de temperatură al cipului ca octet fără semn.

read_id() bytes

Returnează blocul de ID pe 4 octeți citit din registrul 0x00. Valoarea așteptată este b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Obține sau setează configurația de remapare a axelor. Fără argument, returnează configurația curentă a axelor pe 2 octeți. Cu un argument placement, scrie configurația axelor pe 2 octeți furnizată. Folosește una dintre constantele AXIS_P0..AXIS_P7 de mai jos.

quaternion() list

Returnează orientarea combinată ca listă cu 4 elemente [w, x, y, z] de numere în virgulă mobilă scalate la intervalul cuaternionului unitar.

euler() list

Returnează orientarea combinată ca listă cu 3 elemente [yaw, roll, pitch] de numere în virgulă mobilă în grade.

accelerometer() list

Returnează citirea accelerometrului ca listă cu 3 elemente [x, y, z] de numere în virgulă mobilă în m/s^2.

magnetometer() list

Returnează citirea magnetometrului ca listă cu 3 elemente [x, y, z] de numere în virgulă mobilă în micro-Tesla.

gyroscope() list

Returnează citirea giroscopului ca listă cu 3 elemente [x, y, z] de numere în virgulă mobilă în grade pe secundă.

linear_acceleration() list

Returnează accelerația liniară compensată pentru gravitație ca listă cu 3 elemente [x, y, z] de numere în virgulă mobilă în m/s^2.

gravity() list

Returnează vectorul gravitațional ca listă cu 3 elemente [x, y, z] de numere în virgulă mobilă în m/s^2.

Constante

Moduri de operare

bno055.CONFIG_MODE: int

Mod de configurare (0x00). Dispozitivul trebuie să fie în acest mod pentru a modifica registrele de configurare.

bno055.ACCONLY_MODE: int

Mod fără fuziune doar cu accelerometru (0x01).

bno055.MAGONLY_MODE: int

Mod fără fuziune doar cu magnetometru (0x02).

bno055.GYRONLY_MODE: int

Mod fără fuziune doar cu giroscop (0x03).

bno055.ACCMAG_MODE: int

Mod fără fuziune accelerometru + magnetometru (0x04).

bno055.ACCGYRO_MODE: int

Mod fără fuziune accelerometru + giroscop (0x05).

bno055.MAGGYRO_MODE: int

Mod fără fuziune magnetometru + giroscop (0x06).

bno055.AMG_MODE: int

Mod fără fuziune accelerometru + magnetometru + giroscop (0x07).

bno055.IMUPLUS_MODE: int

Mod de fuziune IMU folosind accelerometru + giroscop (0x08).

bno055.COMPASS_MODE: int

Mod de fuziune busolă folosind accelerometru + magnetometru (0x09).

bno055.M4G_MODE: int

Mod de fuziune magnet-pentru-giroscop (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

Mod de fuziune 9-DOF cu calibrarea rapidă a magnetometrului dezactivată (0x0B).

bno055.NDOF_MODE: int

Mod de fuziune 9-DOF cu calibrarea rapidă a magnetometrului activată (0x0C). Acesta este modul implicit folosit de constructor.

Plasări ale axelor

Următoarele valori pe 2 octeți sunt transmise către BNO055.axis() pentru a remapa sistemul de coordonate al dispozitivului. Fiecare constantă este perechea de registre (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) din fișa tehnică BNO055 (Secțiunea 3.4, Axis remap), pre-codificată pentru una dintre cele opt orientări de plasare standard.

Alege constanta ale cărei axe de ieșire corespund modului în care cipul este montat fizic pe PCB-ul gazdă:

Constantă

Ieșire X

Ieșire Y

Ieșire Z

Octeți

Montare

AXIS_P0

-Yc

+Xc

+Zc

21 04

cu fața în sus, 90° CCW față de P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

cu fața în sus, valoarea implicită din fișa tehnică

AXIS_P2

-Xc

-Yc

+Zc

24 06

cu fața în sus, rotit 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

cu fața în sus, 90° CW față de P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

cu fața în jos, întors în jurul axei X (valoarea implicită a constructorului)

AXIS_P5

+Yc

+Xc

-Zc

21 01

cu fața în jos, rotit 90° CCW față de P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

cu fața în jos, rotit 180° față de P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

cu fața în jos, rotit 90° CW față de P4

Xc / Yc / Zc denotă axele intrinseci ale cipului (așa cum sunt tipărite în fișa tehnică BNO055). Coloanele „Ieșire” reprezintă axele pe care dispozitivul le livrează prin BNO055.euler(), BNO055.gyro() etc. P0 până la P3 sunt cele patru rotații de 90° ale cipului în orientarea cu partea componentelor în sus; P4 până la P7 sunt aceleași patru rotații după întoarcerea cipului pe spate.

bno055.AXIS_P0: bytes

Cip cu fața în sus, rotit 90° CCW față de AXIS_P1. Axe de ieșire: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Cip cu fața în sus în orientarea implicită din fișa tehnică BNO055. Nu se aplică nicio remapare: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Cip cu fața în sus, rotit 180° față de AXIS_P1. Axe de ieșire: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Cip cu fața în sus, rotit 90° CW față de AXIS_P1. Axe de ieșire: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Cip întors pe spate (partea componentelor în jos) față de AXIS_P1. Axe de ieșire: X = +Xc, Y = -Yc, Z = -Zc. Aceasta este plasarea folosită de constructorul BNO055 atunci când nu este furnizat niciun argument axis.

bno055.AXIS_P5: bytes

Cip cu fața în jos, rotit 90° CCW față de AXIS_P4. Axe de ieșire: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Cip cu fața în jos, rotit 180° față de AXIS_P4. Axe de ieșire: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Cip cu fața în jos, rotit 90° CW față de AXIS_P4. Axe de ieșire: X = -Xc, Y = +Yc, Z = -Zc.