12.10. Sammanfattning

En kamera inkopplad i en USB-kabel som strömmar bildrutor till ett värdprogram, tar emot konfigurationsuppdateringar tillbaka från värden och överlever urkoppling/återinkoppling utan att tappa synk – med omsändningar dolda, flera logiska strömmar som delar en port, och noll ramningskod i applikationen – kommer ur ungefär fyrtio rader kod på kamerasidan och en liknande mängd på värden. Protokollbiblioteket förvandlar en byte-pipe till en programmerbar kanalyta och håller allt under applikationen osynligt.

12.10.1. Vad kapitlet byggde

  • En mental modell av stacken i fyra lager: transport, ramning, tillförlitlighet, kanaler. Varje lager löser ett problem och ignorerar allt ovanför.

  • Paketformatet på ledningen – 10-byte-header med CRC, variabel nyttolast, avslutande CRC. Litet nog att gå igenom byte för byte.

  • Handskakningen som kameran och värden kör när en transport ansluter: PROTO_SYNC, förmågeutbyte, kanalupptäckt.

  • Tillförlitlighetsmaskineriet ovanpå: sekvensnummer, ACK:er, NAK:er, omsändningar med exponentiell backoff, de tio statuskoderna.

  • Kanalmodellen: upp till 32 namngivna logiska strömmar på en ledning, med inbyggda stdin / stdout / stream / profile och applikationskanaler registrerade per Python-klass.

  • Backend-gränssnittet – size, read, write, poll, lock / unlock, shape, ioctl, flush, is_active – och hur protokollbiblioteket använder de metoder som finns på en backend för att avgöra vad kanalen stöder.

  • Värdsidan: openmv-python-SDK:ns Camera-klass, den magiska 921600-baudhastigheten som växlar USB-CDC till protokollläge, och tur-och-retur-mönstret channel_size / channel_read / channel_write.

  • Ett bildrutestrømningsmönster – enbuffert-infångning, readp med en spärr, send_event för notifieringar om nya bildrutor – och ett dubbelriktat konfigurationsmönster (värdskrivbar kanal, JSON tur och retur) som tillsammans utgör grunden för varje interaktivt kameraverktyg.

12.10.2. Referensvägkarta

Bibliotekets referenssidor är uppslagsmålen när någon av dessa funktioner dyker upp i verklig kod:

  • protocol — OpenMV-protokollkanaler – modulen protocol, protocol.init(), protocol.register(), ProtocolChannel, kanalflaggkonstanterna och tabellen över maximal nyttolast per kamera.

  • Värd-SDK:n – pip install openmv, openmv.camera.Camera. Metoder som berörs i detta kapitel: update_channels(), has_channel(), channel_size(), channel_read(), channel_write(), poll_events(), read_frame(), exec() och stop().

  • Förrådet openmv-projects – verkliga verktyg byggda på protokollbiblioteket. Katalogen tools/ innehåller thermal-overlay-calibration (GUI för RGB- + termisk inriktning), ccm-tuning (justerare för färgkorrigeringsmatris), genx320-event-streaming och genx320-overlay-calibration (verktyg för händelsekameror). Var och en använder mönstren från detta kapitel från början till slut.

12.10.3. Vart man tar det härnäst

Några riktningar som kameraprojekt rör sig i härifrån:

  • Bygga ett värd-GUI. En bildrutekanal som matar en videowidget, en eller två konfigurationskanaler som matar reglage och knappar. För själva GUI-lagret är DearPyGui det naturliga valet – ren Python, installerbart med pip, snabbt nog för förhandsgranskning i realtid, och det som varje befintligt OpenMV-värdverktyg griper efter först.

  • Flerkanalig telemetri-instrumentpanel. Flera applikationskanaler på samma kamera (sensoravläsningar, räknare, statushändelser) var och en uppdaterad i sitt eget återanrop, och ett värd-GUI som läser dem via en timer och renderar var och en separat. Kanallagrets oberoende flödeskontroll innebär att en långsam läsning inte stoppar de andra.

  • Fjärrjustering över UART. Samma kanalåteranrop; applikationen anropar protocol.init för att växla från USB till en UART-transport. Kameran fortsätter köra utan skärm medan ett Python-skript på en Raspberry Pi eller laptop pratar med den över en seriell linje för fältjustering.

Ledningsformatet, tillförlitlighetslagret och kanalabstraktionen ändras inte. Att välja den transport som passar driftsättningen och lägga till en kanal för varje sak som värden behöver se eller ställa in är hela ingenjörsjobbet härifrån och framåt.