v5.0.0

v5.0.0 là một bản phát hành lớn. Những điểm nổi bật: liên kết máy chủ OpenMV Protocol V2 được xây dựng lại, API camera csi dựa trên lớp mở rộng cho các bo mạch đa camera, mục tiêu simulator có thể chạy được, ước lượng tư thế đơn MoveNet, MicroPython 1.28, và nhiều bản sửa lỗi camera, ML, và ToF. Bản này cũng có một số thay đổi API không tương thích ngược — mọi thay đổi hiển thị với người dùng kể từ v4.8.1 được liệt kê bên dưới, cùng với hướng dẫn di chuyển chi tiết.

Điểm nổi bật

  • OpenMV Protocol V2. Liên kết máy chủ/IDE được xây dựng lại từ đầu: có khung, có thứ tự, kiểm tra CRC, với các kênh ghép kênh cho stdio, xem trước luồng, và dữ liệu người dùng. Một module protocol mới cho phép các tập lệnh tạo transport và kênh dữ liệu riêng. Xem các thay đổi module protocol.

  • API camera csi dựa trên lớp. import sensor trở thành import csi / csi.CSI, với hỗ trợ đa camera gốc. Xem hướng dẫn di chuyển csi.

  • Mục tiêu Simulator. Firmware hiện xây dựng và chạy trong simulator Arm FVP / QEMU (MPS2/MPS3), bao gồm giả lập NPU, ROMFS, và PSRAM — các tập lệnh thị giác và ML có thể chạy mà không cần phần cứng.

  • Ước lượng tư thế MoveNet. Bộ xử lý hậu kỳ MoveNet mới cùng với mô hình movenet_singlepose_192.tflite đi kèm trên OpenMV AE3 và N6.

  • MicroPython 1.28ulab 6.12.0, công cụ ST Edge AI 4.0, và OpenMV SDK được tách ra ngoài (xem các thay đổi build / tooling).

Tính năng mới

  • Module protocol tạo transport và kênh dữ liệu tùy chỉnh từ Python: protocol.init(), protocol.register(), protocol.is_active(), và một lớp protocol.ProtocolChannel với send_event(), cùng các hằng số CHANNEL_FLAG_*CHANNEL_ID_*. Chữ ký protocol.init() cuối cùng được ghi lại trong các thay đổi module protocol.

  • protocol.CBORChannel — một gói mở rộng protocol đóng băng, tuần tự hóa các trường có tên sang CBOR với các widget hiển thị (nhãn, độ sâu) và điều khiển tương tác (toggle, slider, select).

  • Kiểm tra bộ nhớ và luồng máy chủ — lệnh protocol SYS_MEMORY mới hiển thị số liệu thống kê bộ nhớ runtime theo từng pool cho IDE, và ioctl luồng STREAM_SOURCE mới cho phép máy chủ chọn camera nào cấp nguồn cho xem trước trên các bo mạch đa camera (phiên bản protocol 1.0.1).

  • Streaming đa cameracsi.CSI nhận đối số stream= chọn cảm biến nào cấp nguồn cho xem trước IDE; tiêu đề khung hình luồng hiện mang FPS được làm mịn bằng EMA để IDE hiển thị tốc độ khung hình mà không cần soạn code clock.fps(). Xem hướng dẫn di chuyển csicác cập nhật csi.

  • Cảm biến sự kiện GenX320 — bộ lọc Spatio-Temporal Contrast mới (csi.IOCTL_GENX320_SET_STC với các chế độ csi.GENX320_STC_DISABLE, csi.GENX320_STC_ONLY, csi.GENX320_STC_TRAIL_ONLY, và csi.GENX320_STC_TRAIL) và đọc sự kiện thô (csi.IOCTL_GENX320_READ_EVENTS_RAW), cùng với các tập lệnh ví dụ mới.

  • MoveNet — bộ xử lý hậu kỳ tư thế đơn MediaPipe mới (kwargs threshold, nms_threshold, nms_sigma) trả về ((x, y, w, h), score, keypoints) với mảng điểm đặc trưng COCO 17 khớp; mô hình movenet_singlepose_192.tflite và ví dụ được đóng gói trên AE3 và N6.

  • ml.utils.draw_predictions() — đối số scores= tùy chọn mới thêm độ tin cậy theo nhãn, phông chữ và nét vẽ hộp hiện tự động điều chỉnh theo chiều rộng ảnh, và chế độ format="point" mới vẽ điểm trung tâm cho bộ phát hiện điểm trung tâm/đỉnh.

  • Lớp display.TVDisplay mới (với ioctl() chung) thay thế module tv độc lập. Xem các thay đổi module display.

  • Bộ phát hiện find_line_segments() mới (ED-Lines) — hiện có trên tất cả các bản build, với đối số threshold= mới. Xem các thay đổi module image.

