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.
busis een geconfigureerdmachine.I2Cbusobject dat wordt gebruikt om met de sensor te communiceren.addressis het 7-bits I2C-adres van het apparaat. Standaard0x28.modeis de bedrijfsmodus waarin het apparaat na een reset wordt geplaatst. Zie de bedrijfsmodusconstanten hieronder. StandaardNDOF_MODE.axisis een 2-byte asomwisselconfiguratiewaarde. Zie de asplaatsingsconstanten hieronder. StandaardAXIS_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
RuntimeErrorals de verwachte ID-registerwaarden niet worden teruggelezen.- read_registers(register: int, size: int = 1) bytes¶
Leest
sizebytes uit het opgegeven apparaatregister en retourneert ze als eenbytesobject.
- write_registers(register: int, data: bytes) None¶
Schrijft de opgegeven
databytes naar het apparaat, beginnend bijregister.
- operation_mode(mode: int = None) int¶
Leest of stelt het bedrijfsmodusregister in. Zonder argument retourneert het de huidige modus als een
int. Met eenmodeargument schrijft het de nieuwe modus naar het apparaat. Zie de bedrijfsmodusconstanten hieronder.
- system_trigger(data: int) None¶
Schrijft
datanaar 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
modeargument 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
numargument selecteert het de pagina.
- read_id() bytes¶
Retourneert het 4-byte ID-blok dat uit register
0x00is gelezen. De verwachte waarde isb'\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
placementargument schrijft het de opgegeven 2-byte asconfiguratie. Gebruik een van deAXIS_P0..AXIS_P7constanten 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.
Constanten¶
Bedrijfsmodi¶
- bno055.CONFIG_MODE: int¶
Configuratiemodus (
0x00). Het apparaat moet zich in deze modus bevinden om configuratieregisters te wijzigen.
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 |
|---|---|---|---|---|---|
|
|
|
|
naar boven gericht, 90° linksom vanaf P1 |
|
|
|
|
|
naar boven gericht, datasheetstandaard |
|
|
|
|
|
naar boven gericht, 180° gedraaid |
|
|
|
|
|
naar boven gericht, 90° rechtsom vanaf P1 |
|
|
|
|
|
naar beneden gericht, omgeklapt om X (constructorstandaard) |
|
|
|
|
|
naar beneden gericht, 90° linksom gedraaid vanaf P4 |
|
|
|
|
|
naar beneden gericht, 180° gedraaid vanaf P4 |
|
|
|
|
|
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 deBNO055constructor wordt gebruikt wanneer geenaxisargument wordt opgegeven.
- bno055.AXIS_P5: bytes¶
Chip naar beneden gericht, 90° linksom gedraaid vanaf
AXIS_P4. Uitvoerassen:X = +Yc,Y = +Xc,Z = -Zc.