bno055 — Драйвер IMU BNO055

Этот модуль предоставляет драйвер для 9-осевого датчика абсолютной ориентации Bosch BNO055 по I2C. BNO055 объединяет данные акселерометра, магнитометра и гироскопа на кристалле и предоставляет выходные данные кватерниона, углов Эйлера, линейного ускорения и гравитации в дополнение к необработанным каналам датчика.

Пример использования:

import time
from machine import I2C
import bno055

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

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

Классы

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

Создаёт экземпляр драйвера BNO055.

  • bus — настроенный объект шины machine.I2C, используемый для связи с датчиком.

  • address — 7-битный адрес I2C устройства. По умолчанию 0x28.

  • mode — режим работы, в который устройство переводится после сброса. См. константы режимов работы ниже. По умолчанию NDOF_MODE.

  • axis — 2-байтовое значение конфигурации переназначения осей. См. константы размещения осей ниже. По умолчанию AXIS_P4.

Конструктор проверяет идентификатор чипа, выполняет программный сброс, переключается на нормальное энергопотребление, применяет конфигурацию осей и переходит в запрошенный режим работы, используя внешний осциллятор. Вызывает RuntimeError, если ожидаемые значения регистра ID не считываются.

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

Считывает size байт из указанного регистра устройства и возвращает их в виде объекта bytes.

write_registers(register: int, data: bytes) None

Записывает указанные байты data в устройство, начиная с register.

operation_mode(mode: int = None) int

Получает или устанавливает регистр режима работы. Без аргумента возвращает текущий режим в виде int. С аргументом mode записывает новый режим в устройство. См. константы режимов работы ниже.

system_trigger(data: int) None

Записывает data в регистр системного триггера (0x3F). Используется внутренне для выполнения программного сброса (0x20) и для выбора внешнего осциллятора (0x80).

power_mode(mode: int = None) bytes

Получает или устанавливает регистр режима энергопотребления. Без аргумента возвращает текущее содержимое регистра режима энергопотребления. С аргументом mode записывает новый режим энергопотребления в устройство.

page(num: int = None) None

Получает или устанавливает страницу регистров. Без аргумента считывает текущий регистр страницы. С аргументом num выбирает страницу.

temperature() int

Возвращает значение регистра температуры чипа в виде беззнакового байта.

read_id() bytes

Возвращает 4-байтовый блок ID, считанный из регистра 0x00. Ожидаемое значение — b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Получает или устанавливает конфигурацию переназначения осей. Без аргумента возвращает текущую 2-байтовую конфигурацию осей. С аргументом placement записывает предоставленную 2-байтовую конфигурацию осей. Используйте одну из констант AXIS_P0..``AXIS_P7`` ниже.

quaternion() list

Возвращает объединённую ориентацию в виде списка из 4 элементов [w, x, y, z] чисел с плавающей запятой, масштабированных до диапазона единичного кватерниона.

euler() list

Возвращает объединённую ориентацию в виде списка из 3 элементов [yaw, roll, pitch] чисел с плавающей запятой в градусах.

accelerometer() list

Возвращает показания акселерометра в виде списка из 3 элементов [x, y, z] чисел с плавающей запятой в м/с^2.

magnetometer() list

Возвращает показания магнитометра в виде списка из 3 элементов [x, y, z] чисел с плавающей запятой в микротеслах.

gyroscope() list

Возвращает показания гироскопа в виде списка из 3 элементов [x, y, z] чисел с плавающей запятой в градусах в секунду.

linear_acceleration() list

Возвращает линейное ускорение с компенсацией гравитации в виде списка из 3 элементов [x, y, z] чисел с плавающей запятой в м/с^2.

gravity() list

Возвращает вектор гравитации в виде списка из 3 элементов [x, y, z] чисел с плавающей запятой в м/с^2.

Константы

Режимы работы

bno055.CONFIG_MODE: int

Режим конфигурации (0x00). Устройство должно находиться в этом режиме для изменения регистров конфигурации.

bno055.ACCONLY_MODE: int

Режим без объединения данных, только акселерометр (0x01).

bno055.MAGONLY_MODE: int

