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.
buslà đối tượng busmachine.I2Cđã được cấu hình, dùng để giao tiếp với cảm biến.addresslà địa chỉ I2C 7-bit của thiết bị. Mặc định là0x28.modelà 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.axislà 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
RuntimeErrornếu không đọc lại được giá trị thanh ghi ID mong đợi.- read_registers(register: int, size: int = 1) bytes¶
Đọc
sizebyte từ thanh ghi thiết bị đã cho và trả về chúng dưới dạng đối tượngbytes.
- 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
datavà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 đó.
- 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_P7bê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.
Hằng số¶
Chế độ hoạt động¶
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 |
|---|---|---|---|---|---|
|
|
|
|
mặt trên, xoay 90° ngược chiều kim đồng hồ so với P1 |
|
|
|
|
|
mặt trên, hướng mặc định theo datasheet |
|
|
|
|
|
mặt trên, xoay 180° |
|
|
|
|
|
mặt trên, xoay 90° theo chiều kim đồng hồ so với P1 |
|
|
|
|
|
mặt dưới, lật theo trục X (mặc định của constructor) |
|
|
|
|
|
mặt dưới, xoay 90° ngược chiều kim đồng hồ so với P4 |
|
|
|
|
|
mặt dưới, xoay 180° so với P4 |
|
|
|
|
|
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 constructorBNO055khi 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.