12.10. Sažetak

Kamera priključena na USB kabel koja prenosi sličice host programu, prihvaća ažuriranja konfiguracije natrag od hosta i preživljava iskapčanje/ponovno ukapčanje bez gubitka sinkronizacije – sa skrivenim ponovnim slanjima, više logičkih tokova koji dijele jedan port i nimalo koda za okvirivanje u aplikaciji – proizlazi iz otprilike četrdeset redaka koda na strani kamere i slične količine na hostu. Protokolarna biblioteka pretvara cijev bajtova u programabilnu površinu kanala i drži sve ispod aplikacije nevidljivim.

12.10.1. Što je poglavlje izgradilo

  • Mentalni model stoga u četiri sloja: transport, okvirivanje, pouzdanost, kanali. Svaki sloj rješava jedan problem i zanemaruje sve iznad sebe.

  • Format paketa na vezi – zaglavlje od 10 bajtova s CRC-om, promjenjivi sadržaj, zaključni CRC. Dovoljno malo da se prođe bajt po bajt.

  • Rukovanje koje kamera i host izvode kada se transport poveže: PROTO_SYNC, razmjena sposobnosti, otkrivanje kanala.

  • Mehanizam pouzdanosti na vrhu: redni brojevi, ACK-ovi, NAK-ovi, ponovna slanja s eksponencijalnim odgodama, deset statusnih kodova.

  • Model kanala: do 32 imenovana logička toka na jednoj vezi, s ugrađenim stdin / stdout / stream / profile i aplikacijskim kanalima registriranim Python klasom.

  • Sučelje pozadinskog sustava – size, read, write, poll, lock / unlock, shape, ioctl, flush, is_active – i kako protokolarna biblioteka koristi metode prisutne na pozadinskom sustavu da odluči što kanal podržava.

  • Strana hosta: klasa Camera openmv-python SDK-a, čarobna brzina 921600 baud koja prebacuje USB-CDC u protokolarni način rada, te obrazac kruženja channel_size / channel_read / channel_write.

  • Obrazac prijenosa sličica – snimanje u jedan međuspremnik, readp sa zasunom, send_event za obavijesti o novoj sličici – i dvosmjerni obrazac konfiguracije (kanal u koji host može pisati, JSON kruženje) koji zajedno tvore temelj za svaki interaktivni alat za kameru.

12.10.2. Plan referentne dokumentacije

Stranice referentne biblioteke odredišta su za pretraživanje kada se neka od ovih značajki pojavi u stvarnom kodu:

  • protocol — OpenMV protokolni kanali – modul protocol, protocol.init(), protocol.register(), ProtocolChannel, konstante zastavica kanala i tablica maksimalnog sadržaja po kameri.

  • Host SDK – pip install openmv, openmv.camera.Camera. Metode obrađene u ovom poglavlju: update_channels(), has_channel(), channel_size(), channel_read(), channel_write(), poll_events(), read_frame(), exec() i stop().

  • Repozitorij openmv-projects – stvarni alati izgrađeni na protokolarnoj biblioteci. Direktorij tools/ uključuje thermal-overlay-calibration (GUI za poravnanje RGB + termalno), ccm-tuning (ugađač matrice korekcije boja), genx320-event-streaming i genx320-overlay-calibration (alati za kameru događaja). Svaki od njih koristi obrasce iz ovog poglavlja od početka do kraja.

12.10.3. Kamo dalje s ovime

Nekoliko smjerova u kojima projekti s kamerom kreću odavde:

  • Izgradnja host GUI-ja. Kanal sličica koji napaja video widget, jedan ili dva konfiguracijska kanala koji napajaju klizače i gumbe. Za sam GUI sloj DearPyGui je prirodan izbor – čisti Python, instalabilan putem pip-a, dovoljno brz za pregled uživo i ono za čim svaki postojeći OpenMV host alat prvo poseže.

  • Nadzorna ploča s telemetrijom više kanala. Nekoliko aplikacijskih kanala na istoj kameri (očitanja senzora, brojači, statusni događaji), svaki osvježen u vlastitom povratnom pozivu, te host GUI koji ih čita na mjeraču vremena i prikazuje svaki zasebno. Neovisna kontrola toka sloja kanala znači da jedno sporo čitanje ne zaustavlja ostale.

  • Daljinsko ugađanje preko UART-a. Isti povratni pozivi kanala; aplikacija poziva protocol.init za prebacivanje s USB-a na UART transport. Kamera nastavlja raditi bez zaslona, a Python skripta na Raspberry Pi-ju ili prijenosniku komunicira s njom preko serijske linije za ugađanje na terenu.

Format na vezi, sloj pouzdanosti i apstrakcija kanala se ne mijenjaju. Odabir transporta koji odgovara primjeni i dodavanje kanala za svaku stvar koju host treba vidjeti ili postaviti cjelokupan je inženjerski posao od ovog trenutka nadalje.