Các thay đổi và cải tiến khác

  • MicroPython được cập nhật lên 1.28.0 từ cơ sở v4.8.1. Thêm chế độ thẻ SD tốc độ cao trên H5/H7/N6, clocking AHB5 ở chế độ công suất thấp, và các chân JTAG có thể điều khiển như GPIO trên OPENMV_AE3.

  • ulab được cập nhật lên 6.12.0 — toán tử % gốc trên ndarray (helper ml.utils.mod() bị xóa; xem các thay đổi thư viện ML).

  • Công cụ ST Edge AI được cập nhật lên 4.0 — ảnh hưởng đến biên dịch và triển khai mô hình ST trên thiết bị.

  • ml.Model — đối số từ khóa load_to_fb đã bị xóa; bộ nhớ mô hình được xử lý tự động bởi bộ cấp phát thống nhất.

  • image.Image.scale() tại chỗ — việc phóng to ảnh tại chỗ (ví dụ img.scale(x_scale=2.0, y_scale=2.0)) hiện mở rộng bộ đệm khung hình thay vì thất bại.

  • Bộ đệm stdio lớn hơn — bộ đệm văn bản mặc định đến IDE tăng từ 512 lên 1024 byte trên OpenMV 2/3/4, Nicla Vision, AE3, và N6, vì vậy các lần print() lớn hơn không bị cắt ngắn.

  • Luồng sự kiện máy chủ mượt mà hơn — các sự kiện NOTIFY stdout đến máy chủ được giới hạn tối đa một lần mỗi lần đọc máy chủ thay vì một lần mỗi lần print() vượt qua ngưỡng ring buffer.

  • Các thao tác dài có thể ngắt — các vòng lặp chờ vẽ ảnh dài, GPU (Nema/Dave2D), và NPU hiện phục vụ sự kiện trên một khoảng thời gian xác định, vì vậy các tập lệnh vẫn phản hồi nút Dừng IDE trong quá trình làm việc nặng.

Sửa lỗi

Camera và cảm biến:

  • find_apriltags() không còn làm hỏng kết quả trên các bo mạch D-cache/GPU (N6, AE3), và hiện hoạt động trên AE3.

  • Đã sửa đầu ra ảnh Bayer từ STM32 N6 ISP sau khi chuyển đổi định dạng điểm ảnh.

  • Đã sửa hiện tượng bão hòa cân bằng trắng tự động màu xanh lá trong cảnh sáng và trường hợp AWB-stats khung hình đầu chưa khởi tạo; tăng ngưỡng gamma ISP STM32 (32 lên 63) để có phạm vi gamma/độ tương phản/độ sáng rộng hơn.

  • Tự động phơi sáng PS5520 không còn dao động trong ánh sáng mạnh; hành vi AEC/AGC của PAG7936 đã được làm lại (điều khiển kết hợp, trần độ khuếch đại được sửa).

  • Đã khôi phục tải firmware autofocus OV5640 trên Portenta/Nicla (sửa lỗi MIMXRT I2C SUSPEND).

  • Đã sửa deadlock chụp ảnh camera khi giới hạn tốc độ khung hình kết hợp với chụp JPEG (STM32).

  • Các lần đọc csi.IOCTL_GENX320_READ_EVENTS_RAW của GenX320 không còn làm rối xem trước IDE.

  • FLIR Lepton csi.IOCTL_LEPTON_SET_MODE qua csi.CSI.ioctl() hiện hoạt động khi được gọi với một đối số duy nhất.

