12.10. Összegzés

Egy USB-kábelre csatlakoztatott kamera, amely képkockákat streamel egy gazdaprogramnak, fogadja a gazdagéptől visszaérkező konfigurációs frissítéseket, és kihúzást/visszadugást is túlél a szinkron elvesztése nélkül – elrejtett újraküldésekkel, egyetlen porton osztozó több logikai streammel, és az alkalmazásban nulla keretezési kóddal – mindez körülbelül negyven sornyi kameraoldali kódból és hasonló mennyiségű gazdaoldali kódból jön ki. A protokollkönyvtár egy bájtcsövet programozható csatornafelületté alakít, és mindent láthatatlanul tart az alkalmazás alatt.

12.10.1. Mit épített fel a fejezet

  • A verem négyrétegű gondolati modellje: átvitel, keretezés, megbízhatóság, csatornák. Minden réteg egyetlen problémát old meg, és mindent figyelmen kívül hagy, ami felette van.

  • A vezetéken használt csomagformátum – 10 bájtos fejléc CRC-vel, változó hasznos terhelés, záró CRC. Elég kicsi ahhoz, hogy bájtról bájtra végigjárjuk.

  • A kézfogás, amelyet a kamera és a gazdagép futtat, amikor egy átvitel csatlakozik: PROTO_SYNC, képesség-egyeztetés, csatornafelderítés.

  • A megbízhatósági gépezet a tetején: sorszámok, ACK-k, NAK-ok, újraküldések exponenciális visszalépéssel, a tíz állapotkód.

  • A csatornamodell: legfeljebb 32 elnevezett logikai stream egyetlen vezetéken, beépített stdin / stdout / stream / profile csatornákkal és Python osztály által regisztrált alkalmazáscsatornákkal.

  • A háttérprogram-interfész – size, read, write, poll, lock / unlock, shape, ioctl, flush, is_active –, és az, ahogyan a protokollkönyvtár a háttérprogramon jelen lévő metódusok alapján eldönti, mit támogat a csatorna.

  • A gazdagép oldala: az openmv-python SDK Camera osztálya, a 921600 baudos varázssebesség, amely a USB-CDC-t protokoll módba kapcsolja, valamint a channel_size / channel_read / channel_write oda-vissza minta.

  • Egy képkocka-streamelési minta – egypufferes rögzítés, readp retesszel, send_event az új képkockáról szóló értesítésekhez –, valamint egy kétirányú konfigurációs minta (gazdagép által írható csatorna, JSON oda-vissza), amelyek együtt minden interaktív kameraeszköz alapját képezik.

12.10.2. Referencia-útiterv

A könyvtár-referenciaoldalak a keresési célpontok, amikor ezek a funkciók valós kódban felmerülnek:

  • protocol — OpenMV protokollcsatornák – a protocol modul, a protocol.init(), a protocol.register(), a ProtocolChannel, a csatornajelző konstansok, valamint a kameránkénti maximális hasznos terhelést tartalmazó táblázat.

  • A gazda SDK – pip install openmv, openmv.camera.Camera. Az ebben a fejezetben érintett metódusok: update_channels(), has_channel(), channel_size(), channel_read(), channel_write(), poll_events(), read_frame(), exec() és stop().

  • Az openmv-projects tároló – a protokollkönyvtárra épülő valós eszközök. A tools/ könyvtár tartalmazza a thermal-overlay-calibration (RGB + hőkép-illesztési grafikus felület), a ccm-tuning (színkorrekciós mátrixhangoló), a genx320-event-streaming és a genx320-overlay-calibration (eseménykamera-eszközök) elemeket. Mindegyik a fejezet mintáit használja az elejétől a végéig.

12.10.3. Merre tovább

Néhány irány, amerre a kameraprojektek innen elmozdulnak:

  • Gazdaoldali grafikus felület építése. Egy képkocka-csatorna, amely egy videowidgetet táplál, és egy vagy két konfigurációs csatorna, amely csúszkákat és gombokat táplál. Magához a grafikus felület réteghez a DearPyGui a természetes választás – tiszta Python, pip-pel telepíthető, elég gyors az élő előnézethez, és minden meglévő OpenMV gazdaeszköz először ehhez nyúl.

  • Többcsatornás telemetriai műszerfal. Több alkalmazáscsatorna ugyanazon a kamerán (érzékelő-leolvasások, számlálók, állapotesemények), mindegyik a saját visszahívásában frissítve, és egy gazdaoldali grafikus felület, amely időzítőn olvassa be őket, és mindegyiket külön jeleníti meg. A csatornaréteg független folyamvezérlése azt jelenti, hogy egy lassú olvasás nem akasztja meg a többit.

  • Távoli hangolás UART-on keresztül. Ugyanazok a csatorna-visszahívások; az alkalmazás a protocol.init hívással vált USB-ről UART-átvitelre. A kamera fejetlenül fut tovább, egy Raspberry Pi-n vagy laptopon futó Python szkript pedig soros vonalon keresztül beszél vele a terepi hangoláshoz.

A vezetékformátum, a megbízhatósági réteg és a csatornaabsztrakció nem változik. A telepítéshez illő átvitel kiválasztása és egy csatorna hozzáadása minden olyan dologhoz, amit a gazdagépnek látnia vagy beállítania kell, innentől az egész mérnöki feladat.