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/profilei 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
Cameraopenmv-python SDK-a, čarobna brzina921600baud koja prebacuje USB-CDC u protokolarni način rada, te obrazac kruženjachannel_size/channel_read/channel_write.Obrazac prijenosa sličica – snimanje u jedan međuspremnik,
readpsa zasunom,send_eventza 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()istop().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-streamingigenx320-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.initza 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.