Xử lý ảnh:

  • Đã sửa pha trộn alpha draw_image() / blend() khi cung cấp mặt nạ.

  • Đã sửa thứ tự bit mã hóa/giải mã PNG 1-bit (BINARY) và giải mã thang xám từ 1-bit.

  • Đã sửa metadata thời lượng/FPS ghi âm mjpeg.Mjpeg.

  • Đã sửa tràn ngăn xếp giải mã JPEG bằng phần mềm trên các bo mạch ngăn xếp nhỏ (OpenMV M7).

  • Đã sửa tự động phát hiện định dạng tệp JPEG/PNG trên các máy chủ không phải ARM (simulator).

Time-of-Flight:

ML và hệ thống:

  • NPU được dọn dẹp đúng cách khi suy luận bị ngắt trên N6.

  • Khôi phục wakeup deep-sleep / standby trên N6; lỗi treo khi nhảy đến bootloader trên AE3 đã được sửa.

  • Đã sửa rò rỉ bộ nhớ khi soft-reset (STM32 Nema GPU) và bộ đệm khung hình phụ bị thu hồi sớm.

  • Các kênh protocol Python tùy chỉnh hiện tồn tại sau khi khởi động lại mềm, transport USB phục hồi từ bus reset / endpoint bị stall, và lỗi tràn ngắt USB SOF đã được sửa.

Phần cứng và hỗ trợ bo mạch

  • OpenMV N6 — Ethernet được kích hoạt (mạng có dây); NPU AXI SRAM (1,75 MB) được gộp vào pool thoáng dùng chung để có nhiều RAM hơn giữa các lần suy luận; wakeup deep-sleep/standby; các mô hình TFLite và Haar cascade đi kèm trong ROMFS.

  • OpenMV AE3 — các mô hình và cascade đi kèm trong ROMFS; cbor2 được đóng băng vào firmware.

  • Alif (AE3, N6) — wakeup machine.RTC công suất thấp.

  • AprilTags độ phân giải caofind_apriltags() ở toàn độ phân giải cảm biến trên AE3, Arduino Giga, và Arduino Portenta H7.

  • Mục tiêu Simulator — MPS2_AN500 / MPS3_AN547 (Arm FVP / QEMU), với giả lập NPU, ROMFS, và PSRAM.

Thay đổi API không tương thích ngược

Các thay đổi API hiển thị với người dùng giữa v4.8.1 và v5.0.0. Phạm vi: C-module Python trong modules/ và thư viện Python trong scripts/libraries/.

Mỗi thay đổi được gắn nhãn theo mức độ tác động:

  • major — hầu hết các tập lệnh cần chỉnh sửa.

  • minor — API hẹp; chỉ ảnh hưởng đến các tập lệnh đã sử dụng nó.

  • behavior — cùng API, kết quả khác nhau; hãy kiểm tra lại các tập lệnh đã tinh chỉnh.

  • tooling — chỉ ảnh hưởng đến việc build từ nguồn / fork downstream.

Các thay đổi được nhóm theo mức độ tác động theo thứ tự đó — major trước, sau đó minor, behavior, và tooling. Nếu bạn chỉ muốn chuyển đổi code, hãy chuyển đến danh sách kiểm tra di chuyển ở cuối để có danh sách to-do ngắn gọn. Mỗi hash commit liên kết đến diff của nó trên GitHub.

sensor được thay thế bởi csi (major)

Mọi ví dụ chính thức đã được viết lại để bỏ import sensor thay bằng import csi. API chức năng cấp module cũ (sensor.reset(), sensor.set_pixformat(), ...) được thay thế bởi API csi.CSI dựa trên lớp, mở rộng tự nhiên cho các bo mạch có nhiều camera (csi0, csi1, ...) và được yêu cầu cho tất cả các tính năng mới (kwarg stream=, streaming đa cảm biến, ...).

Qstr sensor vẫn được kết nối trong modules/py_csi.c cho các bản build firmware tương thích ngược, nhưng nó sẽ không có tính năng mới, và tất cả ví dụ, tài liệu và code thư viện hiện giả định csi.

Commits: 945c5853c, 61f835b7e

Module sang lớp

Trước (sensor):

import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)
img = sensor.snapshot()

Sau (csi):

import csi
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)
img = csi0.snapshot()

Các cặp setter/getter được gộp thành accessor kết hợp

Trong API mới, một phương thức được gọi không có đối số trả về giá trị hiện tại; được gọi với một giá trị thì đặt giá trị đó. Tiền tố set_*/get_* đã biến mất. Tên phương thức cũng mất hậu tố ing ở những chỗ thừa (windowingwindow). Cột API mới liên kết đến tài liệu tham chiếu.

