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выбирает страницу.
- 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]чисел с плавающей запятой в градусах в секунду.
Константы¶
Режимы работы¶
- bno055.CONFIG_MODE: int¶
Режим конфигурации (
0x00). Устройство должно находиться в этом режиме для изменения регистров конфигурации.
- bno055.COMPASS_MODE: int¶
Режим объединения компаса с использованием акселерометра + магнитометра (
0x09).
Размещения осей¶
Следующие 2-байтовые значения передаются в BNO055.axis() для переназначения системы координат устройства. Каждая константа представляет собой пару регистров (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) из технического описания BNO055 (раздел 3.4, Axis remap), предварительно закодированную для одной из восьми стандартных ориентаций размещения.
Выберите константу, выходные оси которой соответствуют тому, как чип физически смонтирован на основной печатной плате:
Константа |
Выход X |
Выход Y |
Выход Z |
Байты |
Монтаж |
|---|---|---|---|---|---|
|
|
|
|
лицевой стороной вверх, повёрнут на 90° против часовой стрелки относительно P1 |
|
|
|
|
|
лицевой стороной вверх, по умолчанию согласно техническому описанию |
|
|
|
|
|
лицевой стороной вверх, повёрнут на 180° |
|
|
|
|
|
лицевой стороной вверх, повёрнут на 90° по часовой стрелке относительно P1 |
|
|
|
|
|
лицевой стороной вниз, перевёрнут вокруг X (по умолчанию для конструктора) |
|
|
|
|
|
лицевой стороной вниз, повёрнут на 90° против часовой стрелки относительно P4 |
|
|
|
|
|
лицевой стороной вниз, повёрнут на 180° относительно P4 |
|
|
|
|
|
лицевой стороной вниз, повёрнут на 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.