Режим без объединения данных, только магнитометр (0x02).

bno055.GYRONLY_MODE: int

Режим без объединения данных, только гироскоп (0x03).

bno055.ACCMAG_MODE: int

Режим без объединения данных, акселерометр + магнитометр (0x04).

bno055.ACCGYRO_MODE: int

Режим без объединения данных, акселерометр + гироскоп (0x05).

bno055.MAGGYRO_MODE: int

Режим без объединения данных, магнитометр + гироскоп (0x06).

bno055.AMG_MODE: int

Режим без объединения данных, акселерометр + магнитометр + гироскоп (0x07).

bno055.IMUPLUS_MODE: int

Режим объединения IMU с использованием акселерометра + гироскопа (0x08).

bno055.COMPASS_MODE: int

Режим объединения компаса с использованием акселерометра + магнитометра (0x09).

bno055.M4G_MODE: int

Режим объединения «магнит вместо гироскопа» (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

Режим объединения 9-DOF с отключённой быстрой калибровкой магнитометра (0x0B).

bno055.NDOF_MODE: int

Режим объединения 9-DOF с включённой быстрой калибровкой магнитометра (0x0C). Это режим по умолчанию, используемый конструктором.

Размещения осей

Следующие 2-байтовые значения передаются в BNO055.axis() для переназначения системы координат устройства. Каждая константа представляет собой пару регистров (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) из технического описания BNO055 (раздел 3.4, Axis remap), предварительно закодированную для одной из восьми стандартных ориентаций размещения.

Выберите константу, выходные оси которой соответствуют тому, как чип физически смонтирован на основной печатной плате:

Константа

Выход X

Выход Y

Выход Z

Байты

Монтаж

AXIS_P0

-Yc

+Xc

+Zc

21 04

лицевой стороной вверх, повёрнут на 90° против часовой стрелки относительно P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

лицевой стороной вверх, по умолчанию согласно техническому описанию

AXIS_P2

-Xc

-Yc

+Zc

24 06

лицевой стороной вверх, повёрнут на 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

лицевой стороной вверх, повёрнут на 90° по часовой стрелке относительно P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

лицевой стороной вниз, перевёрнут вокруг X (по умолчанию для конструктора)

AXIS_P5

+Yc

+Xc

-Zc

21 01

лицевой стороной вниз, повёрнут на 90° против часовой стрелки относительно P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

лицевой стороной вниз, повёрнут на 180° относительно P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

лицевой стороной вниз, повёрнут на 90° по часовой стрелке относительно P4

Xc / Yc / Zc обозначают собственные оси чипа (как указано в техническом описании BNO055). Столбцы «Выход» — это оси, которые устройство выдаёт через BNO055.euler(), BNO055.gyro() и т. д. От P0 до P3 — это четыре поворота чипа на 90° в ориентации стороной компонентов вверх; от P4 до P7 — те же четыре поворота после переворачивания чипа на спину.

bno055.AXIS_P0: bytes

Чип лицевой стороной вверх, повёрнут на 90° против часовой стрелки относительно AXIS_P1. Выходные оси: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Чип лицевой стороной вверх в ориентации по умолчанию согласно техническому описанию BNO055. Переназначение не применяется: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Чип лицевой стороной вверх, повёрнут на 180° относительно AXIS_P1. Выходные оси: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Чип лицевой стороной вверх, повёрнут на 90° по часовой стрелке относительно AXIS_P1. Выходные оси: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Чип перевёрнут на спину (стороной компонентов вниз) относительно AXIS_P1. Выходные оси: X = +Xc, Y = -Yc, Z = -Zc. Это размещение, используемое конструктором BNO055, когда аргумент axis не указан.

bno055.AXIS_P5: bytes

Чип лицевой стороной вниз, повёрнут на 90° против часовой стрелки относительно AXIS_P4. Выходные оси: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Чип лицевой стороной вниз, повёрнут на 180° относительно AXIS_P4. Выходные оси: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Чип лицевой стороной вниз, повёрнут на 90° по часовой стрелке относительно AXIS_P4. Выходные оси: X = -Xc, Y = +Yc, Z = -Zc.