bno055 — BNO055 IMU Driver

Deze module biedt een driver voor de Bosch BNO055 9-assige absolute oriëntatiesensor via I2C. De BNO055 fuseert accelerometer-, magnetometer- en gyroscoopgegevens op de chip zelf en levert naast de ruwe sensorkanalen ook quaternion-, Euler-hoek-, lineaire-versnellings- en zwaartekrachtuitvoer.

Voorbeeldgebruik:

import time
from machine import I2C
import bno055

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

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

Klassen

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

Construeert een BNO055-driverinstantie.

  • bus is een geconfigureerd machine.I2C busobject dat wordt gebruikt om met de sensor te communiceren.

  • address is het 7-bits I2C-adres van het apparaat. Standaard 0x28.

  • mode is de bedrijfsmodus waarin het apparaat na een reset wordt geplaatst. Zie de bedrijfsmodusconstanten hieronder. Standaard NDOF_MODE.

  • axis is een 2-byte asomwisselconfiguratiewaarde. Zie de asplaatsingsconstanten hieronder. Standaard AXIS_P4.

De constructor verifieert de chip-ID, voert een softwarereset uit, schakelt over naar normaal vermogen, past de asconfiguratie toe en gaat de gevraagde bedrijfsmodus binnen met behulp van de externe oscillator. Veroorzaakt een RuntimeError als de verwachte ID-registerwaarden niet worden teruggelezen.

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

Leest size bytes uit het opgegeven apparaatregister en retourneert ze als een bytes object.

write_registers(register: int, data: bytes) None

Schrijft de opgegeven data bytes naar het apparaat, beginnend bij register.

operation_mode(mode: int = None) int

Leest of stelt het bedrijfsmodusregister in. Zonder argument retourneert het de huidige modus als een int. Met een mode argument schrijft het de nieuwe modus naar het apparaat. Zie de bedrijfsmodusconstanten hieronder.

system_trigger(data: int) None

Schrijft data naar het systeemtriggerregister (0x3F). Dit wordt intern gebruikt om een softwarereset (0x20) uit te voeren en om de externe oscillator (0x80) te selecteren.

power_mode(mode: int = None) bytes

Leest of stelt het vermogensmodusregister in. Zonder argument retourneert het de huidige inhoud van het vermogensmodusregister. Met een mode argument schrijft het de nieuwe vermogensmodus naar het apparaat.

page(num: int = None) None

Leest of stelt de registerpagina in. Zonder argument leest het het huidige pagina-register. Met een num argument selecteert het de pagina.

temperature() int

Retourneert de waarde van het chiptemperatuurregister als een byte zonder teken.

read_id() bytes

Retourneert het 4-byte ID-blok dat uit register 0x00 is gelezen. De verwachte waarde is b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Leest of stelt de asomwisselconfiguratie in. Zonder argument retourneert het de huidige 2-byte asconfiguratie. Met een placement argument schrijft het de opgegeven 2-byte asconfiguratie. Gebruik een van de AXIS_P0..AXIS_P7 constanten hieronder.

quaternion() list

Retourneert de gefuseerde oriëntatie als een lijst met 4 elementen [w, x, y, z] van floats geschaald naar het bereik van het eenheidsquaternion.

euler() list

Retourneert de gefuseerde oriëntatie als een lijst met 3 elementen [yaw, roll, pitch] van floats in graden.

accelerometer() list

Retourneert de accelerometermeting als een lijst met 3 elementen [x, y, z] van floats in m/s^2.

magnetometer() list

Retourneert de magnetometermeting als een lijst met 3 elementen [x, y, z] van floats in micro-Tesla.

gyroscope() list

Retourneert de gyroscoopmeting als een lijst met 3 elementen [x, y, z] van floats in graden per seconde.

linear_acceleration() list

Retourneert de zwaartekrachtgecompenseerde lineaire versnelling als een lijst met 3 elementen [x, y, z] van floats in m/s^2.

gravity() list

Retourneert de zwaartekrachtvector als een lijst met 3 elementen [x, y, z] van floats in m/s^2.

Constanten

Bedrijfsmodi

bno055.CONFIG_MODE: int

Configuratiemodus (0x00). Het apparaat moet zich in deze modus bevinden om configuratieregisters te wijzigen.

bno055.ACCONLY_MODE: int

Niet-fusiemodus met alleen accelerometer (0x01).

