12.10. Підсумок¶
Камера, підключена до USB-кабелю, яка передає кадри до хост-програми, приймає оновлення конфігурації від хоста і витримує відключення/підключення без втрати синхронізації — з прихованими повторними передачами, кількома логічними потоками, що спільно використовують один порт, і без жодного коду фреймінгу у застосунку — виходить приблизно з сорока рядків коду на стороні камери та аналогічної кількості на стороні хоста. Бібліотека протоколу перетворює байтовий канал на програмовану поверхню каналів і зберігає все, що нижче застосунку, невидимим.
12.10.1. Що побудовано у розділі¶
Чотирирівнева концептуальна модель стека: транспорт, фреймінг, надійність, канали. Кожен рівень вирішує одну задачу і ігнорує все вище.
Формат пакета в дроті — 10-байтний заголовок із CRC, змінне корисне навантаження, замикаючий CRC. Достатньо малий, щоб обійти байт за байтом.
Handshake, який запускають камера і хост при підключенні транспорту: PROTO_SYNC, обмін можливостями, виявлення каналів.
Механізм надійності поверх: порядкові номери, ACK, NAK, повторні передачі з експоненційним відкочуванням, десять кодів статусу.
Модель каналів: до 32 іменованих логічних потоків на одному дроті, з вбудованими
stdin/stdout/stream/profileі каналами застосунку, зареєстрованими Python-класом.Інтерфейс бекенда —
size,read,write,poll,lock/unlock,shape,ioctl,flush,is_active— і те, як бібліотека протоколу використовує методи, присутні у бекенді, щоб вирішити, що підтримує канал.Сторона хоста: клас
CameraSDK openmv-python, магічна швидкість921600бод, що перемикає USB-CDC у режим протоколу, та шаблон обертівchannel_size/channel_read/channel_write.Шаблон потокової передачі кадрів — однобуферне захоплення,
readpіз засувкою,send_eventдля сповіщень про новий кадр — і двонаправлений шаблон конфігурації (канал, доступний для запису хостом, обмін JSON), що разом утворюють основу для кожного інтерактивного інструменту з камерою.
12.10.2. Довідкова дорожня карта¶
Сторінки довідника бібліотеки — це місця пошуку, коли одна з цих функцій з’являється у реальному коді:
protocol — Канали протоколу OpenMV – модуль
protocol,protocol.init(),protocol.register(),ProtocolChannel, константи прапорів каналу та таблиця максимального корисного навантаження для кожної камери.SDK хоста –
pip install openmv,openmv.camera.Camera. Методи, розглянуті у цьому розділі:update_channels(),has_channel(),channel_size(),channel_read(),channel_write(),poll_events(),read_frame(),exec()таstop().Репозиторій openmv-projects — реальні інструменти, побудовані на бібліотеці протоколу. Каталог tools/ включає
thermal-overlay-calibration(GUI вирівнювання RGB + теплового зображення),ccm-tuning(налаштовувач матриці корекції кольору),genx320-event-streamingіgenx320-overlay-calibration(інструменти для подійних камер). Кожен із них використовує шаблони з цього розділу від початку до кінця.
12.10.3. Куди рухатися далі¶
Кілька напрямків, у яких рухаються проєкти з камерами:
Побудова GUI хоста. Канал кадрів, що живить відео-віджет, один або два канали конфігурації, що живлять повзунки та кнопки. Для самого GUI-шару DearPyGui — природний вибір: чистий Python, встановлюється через pip, достатньо швидкий для живого попереднього перегляду і те, до чого кожен існуючий інструмент хоста OpenMV звертається в першу чергу.
Багатоканальна телеметрична панель. Кілька каналів застосунку на одній камері (показання датчиків, лічильники, події статусу), кожен оновлюється у своєму зворотному виклику, і GUI хоста, що зчитує їх за таймером і відображає кожен окремо. Незалежне управління потоком каналів означає, що повільне читання одного не блокує інші.
Дистанційне налаштування через UART. Ті самі зворотні виклики каналів; застосунок викликає
protocol.initдля перемикання з USB на транспорт UART. Камера продовжує працювати без монітора, а Python-скрипт на Raspberry Pi або ноутбуці спілкується з нею по послідовній лінії для польового налаштування.
Дротовий формат, рівень надійності та абстракція каналів не змінюються. Вибір транспорту, що підходить для розгортання, і додавання каналу для кожного, що хост повинен бачити або змінювати, — це вся інженерна робота з цього моменту.