12.10. Zusammenfassung¶
Eine Kamera, die an einem USB-Kabel hängt, Einzelbilder an ein Host-Programm streamt, Konfigurationsupdates vom Host zurück akzeptiert und Ab- und Wiederanstecken übersteht, ohne die Synchronisation zu verlieren – mit versteckten erneuten Übertragungen, mehreren logischen Streams, die sich einen Port teilen, und null Framing-Code in der Anwendung – entsteht aus etwa vierzig Zeilen Code auf der Kameraseite und einer ähnlichen Menge auf dem Host. Die Protokollbibliothek verwandelt eine Byte-Pipe in eine programmierbare Kanaloberfläche und hält alles unterhalb der Anwendung unsichtbar.
12.10.1. Was dieses Kapitel aufgebaut hat¶
Ein vierschichtiges mentales Modell des Stacks: Transport, Framing, Zuverlässigkeit, Kanäle. Jede Schicht löst ein Problem und ignoriert alles darüber.
Das Paketformat auf der Leitung – 10-Byte-Header mit CRC, variable Nutzlast, abschließender CRC. Klein genug, um es Byte für Byte durchzugehen.
Der Handshake, den Kamera und Host ausführen, wenn ein Transport verbunden wird: PROTO_SYNC, Fähigkeitsaustausch, Kanal-Erkennung.
Die Zuverlässigkeitsmaschinerie obendrauf: Sequenznummern, ACKs, NAKs, erneute Übertragungen mit exponentiellem Backoff, die zehn Statuscodes.
Das Kanalmodell: bis zu 32 benannte logische Streams auf einer Leitung, mit integriertem
stdin/stdout/stream/profileund Anwendungskanälen, die per Python-Klasse registriert werden.Die Backend-Schnittstelle –
size,read,write,poll,lock/unlock,shape,ioctl,flush,is_active– und wie die Protokollbibliothek die auf einem Backend vorhandenen Methoden nutzt, um zu entscheiden, was der Kanal unterstützt.Die Hostseite: die
Camera-Klasse des openmv-python-SDK, die magische921600-Baud-Rate, die USB-CDC in den Protokollmodus umschaltet, und das Roundtrip-Musterchannel_size/channel_read/channel_write.Ein Einzelbild-Streaming-Muster – Aufnahme mit einem einzigen Puffer,
readpmit Verriegelung,send_eventfür Benachrichtigungen über neue Einzelbilder – und ein bidirektionales Konfigurationsmuster (host-beschreibbarer Kanal, JSON-Roundtrip), die zusammen die Grundlage für jedes interaktive Kameratool bilden.
12.10.2. Referenz-Wegweiser¶
Die Referenzseiten der Bibliothek sind die Nachschlageziele, wenn eines dieser Features in echtem Code auftaucht:
protocol — OpenMV-Protokollkanäle – das
protocol-Modul,protocol.init(),protocol.register(),ProtocolChannel, die Kanal-Flag-Konstanten und die Tabelle der maximalen Nutzlast pro Kamera.Das Host-SDK –
pip install openmv,openmv.camera.Camera. In diesem Kapitel berührte Methoden:update_channels(),has_channel(),channel_size(),channel_read(),channel_write(),poll_events(),read_frame(),exec()undstop().Das Repository openmv-projects – echte Tools, die auf der Protokollbibliothek aufbauen. Das Verzeichnis tools/ enthält
thermal-overlay-calibration(GUI zur RGB-+-Thermo-Ausrichtung),ccm-tuning(Tuner für die Farbkorrekturmatrix),genx320-event-streamingundgenx320-overlay-calibration(Werkzeuge für Ereigniskameras). Jedes davon nutzt die Muster aus diesem Kapitel von Anfang bis Ende.
12.10.3. Wie es weitergehen kann¶
Ein paar Richtungen, in die sich Kameraprojekte von hier aus bewegen:
Aufbau einer Host-GUI. Ein Einzelbildkanal, der ein Video-Widget speist, ein oder zwei Konfigurationskanäle, die Schieberegler und Schaltflächen speisen. Für die GUI-Schicht selbst ist DearPyGui die natürliche Wahl – rein in Python, per pip installierbar, schnell genug für die Live-Vorschau und das, wonach jedes bestehende OpenMV-Host-Tool zuerst greift.
Mehrkanal-Telemetrie-Dashboard. Mehrere Anwendungskanäle auf derselben Kamera (Sensormesswerte, Zähler, Statusereignisse), die jeweils in ihrem eigenen Callback aktualisiert werden, und eine Host-GUI, die sie per Timer liest und jeden einzeln rendert. Die unabhängige Flusssteuerung der Kanalschicht bedeutet, dass ein langsamer Lesevorgang die anderen nicht ausbremst.
Fern-Tuning über UART. Dieselben Kanal-Callbacks; die Anwendung ruft
protocol.initauf, um von USB auf einen UART-Transport umzuschalten. Die Kamera läuft weiter headless, und ein Python-Skript auf einem Raspberry Pi oder Laptop kommuniziert über eine serielle Leitung mit ihr, um sie im Feld abzustimmen.
Das Leitungsformat, die Zuverlässigkeitsschicht und die Kanalabstraktion ändern sich nicht. Den Transport zu wählen, der zum Einsatz passt, und einen Kanal für jede Sache hinzuzufügen, die der Host sehen oder setzen muss, ist von hier an die gesamte technische Arbeit.