bno055 — Driver IMU BNO055¶
Questo modulo fornisce un driver per il sensore di orientamento assoluto a 9 assi Bosch BNO055 tramite I2C. Il BNO055 fonde sul chip i dati di accelerometro, magnetometro e giroscopio ed espone, oltre ai canali grezzi del sensore, le uscite di quaternione, angoli di Eulero, accelerazione lineare e gravità.
Esempio di utilizzo:
import time
from machine import I2C
import bno055
bus = I2C(1)
imu = bno055.BNO055(bus)
while True:
print(imu.euler())
time.sleep_ms(100)
Classi¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Costruisce un’istanza del driver BNO055.
busè un oggetto busmachine.I2Cconfigurato, utilizzato per comunicare con il sensore.addressè l’indirizzo I2C a 7 bit del dispositivo. Il valore predefinito è0x28.modeè la modalità operativa in cui viene posto il dispositivo dopo il reset. Vedi le costanti delle modalità operative riportate di seguito. Il valore predefinito èNDOF_MODE.axisè un valore di configurazione di rimappatura degli assi a 2 byte. Vedi le costanti di posizionamento degli assi riportate di seguito. Il valore predefinito èAXIS_P4.
Il costruttore verifica l’ID del chip, esegue un soft reset, passa all’alimentazione normale, applica la configurazione degli assi ed entra nella modalità operativa richiesta utilizzando l’oscillatore esterno. Genera un
RuntimeErrorse i valori attesi dei registri ID non vengono letti.- read_registers(register: int, size: int = 1) bytes¶
Legge
sizebyte dal registro del dispositivo indicato e li restituisce come oggettobytes.
- write_registers(register: int, data: bytes) None¶
Scrive i byte
dataindicati nel dispositivo a partire daregister.
- operation_mode(mode: int = None) int¶
Legge o imposta il registro della modalità operativa. Senza argomenti, restituisce la modalità corrente come
int. Con un argomentomode, scrive la nuova modalità nel dispositivo. Vedi le costanti delle modalità operative riportate di seguito.
- system_trigger(data: int) None¶
Scrive
datanel registro di trigger di sistema (0x3F). Viene utilizzato internamente per eseguire un soft reset (0x20) e per selezionare l’oscillatore esterno (0x80).
- power_mode(mode: int = None) bytes¶
Legge o imposta il registro della modalità di alimentazione. Senza argomenti, restituisce il contenuto corrente del registro della modalità di alimentazione. Con un argomento
mode, scrive la nuova modalità di alimentazione nel dispositivo.
- page(num: int = None) None¶
Legge o imposta la pagina dei registri. Senza argomenti, legge il registro della pagina corrente. Con un argomento
num, seleziona la pagina.
- temperature() int¶
Restituisce il valore del registro della temperatura del chip come byte senza segno.
- read_id() bytes¶
Restituisce il blocco ID a 4 byte letto dal registro
0x00. Il valore atteso èb'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Legge o imposta la configurazione di rimappatura degli assi. Senza argomenti, restituisce la configurazione corrente degli assi a 2 byte. Con un argomento
placement, scrive la configurazione degli assi a 2 byte fornita. Utilizza una delle costantiAXIS_P0..AXIS_P7riportate di seguito.
- quaternion() list¶
Restituisce l’orientamento fuso come lista di 4 elementi
[w, x, y, z]di float scalati nell’intervallo del quaternione unitario.
- euler() list¶
Restituisce l’orientamento fuso come lista di 3 elementi
[yaw, roll, pitch]di float in gradi.
- accelerometer() list¶
Restituisce la lettura dell’accelerometro come lista di 3 elementi
[x, y, z]di float in m/s^2.
- magnetometer() list¶
Restituisce la lettura del magnetometro come lista di 3 elementi
[x, y, z]di float in micro-Tesla.
- gyroscope() list¶
Restituisce la lettura del giroscopio come lista di 3 elementi
[x, y, z]di float in gradi al secondo.
Costanti¶
Modalità operative¶
- bno055.CONFIG_MODE: int¶
Modalità di configurazione (
0x00). Il dispositivo deve essere in questa modalità per modificare i registri di configurazione.
- bno055.COMPASS_MODE: int¶
Modalità di fusione bussola che utilizza accelerometro + magnetometro (
0x09).
Posizionamenti degli assi¶
I seguenti valori a 2 byte vengono passati a BNO055.axis() per rimappare il sistema di coordinate del dispositivo. Ogni costante è la coppia di registri (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) del datasheet del BNO055 (Sezione 3.4, Axis remap), pre-codificata per uno degli otto orientamenti di posizionamento standard.
Scegli la costante le cui uscite degli assi corrispondono al modo in cui il chip è montato fisicamente sul PCB host:
Costante |
Uscita X |
Uscita Y |
Uscita Z |
Byte |
Montaggio |
|---|---|---|---|---|---|
|
|
|
|
rivolto verso l’alto, 90° in senso antiorario rispetto a P1 |
|
|
|
|
|
rivolto verso l’alto, predefinito da datasheet |
|
|
|
|
|
rivolto verso l’alto, ruotato di 180° |
|
|
|
|
|
rivolto verso l’alto, 90° in senso orario rispetto a P1 |
|
|
|
|
|
rivolto verso il basso, capovolto attorno a X (predefinito del costruttore) |
|
|
|
|
|
rivolto verso il basso, ruotato di 90° in senso antiorario rispetto a P4 |
|
|
|
|
|
rivolto verso il basso, ruotato di 180° rispetto a P4 |
|
|
|
|
|
rivolto verso il basso, ruotato di 90° in senso orario rispetto a P4 |
Xc / Yc / Zc indicano gli assi intrinseci del chip (come riportato nel datasheet del BNO055). Le colonne «Uscita» sono gli assi che il dispositivo fornisce tramite BNO055.euler(), BNO055.gyro(), ecc. Da P0 a P3 sono le quattro rotazioni di 90° del chip con il lato componenti rivolto verso l’alto; da P4 a P7 sono le stesse quattro rotazioni dopo aver capovolto il chip sul retro.
- bno055.AXIS_P0: bytes¶
Chip rivolto verso l’alto, ruotato di 90° in senso antiorario rispetto a
AXIS_P1. Assi di uscita:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Chip rivolto verso l’alto nell’orientamento predefinito del datasheet del BNO055. Non viene applicata alcuna rimappatura:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Chip rivolto verso l’alto, ruotato di 180° rispetto a
AXIS_P1. Assi di uscita:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Chip rivolto verso l’alto, ruotato di 90° in senso orario rispetto a
AXIS_P1. Assi di uscita:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Chip capovolto sul retro (lato componenti rivolto verso il basso) rispetto a
AXIS_P1. Assi di uscita:X = +Xc,Y = -Yc,Z = -Zc. Questo è il posizionamento utilizzato dal costruttoreBNO055quando non viene fornito alcun argomentoaxis.
- bno055.AXIS_P5: bytes¶
Chip rivolto verso il basso, ruotato di 90° in senso antiorario rispetto a
AXIS_P4. Assi di uscita:X = +Yc,Y = +Xc,Z = -Zc.