bno055.MAGONLY_MODE: int

Niet-fusiemodus met alleen magnetometer (0x02).

bno055.GYRONLY_MODE: int

Niet-fusiemodus met alleen gyroscoop (0x03).

bno055.ACCMAG_MODE: int

Niet-fusiemodus met accelerometer + magnetometer (0x04).

bno055.ACCGYRO_MODE: int

Niet-fusiemodus met accelerometer + gyroscoop (0x05).

bno055.MAGGYRO_MODE: int

Niet-fusiemodus met magnetometer + gyroscoop (0x06).

bno055.AMG_MODE: int

Niet-fusiemodus met accelerometer + magnetometer + gyroscoop (0x07).

bno055.IMUPLUS_MODE: int

IMU-fusiemodus met accelerometer + gyroscoop (0x08).

bno055.COMPASS_MODE: int

Kompasfusiemodus met accelerometer + magnetometer (0x09).

bno055.M4G_MODE: int

Magneet-voor-gyroscoop-fusiemodus (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

9-DOF-fusiemodus met snelle magnetometerkalibratie uitgeschakeld (0x0B).

bno055.NDOF_MODE: int

9-DOF-fusiemodus met snelle magnetometerkalibratie ingeschakeld (0x0C). Dit is de standaardmodus die door de constructor wordt gebruikt.

Asplaatsingen

De volgende 2-byte waarden worden doorgegeven aan BNO055.axis() om het coördinatensysteem van het apparaat om te wisselen. Elke constante is het (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) registerpaar uit het BNO055-datasheet (sectie 3.4, Axis remap), voorgecodeerd voor een van de acht standaard plaatsingsoriëntaties.

Kies de constante waarvan de uitvoerassen overeenkomen met de manier waarop de chip fysiek op de host-PCB is gemonteerd:

Constante

Uitvoer X

Uitvoer Y

Uitvoer Z

Bytes

Montage

AXIS_P0

-Yc

+Xc

+Zc

21 04

naar boven gericht, 90° linksom vanaf P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

naar boven gericht, datasheetstandaard

AXIS_P2

-Xc

-Yc

+Zc

24 06

naar boven gericht, 180° gedraaid

AXIS_P3

+Yc

-Xc

+Zc

21 02

naar boven gericht, 90° rechtsom vanaf P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

naar beneden gericht, omgeklapt om X (constructorstandaard)

AXIS_P5

+Yc

+Xc

-Zc

21 01

naar beneden gericht, 90° linksom gedraaid vanaf P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

naar beneden gericht, 180° gedraaid vanaf P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

naar beneden gericht, 90° rechtsom gedraaid vanaf P4

Xc / Yc / Zc duiden de intrinsieke assen van de chip aan (zoals afgedrukt in het BNO055-datasheet). De “Uitvoer”-kolommen zijn de assen die het apparaat levert via BNO055.euler(), BNO055.gyro(), enz. P0 tot en met P3 zijn de vier 90°-rotaties van de chip met de componentzijde naar boven; P4 tot en met P7 zijn diezelfde vier rotaties nadat de chip op zijn rug is gekanteld.

bno055.AXIS_P0: bytes

Chip naar boven gericht, 90° linksom gedraaid vanaf AXIS_P1. Uitvoerassen: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Chip naar boven gericht in de standaardoriëntatie van het BNO055-datasheet. Er wordt geen omwisseling toegepast: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Chip naar boven gericht, 180° gedraaid vanaf AXIS_P1. Uitvoerassen: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Chip naar boven gericht, 90° rechtsom gedraaid vanaf AXIS_P1. Uitvoerassen: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Chip op zijn rug gekanteld (componentzijde naar beneden) ten opzichte van AXIS_P1. Uitvoerassen: X = +Xc, Y = -Yc, Z = -Zc. Dit is de plaatsing die door de BNO055 constructor wordt gebruikt wanneer geen axis argument wordt opgegeven.

bno055.AXIS_P5: bytes

Chip naar beneden gericht, 90° linksom gedraaid vanaf AXIS_P4. Uitvoerassen: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Chip naar beneden gericht, 180° gedraaid vanaf AXIS_P4. Uitvoerassen: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Chip naar beneden gericht, 90° rechtsom gedraaid vanaf AXIS_P4. Uitvoerassen: X = -Xc, Y = +Yc, Z = -Zc.