bno055 — BNO055 IMU upravljački program

Ovaj modul pruža upravljački program za Bosch BNO055 senzor apsolutne orijentacije s 9 osi preko I2C-a. BNO055 spaja podatke akcelerometra, magnetometra i žiroskopa na čipu te izlaže kvaternionske, Eulerove kutne, linearno-akceleracijske i gravitacijske izlaze uz sirove kanale senzora.

Primjer korištenja:

import time
from machine import I2C
import bno055

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

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

Klase

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

Konstruira instancu BNO055 upravljačkog programa.

  • bus je konfigurirani objekt machine.I2C sabirnice koji se koristi za komunikaciju sa senzorom.

  • address je 7-bitna I2C adresa uređaja. Zadana vrijednost je 0x28.

  • mode je način rada u koji se uređaj postavlja nakon resetiranja. Pogledajte konstante načina rada u nastavku. Zadana vrijednost je NDOF_MODE.

  • axis je 2-bajtna vrijednost konfiguracije preraspodjele osi. Pogledajte konstante položaja osi u nastavku. Zadana vrijednost je AXIS_P4.

Konstruktor provjerava ID čipa, izvodi softverski reset, prebacuje na normalno napajanje, primjenjuje konfiguraciju osi i ulazi u traženi način rada koristeći vanjski oscilator. Izaziva RuntimeError ako se očekivane vrijednosti ID registra ne pročitaju natrag.

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

Čita size bajtova iz zadanog registra uređaja i vraća ih kao bytes objekt.

write_registers(register: int, data: bytes) None

Zapisuje zadane data bajtove u uređaj počevši od register.

operation_mode(mode: int = None) int

Dohvaća ili postavlja registar načina rada. Bez argumenta vraća trenutni način rada kao int. S argumentom mode zapisuje novi način rada u uređaj. Pogledajte konstante načina rada u nastavku.

system_trigger(data: int) None

Zapisuje data u registar sistemskog okidača (0x3F). To se interno koristi za izdavanje softverskog reseta (0x20) i za odabir vanjskog oscilatora (0x80).

power_mode(mode: int = None) bytes

Dohvaća ili postavlja registar načina napajanja. Bez argumenta vraća trenutni sadržaj registra načina napajanja. S argumentom mode zapisuje novi način napajanja u uređaj.

page(num: int = None) None

Dohvaća ili postavlja stranicu registra. Bez argumenta čita trenutni registar stranice. S argumentom num odabire stranicu.

temperature() int

Vraća vrijednost registra temperature čipa kao nepredznačeni bajt.

read_id() bytes

Vraća 4-bajtni ID blok pročitan iz registra 0x00. Očekivana vrijednost je b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Dohvaća ili postavlja konfiguraciju preraspodjele osi. Bez argumenta vraća trenutnu 2-bajtnu konfiguraciju osi. S argumentom placement zapisuje danu 2-bajtnu konfiguraciju osi. Koristite jednu od konstanti AXIS_P0..AXIS_P7 u nastavku.

quaternion() list

Vraća spojenu orijentaciju kao listu od 4 elementa [w, x, y, z] brojeva s pomičnim zarezom skaliranih na raspon jediničnog kvaterniona.

euler() list

Vraća spojenu orijentaciju kao listu od 3 elementa [yaw, roll, pitch] brojeva s pomičnim zarezom u stupnjevima.

accelerometer() list

Vraća očitanje akcelerometra kao listu od 3 elementa [x, y, z] brojeva s pomičnim zarezom u m/s^2.

magnetometer() list

Vraća očitanje magnetometra kao listu od 3 elementa [x, y, z] brojeva s pomičnim zarezom u mikro-Teslama.

gyroscope() list

Vraća očitanje žiroskopa kao listu od 3 elementa [x, y, z] brojeva s pomičnim zarezom u stupnjevima u sekundi.

linear_acceleration() list

Vraća gravitacijski kompenziranu linearnu akceleraciju kao listu od 3 elementa [x, y, z] brojeva s pomičnim zarezom u m/s^2.

gravity() list

Vraća vektor gravitacije kao listu od 3 elementa [x, y, z] brojeva s pomičnim zarezom u m/s^2.

Konstante

Načini rada

bno055.CONFIG_MODE: int

Konfiguracijski način rada (0x00). Uređaj mora biti u ovom načinu rada da bi se promijenili konfiguracijski registri.

bno055.ACCONLY_MODE: int

