bno055 — BNO055 IMU illesztőprogram

Ez a modul illesztőprogramot biztosít a Bosch BNO055 9 tengelyes abszolút orientációs érzékelőhöz I2C-n keresztül. A BNO055 a gyorsulásmérő, a magnetométer és a giroszkóp adatait a chipen összegzi, és a nyers érzékelőcsatornákon felül kvaternió-, Euler-szög-, lineáris gyorsulás- és gravitációs kimeneteket is biztosít.

Példa a használatra:

import time
from machine import I2C
import bno055

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

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

Osztályok

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

Létrehoz egy BNO055 illesztőprogram-példányt.

  • A bus egy beállított machine.I2C buszobjektum, amely az érzékelővel való kommunikációra szolgál.

  • Az address az eszköz 7 bites I2C-címe. Alapértelmezett értéke 0x28.

  • A mode az az üzemmód, amelybe az eszköz a visszaállítás után kerül. Lásd az alábbi üzemmód-konstansokat. Alapértelmezett értéke NDOF_MODE.

  • Az axis egy 2 bájtos tengely-átleképezési beállítási érték. Lásd az alábbi tengelyelhelyezési konstansokat. Alapértelmezett értéke AXIS_P4.

A konstruktor ellenőrzi a chip azonosítóját, szoftveres visszaállítást hajt végre, normál tápellátásra vált, alkalmazza a tengelybeállítást, és belép a kért üzemmódba a külső oszcillátor használatával. RuntimeError hibát vált ki, ha a várt azonosítóregiszter-értékek nem olvashatók vissza.

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

Beolvas size bájtot a megadott eszközregiszterből, és bytes objektumként adja vissza azokat.

write_registers(register: int, data: bytes) None

Kiírja a megadott data bájtokat az eszközre a register regisztertől kezdve.

operation_mode(mode: int = None) int

Lekérdezi vagy beállítja az üzemmódregisztert. Argumentum nélkül az aktuális üzemmódot adja vissza int értékként. mode argumentummal az új üzemmódot írja az eszközre. Lásd az alábbi üzemmód-konstansokat.

system_trigger(data: int) None

Kiírja a data adatot a rendszer-triggerregiszterbe (0x3F). Ezt belsőleg a szoftveres visszaállítás kiadására (0x20) és a külső oszcillátor kiválasztására (0x80) használja.

power_mode(mode: int = None) bytes

Lekérdezi vagy beállítja a tápüzemmód-regisztert. Argumentum nélkül a tápüzemmód-regiszter aktuális tartalmát adja vissza. mode argumentummal az új tápüzemmódot írja az eszközre.

page(num: int = None) None

Lekérdezi vagy beállítja a regiszteroldalt. Argumentum nélkül beolvassa az aktuális oldalregisztert. num argumentummal kiválasztja az oldalt.

temperature() int

Visszaadja a chip hőmérséklet-regiszterének értékét előjel nélküli bájtként.

read_id() bytes

Visszaadja a 0x00 regiszterből beolvasott 4 bájtos azonosítóblokkot. A várt érték b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Lekérdezi vagy beállítja a tengely-átleképezési beállítást. Argumentum nélkül az aktuális 2 bájtos tengelybeállítást adja vissza. placement argumentummal a megadott 2 bájtos tengelybeállítást írja ki. Használja az alábbi AXIS_P0..AXIS_P7 konstansok egyikét.

quaternion() list

Visszaadja az összegzett orientációt 4 elemű [w, x, y, z] listaként, lebegőpontos értékekkel az egységkvaternió tartományára skálázva.

euler() list

Visszaadja az összegzett orientációt 3 elemű [yaw, roll, pitch] listaként, lebegőpontos értékekkel fokban.

accelerometer() list

Visszaadja a gyorsulásmérő mérési eredményét 3 elemű [x, y, z] listaként, lebegőpontos értékekkel m/s^2-ben.

magnetometer() list

Visszaadja a magnetométer mérési eredményét 3 elemű [x, y, z] listaként, lebegőpontos értékekkel mikroteslában.

gyroscope() list

Visszaadja a giroszkóp mérési eredményét 3 elemű [x, y, z] listaként, lebegőpontos értékekkel fok/másodpercben.

linear_acceleration() list

Visszaadja a gravitációval kompenzált lineáris gyorsulást 3 elemű [x, y, z] listaként, lebegőpontos értékekkel m/s^2-ben.

gravity() list

Visszaadja a gravitációs vektort 3 elemű [x, y, z] listaként, lebegőpontos értékekkel m/s^2-ben.

Konstansok

Üzemmódok

bno055.CONFIG_MODE: int

Konfigurációs mód (0x00). A konfigurációs regiszterek módosításához az eszköznek ebben a módban kell lennie.

bno055.ACCONLY_MODE: int

Csak gyorsulásmérős, nem összegző mód (0x01).

bno055.MAGONLY_MODE: int

