bno055 — Pilote IMU BNO055

Ce module fournit un pilote pour le capteur Bosch BNO055 d’orientation absolue à 9 axes via I2C. Le BNO055 fusionne les données de l’accéléromètre, du magnétomètre et du gyroscope directement sur la puce et expose des sorties de quaternion, d’angles d’Euler, d’accélération linéaire et de gravité en plus des canaux bruts du capteur.

Exemple d’utilisation

import time
from machine import I2C
import bno055

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

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

Classes

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

Construit une instance de pilote BNO055.

  • bus est un objet de bus machine.I2C configuré, utilisé pour communiquer avec le capteur.

  • address est l’adresse I2C 7 bits du périphérique. Vaut 0x28 par défaut.

  • mode est le mode de fonctionnement dans lequel le périphérique est placé après la réinitialisation. Voir les constantes de mode de fonctionnement ci-dessous. Vaut NDOF_MODE par défaut.

  • axis est une valeur de configuration de remappage des axes sur 2 octets. Voir les constantes de placement des axes ci-dessous. Vaut AXIS_P4 par défaut.

Le constructeur vérifie l’identifiant de la puce, effectue une réinitialisation logicielle, passe à l’alimentation normale, applique la configuration des axes et entre dans le mode de fonctionnement demandé en utilisant l’oscillateur externe. Déclenche une RuntimeError si les valeurs attendues des registres d’identifiant ne sont pas relues.

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

Lit size octets depuis le registre de périphérique indiqué et les renvoie sous forme d’objet bytes.

write_registers(register: int, data: bytes) None

Écrit les octets data indiqués sur le périphérique à partir de register.

operation_mode(mode: int = None) int

Obtient ou définit le registre de mode de fonctionnement. Sans argument, renvoie le mode actuel sous forme d”int. Avec un argument mode, écrit le nouveau mode sur le périphérique. Voir les constantes de mode de fonctionnement ci-dessous.

system_trigger(data: int) None

Écrit data dans le registre de déclenchement système (0x3F). Cela est utilisé en interne pour émettre une réinitialisation logicielle (0x20) et pour sélectionner l’oscillateur externe (0x80).

power_mode(mode: int = None) bytes

Obtient ou définit le registre de mode d’alimentation. Sans argument, renvoie le contenu actuel du registre de mode d’alimentation. Avec un argument mode, écrit le nouveau mode d’alimentation sur le périphérique.

page(num: int = None) None

Obtient ou définit la page de registre. Sans argument, lit le registre de page actuel. Avec un argument num, sélectionne la page.

temperature() int

Renvoie la valeur du registre de température de la puce sous forme d’octet non signé.

read_id() bytes

Renvoie le bloc d’identifiant de 4 octets lu depuis le registre 0x00. La valeur attendue est b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Obtient ou définit la configuration de remappage des axes. Sans argument, renvoie la configuration d’axes actuelle sur 2 octets. Avec un argument placement, écrit la configuration d’axes fournie sur 2 octets. Utilisez l’une des constantes AXIS_P0..``AXIS_P7`` ci-dessous.

quaternion() list

Renvoie l’orientation fusionnée sous forme de liste de 4 éléments [w, x, y, z] de nombres à virgule flottante mis à l’échelle dans la plage du quaternion unitaire.

euler() list

Renvoie l’orientation fusionnée sous forme de liste de 3 éléments [yaw, roll, pitch] de nombres à virgule flottante en degrés.

accelerometer() list

Renvoie la lecture de l’accéléromètre sous forme de liste de 3 éléments [x, y, z] de nombres à virgule flottante en m/s^2.

magnetometer() list

Renvoie la lecture du magnétomètre sous forme de liste de 3 éléments [x, y, z] de nombres à virgule flottante en micro-Tesla.

gyroscope() list

Renvoie la lecture du gyroscope sous forme de liste de 3 éléments [x, y, z] de nombres à virgule flottante en degrés par seconde.

linear_acceleration() list

Renvoie l’accélération linéaire compensée en gravité sous forme de liste de 3 éléments [x, y, z] de nombres à virgule flottante en m/s^2.

gravity() list

Renvoie le vecteur de gravité sous forme de liste de 3 éléments [x, y, z] de nombres à virgule flottante en m/s^2.

Constantes

Modes de fonctionnement

bno055.CONFIG_MODE: int

Mode de configuration (0x00). Le périphérique doit être dans ce mode pour modifier les registres de configuration.

