12.10. Recapitulare¶
O cameră conectată la un cablu USB care transmite în flux cadre către un program gazdă, acceptă actualizări de configurare înapoi de la gazdă și supraviețuiește deconectării/reconectării fără a pierde sincronizarea – cu retransmisiile ascunse, mai multe fluxuri logice care partajează un singur port și zero cod de încadrare în aplicație – rezultă din aproximativ patruzeci de linii de cod pe partea camerei și o cantitate similară pe partea gazdei. Biblioteca de protocol transformă o conductă de octeți într-o suprafață de canale programabilă și menține invizibil tot ce se află sub aplicație.
12.10.1. Ce a construit acest capitol¶
Un model mental cu patru straturi al stivei: transport, încadrare, fiabilitate, canale. Fiecare strat rezolvă o singură problemă și ignoră tot ce se află deasupra.
Formatul pachetului pe fir – antet de 10 octeți cu CRC, sarcină utilă variabilă, CRC final. Suficient de mic pentru a fi parcurs octet cu octet.
Negocierea (handshake) pe care camera și gazda o execută când se conectează un transport: PROTO_SYNC, schimb de capabilități, descoperirea canalelor.
Mecanismul de fiabilitate de deasupra: numere de secvență, ACK-uri, NAK-uri, retransmisii cu retragere exponențială (exponential backoff), cele zece coduri de stare.
Modelul de canal: până la 32 de fluxuri logice denumite pe un singur fir, cu canalele încorporate
stdin/stdout/stream/profileși canale de aplicație înregistrate prin clasă Python.Interfața de backend –
size,read,write,poll,lock/unlock,shape,ioctl,flush,is_active– și modul în care biblioteca de protocol folosește metodele prezente pe un backend pentru a decide ce suportă canalul.Partea gazdei: clasa
Cameradin SDK-ul openmv-python, rata magică de921600baud care comută USB-CDC în modul protocol și modelul dus-întorschannel_size/channel_read/channel_write.Un model de transmitere în flux a cadrelor – captură cu un singur tampon (buffer),
readpcu un zăvor (latch),send_eventpentru notificări de cadru nou – și un model de configurare bidirecțional (canal modificabil de gazdă, dus-întors JSON) care împreună formează fundamentul fiecărui instrument interactiv pentru cameră.
12.10.2. Foaie de parcurs pentru referință¶
Paginile de referință ale bibliotecii sunt destinațiile de căutare atunci când una dintre aceste funcționalități apare în cod real:
protocol — Canale de protocol OpenMV – modulul
protocol,protocol.init(),protocol.register(),ProtocolChannel, constantele de indicatori de canal și tabelul de sarcină utilă maximă per cameră.SDK-ul gazdei –
pip install openmv,openmv.camera.Camera. Metode abordate în acest capitol:update_channels(),has_channel(),channel_size(),channel_read(),channel_write(),poll_events(),read_frame(),exec()șistop().Depozitul openmv-projects – instrumente reale construite pe biblioteca de protocol. Directorul tools/ include
thermal-overlay-calibration(GUI de aliniere RGB + termică),ccm-tuning(reglator al matricei de corecție a culorii),genx320-event-streamingșigenx320-overlay-calibration(instrumente pentru camera de evenimente). Fiecare dintre acestea folosește modelele din acest capitol de la cap la coadă.
12.10.3. Unde să mergeți mai departe¶
Câteva direcții în care se îndreaptă de aici proiectele cu camere:
Construirea unui GUI gazdă. Un canal de cadre care alimentează un widget video, unul sau două canale de configurare care alimentează glisoare și butoane. Pentru stratul GUI propriu-zis, DearPyGui este alegerea firească – pur Python, instalabil prin pip, suficient de rapid pentru previzualizare în timp real și ceea ce caută mai întâi orice instrument gazdă OpenMV existent.
Tablou de bord de telemetrie multicanal. Mai multe canale de aplicație pe aceeași cameră (citiri de senzori, contoare, evenimente de stare), fiecare reîmprospătat în propria funcție de retroapelare (callback), și un GUI gazdă care le citește pe baza unui temporizator și le redă pe fiecare separat. Controlul independent al fluxului din stratul de canale înseamnă că o citire lentă nu blochează celelalte.
Reglare la distanță prin UART. Aceleași funcții de retroapelare (callback) pentru canale; aplicația apelează
protocol.initpentru a comuta de la USB la un transport UART. Camera continuă să ruleze fără ecran, iar un script Python pe un Raspberry Pi sau pe un laptop comunică cu ea printr-o linie serială pentru reglare în teren.
Formatul pe fir, stratul de fiabilitate și abstractizarea canalelor nu se schimbă. Alegerea transportului care se potrivește implementării și adăugarea câte unui canal pentru fiecare lucru pe care gazda trebuie să îl vadă sau să îl seteze reprezintă întreaga muncă de inginerie de aici încolo.