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, якщо очікувані значення регістрів ідентифікаторів не зчитуються назад.- 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-байтовий блок ідентифікатора, зчитаний із регістру
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]чисел з плаваючою точкою в м/с².
- magnetometer() list¶
Повертає показання магнітометра як 3-елементний список
[x, y, z]чисел з плаваючою точкою в мікротеслах.
- gyroscope() list¶
Повертає показання гіроскопа як 3-елементний список
[x, y, z]чисел з плаваючою точкою в градусах за секунду.
Константи¶
Режими роботи¶
- bno055.CONFIG_MODE: int¶
Режим конфігурації (
0x00). Для зміни регістрів конфігурації пристрій має перебувати в цьому режимі.
Розміщення осей¶
Наступні 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.