bno055.ACCONLY_MODE: int

Mode sans fusion, accéléromètre uniquement (0x01).

bno055.MAGONLY_MODE: int

Mode sans fusion, magnétomètre uniquement (0x02).

bno055.GYRONLY_MODE: int

Mode sans fusion, gyroscope uniquement (0x03).

bno055.ACCMAG_MODE: int

Mode sans fusion, accéléromètre + magnétomètre (0x04).

bno055.ACCGYRO_MODE: int

Mode sans fusion, accéléromètre + gyroscope (0x05).

bno055.MAGGYRO_MODE: int

Mode sans fusion, magnétomètre + gyroscope (0x06).

bno055.AMG_MODE: int

Mode sans fusion, accéléromètre + magnétomètre + gyroscope (0x07).

bno055.IMUPLUS_MODE: int

Mode de fusion IMU utilisant l’accéléromètre + le gyroscope (0x08).

bno055.COMPASS_MODE: int

Mode de fusion boussole utilisant l’accéléromètre + le magnétomètre (0x09).

bno055.M4G_MODE: int

Mode de fusion magnétomètre-pour-gyroscope (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

Mode de fusion 9-DOF avec calibrage rapide du magnétomètre désactivé (0x0B).

bno055.NDOF_MODE: int

Mode de fusion 9-DOF avec calibrage rapide du magnétomètre activé (0x0C). C’est le mode par défaut utilisé par le constructeur.

Placements des axes

Les valeurs de 2 octets suivantes sont passées à BNO055.axis() pour remapper le système de coordonnées du périphérique. Chaque constante est la paire de registres (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) issue de la fiche technique du BNO055 (Section 3.4, Axis remap), pré-encodée pour l’une des huit orientations de placement standard.

Choisissez la constante dont les axes de sortie correspondent à la manière dont la puce est physiquement montée sur le circuit imprimé hôte :

Constante

Sortie X

Sortie Y

Sortie Z

Octets

Montage

AXIS_P0

-Yc

+Xc

+Zc

21 04

face vers le haut, 90° dans le sens antihoraire par rapport à P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

face vers le haut, valeur par défaut de la fiche technique

AXIS_P2

-Xc

-Yc

+Zc

24 06

face vers le haut, pivoté de 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

face vers le haut, 90° dans le sens horaire par rapport à P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

face vers le bas, retourné autour de X (valeur par défaut du constructeur)

AXIS_P5

+Yc

+Xc

-Zc

21 01

face vers le bas, pivoté de 90° dans le sens antihoraire par rapport à P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

face vers le bas, pivoté de 180° par rapport à P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

face vers le bas, pivoté de 90° dans le sens horaire par rapport à P4

Xc / Yc / Zc désignent les axes intrinsèques de la puce (tels qu’imprimés dans la fiche technique du BNO055). Les colonnes « Sortie » sont les axes que le périphérique fournit via BNO055.euler(), BNO055.gyro(), etc. P0 à P3 sont les quatre rotations de 90° de la puce dans l’orientation côté composants vers le haut ; P4 à P7 sont les mêmes quatre rotations après retournement de la puce sur son dos.

bno055.AXIS_P0: bytes

Puce face vers le haut, pivotée de 90° dans le sens antihoraire par rapport à AXIS_P1. Axes de sortie : X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Puce face vers le haut dans l’orientation par défaut de la fiche technique du BNO055. Aucun remappage n’est appliqué : X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Puce face vers le haut, pivotée de 180° par rapport à AXIS_P1. Axes de sortie : X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Puce face vers le haut, pivotée de 90° dans le sens horaire par rapport à AXIS_P1. Axes de sortie : X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Puce retournée sur son dos (côté composants vers le bas) par rapport à AXIS_P1. Axes de sortie : X = +Xc, Y = -Yc, Z = -Zc. C’est le placement utilisé par le constructeur BNO055 lorsqu’aucun argument axis n’est fourni.

bno055.AXIS_P5: bytes

Puce face vers le bas, pivotée de 90° dans le sens antihoraire par rapport à AXIS_P4. Axes de sortie : X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Puce face vers le bas, pivotée de 180° par rapport à AXIS_P4. Axes de sortie : X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Puce face vers le bas, pivotée de 90° dans le sens horaire par rapport à AXIS_P4. Axes de sortie : X = -Xc, Y = +Yc, Z = -Zc.