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.