bno055 --- BNO055 IMU 驅動程式

本模組透過 I2C 為 Bosch BNO055 九軸絕對方位感測器提供驅動程式。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

建構函式會驗證晶片 ID、執行軟性重置、切換至正常電源、套用軸向設定,並使用外部振盪器進入要求的操作模式。若未讀回預期的 ID 暫存器值,則引發 RuntimeError

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

從指定的裝置暫存器讀取 size 個位元組,並以 bytes 物件傳回。

write_registers(register: int, data: bytes) None

register 開始,將指定的 data 位元組寫入裝置。

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

傳回從暫存器 0x00 讀取的 4 位元組 ID 區塊。預期值為 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

以 m/s^2 為單位的浮點數,傳回加速度計讀數,格式為 3 元素串列 [x, y, z]

magnetometer() list

以微特斯拉為單位的浮點數,傳回磁力計讀數,格式為 3 元素串列 [x, y, z]

gyroscope() list

以每秒度數為單位的浮點數,傳回陀螺儀讀數,格式為 3 元素串列 [x, y, z]

linear_acceleration() list

以 m/s^2 為單位的浮點數,傳回經重力補償的線性加速度,格式為 3 元素串列 [x, y, z]

gravity() list

以 m/s^2 為單位的浮點數,傳回重力向量,格式為 3 元素串列 [x, y, z]

常數

操作模式

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() 以重映射裝置座標系統。每個常數都是來自 BNO055 資料手冊(第 3.4 節,Axis remap)的 (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) 暫存器配對,已針對八種標準放置方位之一預先編碼。

請選擇其輸出軸向與晶片在主機 PCB 上實體安裝方式相符的常數:

常數

輸出 X

輸出 Y

輸出 Z

位元組

安裝方式

AXIS_P0

-Yc

+Xc

+Zc

21 04

正面朝上,自 P1 逆時針旋轉 90°

AXIS_P1

+Xc

+Yc

+Zc

24 00

正面朝上,資料手冊預設值

AXIS_P2

-Xc

-Yc

+Zc

24 06

正面朝上,旋轉 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

正面朝上,自 P1 順時針旋轉 90°

AXIS_P4

+Xc

-Yc

-Zc

24 03

正面朝下,繞 X 軸翻轉(建構函式預設值)

AXIS_P5

+Yc

+Xc

-Zc

21 01

正面朝下,自 P4 逆時針旋轉 90°

AXIS_P6

-Yc

-Xc

-Zc

21 07

正面朝下,自 P4 旋轉 180°

AXIS_P7

-Xc

+Yc

-Zc

24 05

正面朝下,自 P4 順時針旋轉 90°

XcYcZc 表示晶片的固有軸向(如 BNO055 資料手冊上所標示)。「Output」欄為裝置透過 BNO055.euler()BNO055.gyro() 等方法輸出的軸向。P0P3 是晶片在元件面朝上方位下的四種 90° 旋轉;P4P7 則是將晶片翻轉至背面後的相同四種旋轉。

bno055.AXIS_P0: bytes

晶片正面朝上,自 AXIS_P1 逆時針旋轉 90°。輸出軸向:X = -YcY = +XcZ = +Zc

bno055.AXIS_P1: bytes

晶片正面朝上,處於 BNO055 資料手冊的預設方位。不套用任何重映射:X = +XcY = +YcZ = +Zc

bno055.AXIS_P2: bytes

晶片正面朝上,自 AXIS_P1 旋轉 180°。輸出軸向:X = -XcY = -YcZ = +Zc

bno055.AXIS_P3: bytes

晶片正面朝上,自 AXIS_P1 順時針旋轉 90°。輸出軸向:X = +YcY = -XcZ = +Zc

bno055.AXIS_P4: bytes

晶片相對於 AXIS_P1 翻轉至背面(元件面朝下)。輸出軸向:X = +XcY = -YcZ = -Zc。當未提供 axis 引數時,BNO055 建構函式即採用此放置方式。

bno055.AXIS_P5: bytes

晶片正面朝下,自 AXIS_P4 逆時針旋轉 90°。輸出軸向:X = +YcY = +XcZ = -Zc

bno055.AXIS_P6: bytes

晶片正面朝下,自 AXIS_P4 旋轉 180°。輸出軸向:X = -YcY = -XcZ = -Zc

bno055.AXIS_P7: bytes

晶片正面朝下,自 AXIS_P4 順時針旋轉 90°。輸出軸向:X = -XcY = +YcZ = -Zc