bno055 --- BNO055 IMU ドライバ

このモジュールは、I2C 経由で Bosch BNO055 9 軸絶対方位センサーを使用するためのドライバを提供します。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

指定された data バイトを、register から始まる位置にデバイスへ書き込みます。

operation_mode(mode: int = None) int

動作モードレジスタを取得または設定します。引数がない場合は、現在のモードを int として返します。mode 引数を指定すると、新しいモードをデバイスに書き込みます。以下の動作モード定数を参照してください。

system_trigger(data: int) None

システムトリガレジスタ(0x3F)に data を書き込みます。これは、ソフトリセット(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) レジスタペアであり、8 つの標準配置方位のいずれかに対してあらかじめエンコードされています。

チップがホスト 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° 回転

Xc / Yc / Zc はチップの固有の軸を表します(BNO055 データシートに記載されているとおり)。「出力」列は、デバイスが BNO055.euler()BNO055.gyro() などを介して提供する軸です。P0 から P3 は、部品面を上にした方位におけるチップの 4 つの 90° 回転です。P4 から P7 は、チップを背面に裏返した後の同じ 4 つの回転です。

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