imu — sensor imu#

O módulo imu é usado para ler o sensor IMU localizado sob o sensor da câmera.

Nota

O sensor IMU (e este módulo) não está presente em todos os modelos de OpenMV Cam.

Para quando a placa da câmera está deitada sobre uma mesa, com a face para cima:

  • X aponta para a direita do sensor da câmera.

  • Y aponta para baixo do sensor da câmera (em direção à parte inferior da placa).

  • Z aponta na direção oposta à do sensor da câmera (para dentro da mesa).

Exemplo de uso – ler o acelerômetro, o giroscópio e a temperatura brutos:

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)

Exemplo de uso – detectar para que lado a câmera está inclinada:

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)

Funções#

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

Retorna a aceleração para (x, y, z) como uma tupla de floats em mili-g’s.

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

Retorna a taxa angular para (x, y, z) como uma tupla de floats em mili-graus por segundo.

imu.temperature_c() → float#

Retorna a temperatura do sensor IMU em graus Celsius.

imu.roll() → float#

Retorna o ângulo de rolagem (roll) do módulo da câmera em graus.

  • 0 -> A câmera está em pé.

  • 90 -> A câmera está rotacionada para a esquerda.

  • 180 -> A câmera está de cabeça para baixo.

  • 270 -> A câmera está rotacionada para a direita.

imu.pitch() → float#

Retorna o ângulo de arfagem (pitch) do módulo da câmera em graus.

  • 0 -> A câmera está em pé.

  • 90 -> A câmera está apontando para baixo.

  • 180 -> A câmera está de cabeça para baixo.

  • 270 -> A câmera está apontando para cima.

imu.sleep(enable: bool) → None#

enable definido como True coloca o sensor IMU em modo de suspensão. False o reativa (o padrão).

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

Define o registrador IMU em addr com val.

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

Retorna o valor do registrador IMU em addr.

Se buf for fornecido, realiza uma leitura em rajada (burst) em vez disso: len(buf) bytes são lidos a partir de addr para o buffer gravável e None é retornado. Use isto para ler um bloco de registradores consecutivos (por exemplo, todos os seis bytes de saída do acelerômetro) em uma única transação de barramento.