sensor (cũ)

csi.CSI (mới)

set_pixformat(fmt) / get_pixformat()

pixformat([fmt])

set_framesize(sz) / get_framesize()

framesize([sz])

set_framerate(fps) / get_framerate()

framerate([fps])

set_windowing(roi) / get_windowing()

window([roi])

set_framebuffers(n) / get_framebuffers()

framebuffers([n])

set_gainceiling(g)

gainceiling([g])

set_brightness(v)

brightness([v])

set_contrast(v)

contrast([v])

set_saturation(v)

saturation([v])

set_quality(v)

quality([v])

set_colorbar(b)

colorbar([b])

set_special_effect(e)

special_effect([e])

set_lens_correction(...)

lens_correction(...)

set_hmirror(b) / get_hmirror()

hmirror([b])

set_vflip(b) / get_vflip()

vflip([b])

set_transpose(b) / get_transpose()

transpose([b])

set_auto_rotation(b) / get_auto_rotation()

auto_rotation([b])

set_auto_gain(b, [db, ceiling]) / get_gain_db()

auto_gain(...) / gain_db()

set_auto_exposure(b, [us]) / get_exposure_us()

auto_exposure(...) / exposure_us()

set_auto_whitebal(b, [rgb]) / get_rgb_gain_db()

auto_whitebal(...) / rgb_gain_db()

set_auto_blc(b, [regs]) / get_blc_regs()

auto_blc(...) / blc_regs()

set_color_palette(p) / get_color_palette()

color_palette([p])

set_frame_callback(cb)

frame_callback(cb)

set_vsync_callback(cb)

vsync_callback(cb)

get_id()

cid()

Các hàm không có tương đương trực tiếp

sensor (đã xóa)

Thay thế bằng gì

sensor.alloc_extra_fb(w, h, pixfmt) / sensor.dealloc_extra_fb()

image.Image (w, h, pixfmt) — một ảnh được cấp phát heap thông thường. Bộ đệm khung hình không còn bị cắt nhỏ cho bộ đệm người dùng.

sensor.skip_frames(time=..., frames=...)

csi.CSI.snapshot() — skip-frames được gộp vào snapshot qua các đối số time= / frames= của nó.

sensor.disable_delays(...) / sensor.disable_full_flush(...)

Đã chuyển vào hàm khởi tạo csi.CSI: csi.CSI(delays=False) / csi.CSI(fflush=False).

sensor.get_frame_available()

csi.CSI.readable()

sensor.get_fb()

Đã xóa. Ảnh được trả về bởi csi.CSI.snapshot() là handle chuẩn.

sensor.set_framebuffers(n, expand=True)

csi.CSI.framebuffers() — đối số expand đã bị xóa (xem các cập nhật csi).

Mới trên csi.CSI

  • csi.CSI(stream=True|False) — bộ chọn tại thời điểm khởi tạo chọn CSI nào cấp nguồn cho bộ đệm khung hình xem trước (thay thế kwarg update= theo từng ảnh chụp, xem các cập nhật csi).

  • csi.CSI(cid=N) / csi.devices() — hỗ trợ đa CSI cho các bo mạch có nhiều hơn một cảm biến ảnh.

Module image — cải tổ chữ ký (major)

Module image có thay đổi API rộng nhất sau csi — chữ ký vẽ, đối tượng kết quả, và một số bộ phát hiện đều thay đổi.

Đối số tọa độ phải là tuple

modules/py_image.c đã được viết lại trên đầu mp_arg_parse_all. Tất cả các phương thức vẽ / điểm ảnh trước đây nhận các đối số vị trí x, y, ... riêng biệt giờ yêu cầu các tọa độ đó được đóng gói vào một tuple duy nhất.

