imu --- imu 感測器#

imu 模組用於讀取相機感測器下方的 IMU 感測器。

備註

IMU 感測器(以及本模組)並非在所有 OpenMV Cam 型號上都存在。

當相機板正面朝上平放在桌面上時:

  • X 指向相機感測器的右方。

  • Y 指向相機感測器的下方(朝向板子底部)。

  • Z 指向相機感測器的反方向(射入桌面)。

範例用法 -- 輪詢原始加速度計、陀螺儀與溫度:

import imu
import time

while True:
    ax, ay, az = imu.acceleration_mg()
    gx, gy, gz = imu.angular_rate_mdps()
    t = imu.temperature_c()
    print("accel (mg)  : {:8.1f} {:8.1f} {:8.1f}".format(ax, ay, az))
    print("gyro  (mdps): {:8.1f} {:8.1f} {:8.1f}".format(gx, gy, gz))
    print("temp  (degC): {:5.1f}".format(t))
    time.sleep_ms(200)

範例用法 -- 偵測相機朝哪個方向傾斜:

import imu
import time

while True:
    r = imu.roll()
    if abs(r - 90) < 15:
        print("camera rotated left")
    elif abs(r - 270) < 15:
        print("camera rotated right")
    elif abs(r - 180) < 15:
        print("camera upside down")
    else:
        print("camera upright")
    time.sleep_ms(100)

函式#

imu.acceleration_mg() → Tuple[float, float, float]#

回傳 (x, y, z) 的加速度,為以毫 g 為單位的浮點數元組。

imu.angular_rate_mdps() → Tuple[float, float, float]#

回傳 (x, y, z) 的角速率,為以毫度每秒為單位的浮點數元組。

imu.temperature_c() → float#

回傳 IMU 感測器溫度,以攝氏度為單位。

imu.roll() → float#

回傳相機模組的翻滾角,以度為單位。

  • 0 -> 相機直立。

  • 90 -> 相機向左旋轉。

  • 180 -> 相機上下顛倒。

  • 270 -> 相機向右旋轉。

imu.pitch() → float#

回傳相機模組的俯仰角,以度為單位。

  • 0 -> 相機直立。

  • 90 -> 相機朝下。

  • 180 -> 相機上下顛倒。

  • 270 -> 相機朝上。

imu.sleep(enable: bool) → None#

enable 設為 True 會使 IMU 感測器進入睡眠。False 則將其喚醒(預設值)。

imu.__write_reg(addr: int, val: int) → None#

將位於 addr 的 IMU 暫存器設為 val。

imu.__read_reg(addr: int, buf: bytearray | None = None) → int | None#

回傳位於 addr 的 IMU 暫存器值。

若提供了 buf,則改為執行連續(burst)讀取:從 addr 開始讀取 len(buf) 個位元組到該可寫入緩衝區中,並回傳 None。可用此方式在單一匯流排交易中讀取一段連續的暫存器(例如加速度計全部六個輸出位元組)。