bno055 --- Driver IMU BNO055

Mô-đun này cung cấp driver cho cảm biến định hướng tuyệt đối 9 trục Bosch BNO055 qua I2C. BNO055 hợp nhất dữ liệu từ gia tốc kế, từ kế và con quay hồi chuyển trên chip và cung cấp đầu ra quaternion, góc Euler, gia tốc tuyến tính và trọng lực ngoài các kênh cảm biến thô.

Ví dụ sử dụng:

import time
from machine import I2C
import bno055

bus = I2C(1)
imu = bno055.BNO055(bus)

while True:
    print(imu.euler())
    time.sleep_ms(100)

Lớp

class bno055.BNO055(bus: machine.I2C, address: int = 0x28, mode: int = NDOF_MODE, axis: bytes = AXIS_P4)

Khởi tạo một thể hiện driver BNO055.

  • bus là đối tượng bus machine.I2C đã được cấu hình, dùng để giao tiếp với cảm biến.

  • address là địa chỉ I2C 7-bit của thiết bị. Mặc định là 0x28.

  • mode là chế độ hoạt động mà thiết bị được đặt vào sau khi reset. Xem các hằng số chế độ hoạt động bên dưới. Mặc định là NDOF_MODE.

  • axis là giá trị cấu hình ánh xạ trục 2 byte. Xem các hằng số vị trí trục bên dưới. Mặc định là AXIS_P4.

Constructor xác minh ID chip, thực hiện soft reset, chuyển sang nguồn điện bình thường, áp dụng cấu hình trục, và vào chế độ hoạt động được yêu cầu bằng bộ dao động ngoài. Gây ra RuntimeError nếu không đọc lại được giá trị thanh ghi ID mong đợi.

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

Đọc size byte từ thanh ghi thiết bị đã cho và trả về chúng dưới dạng đối tượng bytes.

write_registers(register: int, data: bytes) None

Ghi các byte data đã cho vào thiết bị bắt đầu từ register.

operation_mode(mode: int = None) int

Lấy hoặc đặt thanh ghi chế độ hoạt động. Không có đối số, trả về chế độ hiện tại dưới dạng int. Với đối số mode, ghi chế độ mới vào thiết bị. Xem các hằng số chế độ hoạt động bên dưới.

system_trigger(data: int) None

Ghi data vào thanh ghi kích hoạt hệ thống (0x3F). Được dùng nội bộ để phát lệnh soft reset (0x20) và để chọn bộ dao động ngoài (0x80).

power_mode(mode: int = None) bytes

Lấy hoặc đặt thanh ghi chế độ nguồn điện. Không có đối số, trả về nội dung thanh ghi chế độ nguồn điện hiện tại. Với đối số mode, ghi chế độ nguồn điện mới vào thiết bị.

page(num: int = None) None

Lấy hoặc đặt trang thanh ghi. Không có đối số, đọc thanh ghi trang hiện tại. Với đối số num, chọn trang đó.

temperature() int

Trả về giá trị thanh ghi nhiệt độ chip dưới dạng byte không dấu.

read_id() bytes

Trả về khối ID 4 byte được đọc từ thanh ghi 0x00. Giá trị mong đợi là b'\xA0\xFB\x32\x0F'.

axis(placement: bytes = None) bytes

Lấy hoặc đặt cấu hình ánh xạ trục. Không có đối số, trả về cấu hình trục 2 byte hiện tại. Với đối số placement, ghi cấu hình trục 2 byte được cung cấp. Sử dụng một trong các hằng số AXIS_P0..AXIS_P7 bên dưới.

quaternion() list

Trả về định hướng hợp nhất dưới dạng danh sách 4 phần tử [w, x, y, z] của các số thực được chia tỷ lệ theo phạm vi quaternion đơn vị.

euler() list

Trả về định hướng hợp nhất dưới dạng danh sách 3 phần tử [yaw, roll, pitch] của các số thực tính bằng độ.

accelerometer() list

Trả về giá trị đọc từ gia tốc kế dưới dạng danh sách 3 phần tử [x, y, z] của các số thực tính bằng m/s^2.

magnetometer() list

Trả về giá trị đọc từ từ kế dưới dạng danh sách 3 phần tử [x, y, z] của các số thực tính bằng micro-Tesla.

gyroscope() list

Trả về giá trị đọc từ con quay hồi chuyển dưới dạng danh sách 3 phần tử [x, y, z] của các số thực tính bằng độ/giây.

linear_acceleration() list

Trả về gia tốc tuyến tính đã loại bỏ thành phần trọng lực dưới dạng danh sách 3 phần tử [x, y, z] của các số thực tính bằng m/s^2.

gravity() list

Trả về vectơ trọng lực dưới dạng danh sách 3 phần tử [x, y, z] của các số thực tính bằng m/s^2.

Hằng số

Chế độ hoạt động

bno055.CONFIG_MODE: int

Chế độ cấu hình (0x00). Thiết bị phải ở chế độ này để thay đổi các thanh ghi cấu hình.

bno055.ACCONLY_MODE: int

Chế độ không hợp nhất chỉ dùng gia tốc kế (0x01).

bno055.MAGONLY_MODE: int

Chế độ không hợp nhất chỉ dùng từ kế (0x02).

bno055.GYRONLY_MODE: int