Csak magnetométeres, nem összegző mód (0x02).

bno055.GYRONLY_MODE: int

Csak giroszkópos, nem összegző mód (0x03).

bno055.ACCMAG_MODE: int

Gyorsulásmérő + magnetométer nem összegző mód (0x04).

bno055.ACCGYRO_MODE: int

Gyorsulásmérő + giroszkóp nem összegző mód (0x05).

bno055.MAGGYRO_MODE: int

Magnetométer + giroszkóp nem összegző mód (0x06).

bno055.AMG_MODE: int

Gyorsulásmérő + magnetométer + giroszkóp nem összegző mód (0x07).

bno055.IMUPLUS_MODE: int

IMU összegző mód gyorsulásmérő + giroszkóp használatával (0x08).

bno055.COMPASS_MODE: int

Iránytű összegző mód gyorsulásmérő + magnetométer használatával (0x09).

bno055.M4G_MODE: int

Magnetométer-a-giroszkóphoz összegző mód (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

9-DOF összegző mód kikapcsolt gyors magnetométer-kalibrálással (0x0B).

bno055.NDOF_MODE: int

9-DOF összegző mód bekapcsolt gyors magnetométer-kalibrálással (0x0C). Ez a konstruktor által használt alapértelmezett mód.

Tengelyelhelyezések

A következő 2 bájtos értékek a BNO055.axis() metódusnak adhatók át az eszköz koordináta-rendszerének átleképezéséhez. Minden konstans a BNO055 adatlap (3.4. szakasz, Axis remap) szerinti (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) regiszterpár, amely a nyolc szabványos elhelyezési orientáció egyikéhez van előre kódolva.

Válassza azt a konstanst, amelynek kimeneti tengelyei megfelelnek annak, ahogy a chip fizikailag fel van szerelve a gazda nyomtatott áramköri lapra:

Konstans

Kimeneti X

Kimeneti Y

Kimeneti Z

Bájtok

Felszerelés

AXIS_P0

-Yc

+Xc

+Zc

21 04

felfelé néz, 90°-kal CCW a P1-hez képest

AXIS_P1

+Xc

+Yc

+Zc

24 00

felfelé néz, adatlap szerinti alapértelmezés

AXIS_P2

-Xc

-Yc

+Zc

24 06

felfelé néz, 180°-kal elforgatva

AXIS_P3

+Yc

-Xc

+Zc

21 02

felfelé néz, 90°-kal CW a P1-hez képest

AXIS_P4

+Xc

-Yc

-Zc

24 03

lefelé néz, X körül átfordítva (konstruktor alapértelmezése)

AXIS_P5

+Yc

+Xc

-Zc

21 01

lefelé néz, 90°-kal CCW elforgatva a P4-hez képest

AXIS_P6

-Yc

-Xc

-Zc

21 07

lefelé néz, 180°-kal elforgatva a P4-hez képest

AXIS_P7

-Xc

+Yc

-Zc

24 05

lefelé néz, 90°-kal CW elforgatva a P4-hez képest

Az Xc / Yc / Zc a chip belső tengelyeit jelöli (ahogy a BNO055 adatlapon szerepel). A „Kimeneti” oszlopok azok a tengelyek, amelyeket az eszköz a BNO055.euler(), BNO055.gyro() stb. metódusokon keresztül szolgáltat. A P0-tól P3-ig terjedő értékek a chip négy 90°-os elforgatása alkatrész-felfelé orientációban; a P4-től P7-ig terjedő értékek ugyanaz a négy elforgatás, miután a chipet a hátára fordítottuk.

bno055.AXIS_P0: bytes

A chip felfelé néz, 90°-kal CCW elforgatva a AXIS_P1 értékhez képest. Kimeneti tengelyek: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

A chip felfelé néz a BNO055 adatlap alapértelmezett orientációjában. Nincs átleképezés alkalmazva: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

A chip felfelé néz, 180°-kal elforgatva a AXIS_P1 értékhez képest. Kimeneti tengelyek: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

A chip felfelé néz, 90°-kal CW elforgatva a AXIS_P1 értékhez képest. Kimeneti tengelyek: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

A chip a hátára fordítva (alkatrészoldal lefelé) a AXIS_P1 értékhez képest. Kimeneti tengelyek: X = +Xc, Y = -Yc, Z = -Zc. Ezt az elhelyezést használja a BNO055 konstruktor, amikor nincs megadva axis argumentum.

bno055.AXIS_P5: bytes

A chip lefelé néz, 90°-kal CCW elforgatva a AXIS_P4 értékhez képest. Kimeneti tengelyek: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

A chip lefelé néz, 180°-kal elforgatva a AXIS_P4 értékhez képest. Kimeneti tengelyek: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

A chip lefelé néz, 90°-kal CW elforgatva a AXIS_P4 értékhez képest. Kimeneti tengelyek: X = -Xc, Y = +Yc, Z = -Zc.