bno055 — Ovladač IMU BNO055¶
Tento modul poskytuje ovladač pro 9osý senzor absolutní orientace Bosch BNO055 přes I2C. BNO055 fúzuje data z akcelerometru, magnetometru a gyroskopu přímo na čipu a kromě surových senzorových kanálů poskytuje výstupy v podobě kvaternionu, Eulerových úhlů, lineárního zrychlení a gravitace.
Příklad použití:
import time
from machine import I2C
import bno055
bus = I2C(1)
imu = bno055.BNO055(bus)
while True:
print(imu.euler())
time.sleep_ms(100)
Třídy¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Vytvoří instanci ovladače BNO055.
busje nakonfigurovaný objekt sběrnicemachine.I2Cpoužitý ke komunikaci se senzorem.addressje 7bitová I2C adresa zařízení. Výchozí hodnota je0x28.modeje provozní režim, do kterého je zařízení uvedeno po resetu. Viz konstanty provozního režimu níže. Výchozí hodnota jeNDOF_MODE.axisje 2bajtová hodnota konfigurace přemapování os. Viz konstanty umístění os níže. Výchozí hodnota jeAXIS_P4.
Konstruktor ověří ID čipu, provede softwarový reset, přepne na normální napájení, aplikuje konfiguraci os a vstoupí do požadovaného provozního režimu s použitím externího oscilátoru. Vyvolá
RuntimeError, pokud nejsou přečteny očekávané hodnoty ID registrů.- read_registers(register: int, size: int = 1) bytes¶
Přečte
sizebajtů z daného registru zařízení a vrátí je jako objektbytes.
- write_registers(register: int, data: bytes) None¶
Zapíše dané bajty
datado zařízení počínaje registremregister.
- operation_mode(mode: int = None) int¶
Získá nebo nastaví registr provozního režimu. Bez argumentu vrátí aktuální režim jako
int. S argumentemmodezapíše nový režim do zařízení. Viz konstanty provozního režimu níže.
- system_trigger(data: int) None¶
Zapíše
datado registru systémového triggeru (0x3F). To se interně používá k vyvolání softwarového resetu (0x20) a k výběru externího oscilátoru (0x80).
- power_mode(mode: int = None) bytes¶
Získá nebo nastaví registr režimu napájení. Bez argumentu vrátí aktuální obsah registru režimu napájení. S argumentem
modezapíše nový režim napájení do zařízení.
- page(num: int = None) None¶
Získá nebo nastaví stránku registru. Bez argumentu přečte aktuální registr stránky. S argumentem
numvybere stránku.
- read_id() bytes¶
Vrátí 4bajtový blok ID přečtený z registru
0x00. Očekávaná hodnota jeb'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Získá nebo nastaví konfiguraci přemapování os. Bez argumentu vrátí aktuální 2bajtovou konfiguraci os. S argumentem
placementzapíše dodanou 2bajtovou konfiguraci os. Použijte jednu z konstantAXIS_P0..AXIS_P7níže.
- quaternion() list¶
Vrátí fúzovanou orientaci jako 4prvkový seznam
[w, x, y, z]čísel s plovoucí desetinnou čárkou škálovaných do rozsahu jednotkového kvaternionu.
- euler() list¶
Vrátí fúzovanou orientaci jako 3prvkový seznam
[yaw, roll, pitch]čísel s plovoucí desetinnou čárkou ve stupních.
- accelerometer() list¶
Vrátí naměřenou hodnotu akcelerometru jako 3prvkový seznam
[x, y, z]čísel s plovoucí desetinnou čárkou v m/s^2.
- magnetometer() list¶
Vrátí naměřenou hodnotu magnetometru jako 3prvkový seznam
[x, y, z]čísel s plovoucí desetinnou čárkou v mikroteslách.
- gyroscope() list¶
Vrátí naměřenou hodnotu gyroskopu jako 3prvkový seznam
[x, y, z]čísel s plovoucí desetinnou čárkou ve stupních za sekundu.
Konstanty¶
Provozní režimy¶
Umístění os¶
Následující 2bajtové hodnoty se předávají metodě BNO055.axis() k přemapování souřadnicového systému zařízení. Každá konstanta je dvojicí registrů (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) z datasheetu BNO055 (sekce 3.4, Axis remap), předem zakódovanou pro jednu z osmi standardních orientací umístění.
Vyberte konstantu, jejíž výstupní osy odpovídají tomu, jak je čip fyzicky namontován na hostitelské desce plošných spojů:
Konstanta |
Výstup X |
Výstup Y |
Výstup Z |
Bajty |
Montáž |
|---|---|---|---|---|---|
|
|
|
|
lícem nahoru, 90° proti směru hodinových ručiček od P1 |
|
|
|
|
|
lícem nahoru, výchozí dle datasheetu |
|
|
|
|
|
lícem nahoru, otočeno o 180° |
|
|
|
|
|
lícem nahoru, 90° po směru hodinových ručiček od P1 |
|
|
|
|
|
lícem dolů, překlopeno kolem osy X (výchozí pro konstruktor) |
|
|
|
|
|
lícem dolů, otočeno o 90° proti směru hodinových ručiček od P4 |
|
|
|
|
|
lícem dolů, otočeno o 180° od P4 |
|
|
|
|
|
lícem dolů, otočeno o 90° po směru hodinových ručiček od P4 |
Xc / Yc / Zc označují vnitřní osy čipu (jak jsou vytištěny v datasheetu BNO055). Sloupce „Výstup“ jsou osy, které zařízení poskytuje přes BNO055.euler(), BNO055.gyro() atd. P0 až P3 jsou čtyři 90° rotace čipu v orientaci stranou součástek nahoru; P4 až P7 jsou stejné čtyři rotace po překlopení čipu na záda.
- bno055.AXIS_P0: bytes¶
Čip lícem nahoru, otočený o 90° proti směru hodinových ručiček od
AXIS_P1. Výstupní osy:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Čip lícem nahoru ve výchozí orientaci dle datasheetu BNO055. Není aplikováno žádné přemapování:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Čip lícem nahoru, otočený o 180° od
AXIS_P1. Výstupní osy:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Čip lícem nahoru, otočený o 90° po směru hodinových ručiček od
AXIS_P1. Výstupní osy:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Čip překlopený na záda (stranou součástek dolů) vůči
AXIS_P1. Výstupní osy:X = +Xc,Y = -Yc,Z = -Zc. Toto je umístění používané konstruktoremBNO055, když není dodán argumentaxis.
- bno055.AXIS_P5: bytes¶
Čip lícem dolů, otočený o 90° proti směru hodinových ručiček od
AXIS_P4. Výstupní osy:X = +Yc,Y = +Xc,Z = -Zc.