Chế độ không hợp nhất chỉ dùng con quay hồi chuyển (0x03).

bno055.ACCMAG_MODE: int

Chế độ không hợp nhất dùng gia tốc kế + từ kế (0x04).

bno055.ACCGYRO_MODE: int

Chế độ không hợp nhất dùng gia tốc kế + con quay hồi chuyển (0x05).

bno055.MAGGYRO_MODE: int

Chế độ không hợp nhất dùng từ kế + con quay hồi chuyển (0x06).

bno055.AMG_MODE: int

Chế độ không hợp nhất dùng gia tốc kế + từ kế + con quay hồi chuyển (0x07).

bno055.IMUPLUS_MODE: int

Chế độ hợp nhất IMU dùng gia tốc kế + con quay hồi chuyển (0x08).

bno055.COMPASS_MODE: int

Chế độ hợp nhất la bàn dùng gia tốc kế + từ kế (0x09).

bno055.M4G_MODE: int

Chế độ hợp nhất từ kế thay con quay hồi chuyển (0x0A).

bno055.NDOF_FMC_OFF_MODE: int

Chế độ hợp nhất 9-DOF với hiệu chỉnh nhanh từ kế bị tắt (0x0B).

bno055.NDOF_MODE: int

Chế độ hợp nhất 9-DOF với hiệu chỉnh nhanh từ kế được bật (0x0C). Đây là chế độ mặc định được sử dụng bởi constructor.

Vị trí trục

Các giá trị 2 byte sau đây được truyền cho BNO055.axis() để ánh xạ lại hệ tọa độ của thiết bị. Mỗi hằng số là cặp thanh ghi (AXIS_MAP_CONFIG, AXIS_MAP_SIGN) từ datasheet BNO055 (Mục 3.4, Axis remap), đã được mã hóa trước cho một trong tám hướng đặt tiêu chuẩn.

Chọn hằng số có trục đầu ra khớp với cách chip được gắn vật lý trên PCB chủ:

Hằng số

Đầu ra X

Đầu ra Y

Đầu ra Z

Byte

Cách đặt

AXIS_P0

-Yc

+Xc

+Zc

21 04

mặt trên, xoay 90° ngược chiều kim đồng hồ so với P1

AXIS_P1

+Xc

+Yc

+Zc

24 00

mặt trên, hướng mặc định theo datasheet

AXIS_P2

-Xc

-Yc

+Zc

24 06

mặt trên, xoay 180°

AXIS_P3

+Yc

-Xc

+Zc

21 02

mặt trên, xoay 90° theo chiều kim đồng hồ so với P1

AXIS_P4

+Xc

-Yc

-Zc

24 03

mặt dưới, lật theo trục X (mặc định của constructor)

AXIS_P5

+Yc

+Xc

-Zc

21 01

mặt dưới, xoay 90° ngược chiều kim đồng hồ so với P4

AXIS_P6

-Yc

-Xc

-Zc

21 07

mặt dưới, xoay 180° so với P4

AXIS_P7

-Xc

+Yc

-Zc

24 05

mặt dưới, xoay 90° theo chiều kim đồng hồ so với P4

Xc / Yc / Zc biểu thị các trục nội tại của chip (như được in trong datasheet BNO055). Các cột "Đầu ra" là các trục mà thiết bị cung cấp qua BNO055.euler(), BNO055.gyro(), v.v. P0 đến P3 là bốn góc xoay 90° của chip ở hướng mặt linh kiện lên trên; P4 đến P7 là bốn góc xoay tương tự sau khi lật chip xuống mặt dưới.

bno055.AXIS_P0: bytes

Chip mặt trên, xoay 90° ngược chiều kim đồng hồ so với AXIS_P1. Các trục đầu ra: X = -Yc, Y = +Xc, Z = +Zc.

bno055.AXIS_P1: bytes

Chip mặt trên theo hướng mặc định của datasheet BNO055. Không áp dụng ánh xạ lại: X = +Xc, Y = +Yc, Z = +Zc.

bno055.AXIS_P2: bytes

Chip mặt trên, xoay 180° so với AXIS_P1. Các trục đầu ra: X = -Xc, Y = -Yc, Z = +Zc.

bno055.AXIS_P3: bytes

Chip mặt trên, xoay 90° theo chiều kim đồng hồ so với AXIS_P1. Các trục đầu ra: X = +Yc, Y = -Xc, Z = +Zc.

bno055.AXIS_P4: bytes

Chip lật mặt xuống dưới (mặt linh kiện hướng xuống) so với AXIS_P1. Các trục đầu ra: X = +Xc, Y = -Yc, Z = -Zc. Đây là vị trí đặt được sử dụng bởi constructor BNO055 khi không cung cấp đối số axis.

bno055.AXIS_P5: bytes

Chip mặt dưới, xoay 90° ngược chiều kim đồng hồ so với AXIS_P4. Các trục đầu ra: X = +Yc, Y = +Xc, Z = -Zc.

bno055.AXIS_P6: bytes

Chip mặt dưới, xoay 180° so với AXIS_P4. Các trục đầu ra: X = -Yc, Y = -Xc, Z = -Zc.

bno055.AXIS_P7: bytes

Chip mặt dưới, xoay 90° theo chiều kim đồng hồ so với AXIS_P4. Các trục đầu ra: X = -Xc, Y = +Yc, Z = -Zc.