bno055 — Sterownik IMU BNO055¶
Ten moduł udostępnia sterownik dla 9-osiowego sensora orientacji bezwzględnej Bosch BNO055 przez I2C. BNO055 łączy w układzie dane z akcelerometru, magnetometru i żyroskopu oraz udostępnia wyjścia kwaternionu, kątów Eulera, przyspieszenia liniowego i grawitacji obok surowych kanałów sensora.
Przykład użycia:
import time
from machine import I2C
import bno055
bus = I2C(1)
imu = bno055.BNO055(bus)
while True:
print(imu.euler())
time.sleep_ms(100)
Klasy¶
- class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)¶
Tworzy instancję sterownika BNO055.
busto skonfigurowany obiekt magistralimachine.I2Cużywany do komunikacji z sensorem.addressto 7-bitowy adres I2C urządzenia. Domyślnie0x28.modeto tryb pracy, w którym umieszczane jest urządzenie po resecie. Zobacz stałe trybu pracy poniżej. DomyślnieNDOF_MODE.axisto 2-bajtowa wartość konfiguracji przemapowania osi. Zobacz stałe umiejscowienia osi poniżej. DomyślnieAXIS_P4.
Konstruktor weryfikuje identyfikator układu, wykonuje miękki reset, przełącza na normalne zasilanie, stosuje konfigurację osi i wchodzi w żądany tryb pracy przy użyciu zewnętrznego oscylatora. Wywołuje
RuntimeError, jeśli oczekiwane wartości rejestru ID nie zostaną odczytane zwrotnie.- read_registers(register: int, size: int = 1) bytes¶
Odczytuje
sizebajtów z podanego rejestru urządzenia i zwraca je jako obiektbytes.
- write_registers(register: int, data: bytes) None¶
Zapisuje podane bajty
datado urządzenia, zaczynając odregister.
- operation_mode(mode: int = None) int¶
Pobiera lub ustawia rejestr trybu pracy. Bez argumentu zwraca bieżący tryb jako
int. Z argumentemmodezapisuje nowy tryb do urządzenia. Zobacz stałe trybu pracy poniżej.
- system_trigger(data: int) None¶
Zapisuje
datado rejestru wyzwalacza systemowego (0x3F). Jest to używane wewnętrznie do wykonania miękkiego resetu (0x20) i wyboru zewnętrznego oscylatora (0x80).
- power_mode(mode: int = None) bytes¶
Pobiera lub ustawia rejestr trybu zasilania. Bez argumentu zwraca bieżącą zawartość rejestru trybu zasilania. Z argumentem
modezapisuje nowy tryb zasilania do urządzenia.
- page(num: int = None) None¶
Pobiera lub ustawia stronę rejestru. Bez argumentu odczytuje bieżący rejestr strony. Z argumentem
numwybiera stronę.
- read_id() bytes¶
Zwraca 4-bajtowy blok ID odczytany z rejestru
0x00. Oczekiwana wartość tob'\xA0\xFB\x32\x0F'.
- axis(placement: bytes = None) bytes¶
Pobiera lub ustawia konfigurację przemapowania osi. Bez argumentu zwraca bieżącą 2-bajtową konfigurację osi. Z argumentem
placementzapisuje dostarczoną 2-bajtową konfigurację osi. Użyj jednej ze stałychAXIS_P0..AXIS_P7poniżej.
- quaternion() list¶
Zwraca scaloną orientację jako 4-elementową listę
[w, x, y, z]liczb zmiennoprzecinkowych przeskalowanych do zakresu jednostkowego kwaternionu.
- euler() list¶
Zwraca scaloną orientację jako 3-elementową listę
[yaw, roll, pitch]liczb zmiennoprzecinkowych w stopniach.
- accelerometer() list¶
Zwraca odczyt akcelerometru jako 3-elementową listę
[x, y, z]liczb zmiennoprzecinkowych w m/s^2.
- magnetometer() list¶
Zwraca odczyt magnetometru jako 3-elementową listę
[x, y, z]liczb zmiennoprzecinkowych w mikroteslach.
- gyroscope() list¶
Zwraca odczyt żyroskopu jako 3-elementową listę
[x, y, z]liczb zmiennoprzecinkowych w stopniach na sekundę.
Stałe¶
Tryby pracy¶
Umiejscowienia osi¶
Następujące 2-bajtowe wartości są przekazywane do BNO055.axis() w celu przemapowania układu współrzędnych urządzenia. Każda stała to para rejestrów (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) z karty katalogowej BNO055 (Sekcja 3.4, Axis remap), wstępnie zakodowana dla jednej z ośmiu standardowych orientacji umiejscowienia.
Wybierz stałą, której osie wyjściowe odpowiadają fizycznemu zamontowaniu układu na PCB hosta:
Stała |
Wyjście X |
Wyjście Y |
Wyjście Z |
Bajty |
Montaż |
|---|---|---|---|---|---|
|
|
|
|
stroną do góry, 90° CCW od P1 |
|
|
|
|
|
stroną do góry, domyślne wg karty katalogowej |
|
|
|
|
|
stroną do góry, obrócony o 180° |
|
|
|
|
|
stroną do góry, 90° CW od P1 |
|
|
|
|
|
stroną do dołu, odwrócony względem osi X (domyślne dla konstruktora) |
|
|
|
|
|
stroną do dołu, obrócony o 90° CCW od P4 |
|
|
|
|
|
stroną do dołu, obrócony o 180° od P4 |
|
|
|
|
|
stroną do dołu, obrócony o 90° CW od P4 |
Xc / Yc / Zc oznaczają wewnętrzne osie układu (zgodnie z kartą katalogową BNO055). Kolumny „Wyjście” to osie, które urządzenie dostarcza poprzez BNO055.euler(), BNO055.gyro() itd. P0 do P3 to cztery obroty układu o 90° w orientacji stroną z komponentami do góry; P4 do P7 to te same cztery obroty po przewróceniu układu na grzbiet.
- bno055.AXIS_P0: bytes¶
Układ stroną do góry, obrócony o 90° CCW od
AXIS_P1. Osie wyjściowe:X = -Yc,Y = +Xc,Z = +Zc.
- bno055.AXIS_P1: bytes¶
Układ stroną do góry w domyślnej orientacji karty katalogowej BNO055. Nie stosuje się przemapowania:
X = +Xc,Y = +Yc,Z = +Zc.
- bno055.AXIS_P2: bytes¶
Układ stroną do góry, obrócony o 180° od
AXIS_P1. Osie wyjściowe:X = -Xc,Y = -Yc,Z = +Zc.
- bno055.AXIS_P3: bytes¶
Układ stroną do góry, obrócony o 90° CW od
AXIS_P1. Osie wyjściowe:X = +Yc,Y = -Xc,Z = +Zc.
- bno055.AXIS_P4: bytes¶
Układ przewrócony na grzbiet (strona z komponentami w dół) względem
AXIS_P1. Osie wyjściowe:X = +Xc,Y = -Yc,Z = -Zc. Jest to umiejscowienie używane przez konstruktorBNO055, gdy nie podano argumentuaxis.
- bno055.AXIS_P5: bytes¶
Układ stroną do dołu, obrócony o 90° CCW od
AXIS_P4. Osie wyjściowe:X = +Yc,Y = +Xc,Z = -Zc.