imu --- 用于 Arduino Nano 33 BLE Sense 的 IMU 辅助模块

备注

本页面记录的是 Arduino Nano 33 BLE Sense 的 Python imu 模块(对板载 IMU 驱动的一个小型封装)。关于在 OPENMV_N6、OPENMV_RT1060 和 OPENMV_AE3 摄像头主板上提供的 OpenMV C 层 imu 模块,请参阅 imu --- imu 传感器

本模块是一个针对特定主板的轻量封装,它将 Arduino Nano 33 BLE Sense 的板载惯性测量单元(IMU)以单个 IMU 对象的形式暴露出来。该主板的两个硬件版本均可被透明地处理:

  • Rev 1 使用单个 LSM9DS1 9 轴 IMU。

  • Rev 2 将 Bosch BMI270(加速度计 + 陀螺仪)与 Bosch BMM150 磁力计组合在一起。

构造函数会在 I2C 总线上探测 BMI270 地址(0x68)并自动选择匹配的驱动,因此用户代码只需编写一次即可在任一版本上运行。

示例:

import time
import imu
from machine import Pin, I2C

bus = I2C(1, scl=Pin("P15"), sda=Pin("P14"))
sensor = imu.IMU(bus)

while True:
    print('Accelerometer: x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*sensor.accel()))
    print('Gyroscope:     x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*sensor.gyro()))
    print('Magnetometer:  x:{:>8.3f} y:{:>8.3f} z:{:>8.3f}'.format(*sensor.magnet()))
    print("")
    time.sleep_ms(100)

class IMU

class imu.IMU(bus: 'machine.I2C')

构造一个绑定到 I2C 总线的 IMU 对象。

  • bus 是一个已初始化的 machine.I2C 实例,连接到板载 IMU。

构造时会扫描总线:如果地址 0x68 处有设备响应,则实例化一对 BMI270BMM150(Nano 33 BLE Sense Rev 2),否则实例化一个 LSM9DS1(Rev 1)。底层驱动保存在 imu 属性上,并以默认量程和输出数据速率进行配置。

accel() tuple[float, float, float]

g(标准重力)为单位返回最新的加速度计读数,形式为 (x, y, z) 元组。

gyro() tuple[float, float, float]

以度每秒为单位返回最新的陀螺仪读数,形式为 (x, y, z) 元组。

magnet() tuple[float, float, float]

以微特斯拉(uT)为单位返回最新的磁力计读数,形式为 (x, y, z) 元组。