Commits: d18bbc472, 0c60c94b9 (PR #3061)

Trước

Sau

img.draw_arrow(x0, y0, x1, y1, color=...)

img.draw_arrow((x0, y0, x1, y1), color=...)

img.draw_line(x0, y0, x1, y1, ...)

img.draw_line((x0, y0, x1, y1), ...)

img.draw_cross(x, y, ...)

img.draw_cross((x, y), ...)

img.draw_circle(x, y, r, ...)

img.draw_circle((x, y, r), ...)

img.draw_rectangle(x, y, w, h, ...)

img.draw_rectangle((x, y, w, h), ...)

img.draw_string(x, y, "txt", ...)

img.draw_string((x, y), "txt", ...)

img.draw_ellipse(x, y, rx, ry, rot, ...)

img.draw_ellipse((x, y, rx, ry, rot), ...)

img.flood_fill(x, y, ...)

img.flood_fill((x, y), ...)

img.get_pixel(x, y, rgbtuple=...)

img.get_pixel((x, y), rgbtuple=...)

img.set_pixel(x, y, color)

img.set_pixel((x, y), color)

Tất cả đều là phương thức của image.Image.

Các đối tượng kết quả được chuyển thành attrtuple

Các kiểu này hiện là đối tượng attrtuple MicroPython: similarity, statistics, percentile, threshold, line, circle, rect, qrcode, apriltag, datamatrix, barcode, displacement, kptmatch. Truy cập thuộc tính không có dấu ngoặc đơn hiện là dạng chuẩn.

Commit: 3399d302e

Trước (theo kiểu phương thức):

img.draw_cross(match.cx(), match.cy())
img.draw_rectangle(blob.rect())

Sau (theo kiểu thuộc tính):

img.draw_cross((match.cx, match.cy))
img.draw_rectangle(blob.rect)

blobhistogram không thay đổi — chúng giữ các kiểu hiện có và accessor () (attrtuple không thể biểu đạt các giá trị tính toán trễ của blob hoặc các accessor nhận đối số của histogram).

Đổi tên tham số haar của find_features

image.Image.find_features()scale_factor= đã được đổi tên thành scale=.

Commit: be4c5cd73

get_regression — luôn robust, thêm target_size

image.Image.get_regression() hiện luôn sử dụng hồi quy robust (Theil-Sen). Đường dẫn bình phương tối thiểu nhanh cũ đã bị xóa, vì vậy từ khóa robust= đã biến mất — những gì trước đây yêu cầu robust=True giờ là hành vi duy nhất. Kwarg target_size=(w, h) mới (mặc định (80, 60)) thu nhỏ ROI theo diện tích trước khi thực hiện Theil-Sen O(N^2) để nó luôn chạy trên kích thước ảnh hợp lý; các điểm cuối đường thẳng được ánh xạ trở lại tọa độ gốc. Ví dụ linear_regression_robust.py đã bị xóa và linear_regression_fast.py được đổi tên thành linear_regression.py.

Commits: c7c2e69a0, 0ff2afa72

find_line_segments — thuật toán mới

image.Image.find_line_segments() — bộ phát hiện LSD cũ được thay thế bằng ED-Lines, và có thêm kwarg threshold=50 mới. Đầu ra của các tập lệnh đã tinh chỉnh trước đó sẽ khác nhau.

Commits: 87da2a7b7, 2c47b5735

Thư viện AprilTag được thay thế

image.Image.find_apriltags() — bộ phát hiện AprilTag đã được thay thế bằng một triển khai mới. Bộ family đã thay đổi:

Commit: e813bada7

Cập nhật module csi (minor)

Các cập nhật csi nhỏ hơn trên đầu hướng dẫn di chuyển csi.

snapshot(update=...) đã bị xóa

Kwarg update trên csi.CSI.snapshot() đã biến mất. Để giữ thiết bị CSI không cấp nguồn cho bộ đệm khung hình xem trước, hãy từ chối tại thời điểm khởi tạo:

csi0 = csi.CSI(stream=False)                  # was: csi0.snapshot(update=False)
csi1.snapshot(blocking=False, image=fir_img)  # was: ...(update=False, ...)

Commits: 9a8077827, 26b79a2c5

Đối số expand của framebuffers() đã bị xóa

csi.CSI.framebuffers() — đối số vị trí thứ ba (expand) đã biến mất; chữ ký hiện là framebuffers([count]).

Commit: 86cb3a5de

Module protocol (minor)

Chỉ ảnh hưởng đến các tập lệnh điều khiển liên kết máy chủ trực tiếp. Xem protocol.

timer_ms được đổi tên thành poll_ms

protocol.init() — đối số timer_ms đã được đổi tên thành poll_ms.

protocol.init(..., poll_ms=10)   # was: timer_ms=10

Commits: 8a0635e8c, 95a290607

protocol.poll() đã bị xóa

Tác vụ protocol hiện được lên lịch nội bộ. Các lời gọi đến protocol.poll() sẽ raise AttributeError.

Commit: 8a0635e8c

Đối số config soft_reboot đã bị xóa

protocol.init() — đối số soft_reboot đã biến mất. Tất cả transport hiện tại chịu được soft-reboot, vì vậy hành vi hiện là vô điều kiện.

Commit: 0bf766aa2

Module display (minor)

Đầu ra TV hiện đi qua đối tượng display.TVDisplay thay vì module tv độc lập. display cũng có thêm ioctl() chung.

Commits: f0accb389, 1a5a87121, 920c097a0, 9eac55098

Module tof (behavior)

API như cũ; các giá trị mặc định và xử lý lỗi đã thay đổi. Xem tof.

Thay đổi thời gian chờ mặc định

tof.read_depth()tof.snapshot() (được gọi với timeout=-1) hiện mặc định là 100 ms thay vì chờ vô thời hạn. Truyền một giá trị lớn hơn rõ ràng nếu bạn cần hành vi cũ.

Commit: b6772b80d

Tự động phục hồi

Driver hiện hard-reset bus I2C và cảm biến khi có lỗi đo/timeout. Các ví dụ không còn gọi tof.reset() trong trình xử lý ngoại lệ — code người dùng thực hiện phục hồi thủ công nên xóa nó đi (nó sẽ xung đột với tính năng tự phục hồi mới).

Commits: b6772b80d, 80ffaa5c3

Thư viện ML (behavior)

API như cũ, kết quả số khác — hãy kiểm tra lại bất kỳ pipeline ML nào đã tinh chỉnh.

Tiền xử lý hiện kéo dài thay vì letterbox

Normalization hiện sử dụng image.SCALE_ASPECT_IGNORE (kéo dài) thay vì image.SCALE_ASPECT_EXPAND (letterbox). Hậu xử lý NMS cũng chuyển sang tỷ lệ x/y độc lập.

Ghi chú

Tác động. Các bộ phát hiện kiểu YOLO và bộ hồi quy điểm đặc trưng thường được cải thiện. Các ví dụ BlazeFace, BlazePalm, FaceLandmarks, và HandLandmarks hiện yêu cầu crop vuông thủ công trên ROI đầu vào — các tập lệnh ví dụ đã được cập nhật; code người dùng tùy chỉnh phải làm tương tự.

Commit: 68dc29a33

Helper ml.utils.mod() đã bị xóa

ulab 6.12.0 hỗ trợ % trên ndarray natively. Code đã import mod từ ml.utils phải sử dụng a % b.

Commits: 35ece5728, 82fbd858c

Build / tooling (tooling)

Điều này không ảnh hưởng đến các tập lệnh MicroPython. Việc build firmware từ nguồn hiện yêu cầu OpenMV SDK bên ngoài (1.6.0, trước đây nằm trong cây). Một số công cụ build trong cây đã bị xóa và N6 chuyển sang stack TinyUSB; các fork downstream nên xem lại lịch sử firmware repository — đặc biệt là chữ ký file_open() bỏ đối số buffered.

Danh sách kiểm tra di chuyển

Để chuyển đổi sạch sang v5.0.0, công việc thông thường là:

  1. Thay import sensor bằng import csi; csi0 = csi.CSI() và dịch mọi lời gọi set_*/get_* sang accessor csi.CSI tương ứng (hướng dẫn di chuyển csi).

  2. Đóng gói các đối số tọa độ cho img.draw_*, get_pixel(), và set_pixel() vào tuple (các thay đổi module image).

  3. Bỏ () khỏi các accessor kết quả attrtuple nếu bạn muốn dạng mới thông thường, hoặc giữ nguyên phong cách cũ vì attrtuple vẫn hỗ trợ accessor có thể gọi được (các thay đổi module image).

  4. Kiểm tra find_line_segments(), get_regression(), và bất kỳ lựa chọn family find_apriltags() nào (các thay đổi module image).

  5. Đổi tên timer_mspoll_ms trong các lời gọi protocol.init(); xóa protocol.poll()soft_reboot= (các thay đổi module protocol).

  6. Đối với các workflow ML: xem lại bất kỳ mô hình nào cần đầu vào letterboxed (các thay đổi thư viện ML).