Nefuzijski način rada samo s akcelerometrom (0x01).

bno055.MAGONLY_MODE: int

Nefuzijski način rada samo s magnetometrom (0x02).

bno055.GYRONLY_MODE: int

Nefuzijski način rada samo sa žiroskopom (0x03).

bno055.ACCMAG_MODE: int

Nefuzijski način rada akcelerometar + magnetometar (0x04).

bno055.ACCGYRO_MODE: int

Nefuzijski način rada akcelerometar + žiroskop (0x05).

bno055.MAGGYRO_MODE: int

Nefuzijski način rada magnetometar + žiroskop (0x06).

bno055.AMG_MODE: int

Nefuzijski način rada akcelerometar + magnetometar + žiroskop (0x07).

bno055.IMUPLUS_MODE: int

IMU fuzijski način rada koji koristi akcelerometar + žiroskop (0x08).

bno055.COMPASS_MODE: int

Kompasni fuzijski način rada koji koristi akcelerometar + magnetometar (0x09).

bno055.M4G_MODE: int

Fuzijski način rada magneta za žiroskop (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

9-DOF fuzijski način rada s onemogućenom brzom kalibracijom magnetometra (0x0B).

bno055.NDOF_MODE: int

9-DOF fuzijski način rada s omogućenom brzom kalibracijom magnetometra (0x0C). Ovo je zadani način rada koji koristi konstruktor.

Položaji osi

Sljedeće 2-bajtne vrijednosti prosljeđuju se metodi BNO055.axis() za preraspodjelu koordinatnog sustava uređaja. Svaka konstanta je par registara (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) iz BNO055 podatkovne tablice (Odjeljak 3.4, Axis remap), unaprijed kodiran za jednu od osam standardnih orijentacija položaja.

Odaberite konstantu čije izlazne osi odgovaraju načinu na koji je čip fizički montiran na matičnu PCB:

Konstanta

Izlaz X

Izlaz Y

Izlaz Z

Bajtovi

Montaža

AXIS_P0

-Yc

+Xc

+Zc

21 04

licem prema gore, 90° u smjeru obrnutom od kazaljke na satu od P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

licem prema gore, zadana vrijednost podatkovne tablice

AXIS_P2

-Xc

-Yc

+Zc

24 06

licem prema gore, zakrenuto za 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

licem prema gore, 90° u smjeru kazaljke na satu od P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

licem prema dolje, preokrenuto oko osi X (zadana vrijednost konstruktora)

AXIS_P5

+Yc

+Xc

-Zc

21 01

licem prema dolje, zakrenuto za 90° u smjeru obrnutom od kazaljke na satu od P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

licem prema dolje, zakrenuto za 180° od P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

licem prema dolje, zakrenuto za 90° u smjeru kazaljke na satu od P4

Xc / Yc / Zc označavaju intrinzične osi čipa (kako su otisnute u BNO055 podatkovnoj tablici). Stupci „Output” su osi koje uređaj isporučuje putem BNO055.euler(), BNO055.gyro() itd. P0 do P3 su četiri 90° rotacije čipa u orijentaciji s komponentnom stranom prema gore; P4 do P7 su iste četiri rotacije nakon preokretanja čipa na leđa.

bno055.AXIS_P0: bytes

Čip licem prema gore, zakrenut za 90° u smjeru obrnutom od kazaljke na satu od AXIS_P1. Izlazne osi: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Čip licem prema gore u zadanoj orijentaciji BNO055 podatkovne tablice. Ne primjenjuje se preraspodjela: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Čip licem prema gore, zakrenut za 180° od AXIS_P1. Izlazne osi: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Čip licem prema gore, zakrenut za 90° u smjeru kazaljke na satu od AXIS_P1. Izlazne osi: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Čip preokrenut na leđa (komponentna strana prema dolje) u odnosu na AXIS_P1. Izlazne osi: X = +Xc, Y = -Yc, Z = -Zc. Ovo je položaj koji koristi konstruktor BNO055 kada nije naveden argument axis.

bno055.AXIS_P5: bytes

Čip licem prema dolje, zakrenut za 90° u smjeru obrnutom od kazaljke na satu od AXIS_P4. Izlazne osi: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Čip licem prema dolje, zakrenut za 180° od AXIS_P4. Izlazne osi: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Čip licem prema dolje, zakrenut za 90° u smjeru kazaljke na satu od AXIS_P4. Izlazne osi: X = -Xc, Y = +Yc, Z = -Zc.