12.10. Rangkuman

Kamera yang terhubung ke kabel USB yang melakukan streaming bingkai ke program host, menerima pembaruan konfigurasi dari host, dan bertahan dari cabut/pasang ulang tanpa kehilangan sinkronisasi -- dengan retransmisi tersembunyi, beberapa aliran logis berbagi satu port, dan tanpa kode framing dalam aplikasi -- dihasilkan dari sekitar empat puluh baris kode sisi kamera dan jumlah serupa di sisi host. Library protokol mengubah pipa byte menjadi permukaan saluran yang dapat diprogram dan menjaga semua yang berada di bawah aplikasi tetap tidak terlihat.

12.10.1. Apa yang dibangun bab ini

  • Model mental empat lapisan dari tumpukan: transport, framing, keandalan, saluran. Setiap lapisan memecahkan satu masalah dan mengabaikan semua yang ada di atasnya.

  • Format paket di kawat -- header 10 byte dengan CRC, payload variabel, CRC di akhir. Cukup kecil untuk ditelusuri byte per byte.

  • Handshake yang dijalankan kamera dan host ketika transport terhubung: PROTO_SYNC, pertukaran kapabilitas, penemuan saluran.

  • Mesin keandalan di atasnya: nomor urutan, ACK, NAK, retransmisi dengan exponential backoff, sepuluh kode status.

  • Model saluran: hingga 32 aliran logis bernama di satu kawat, dengan stdin / stdout / stream / profile bawaan dan saluran aplikasi yang didaftarkan oleh kelas Python.

  • Antarmuka backend -- size, read, write, poll, lock / unlock, shape, ioctl, flush, is_active -- dan bagaimana library protokol menggunakan metode yang ada pada backend untuk memutuskan apa yang didukung saluran.

  • Sisi host: kelas Camera dari SDK openmv-python, laju baud ajaib 921600 yang mengalihkan USB-CDC ke mode protokol, dan pola round-trip channel_size / channel_read / channel_write.

  • Pola streaming bingkai -- pengambilan buffer tunggal, readp dengan latch, send_event untuk notifikasi bingkai baru -- dan pola konfigurasi dua arah (saluran yang dapat ditulis host, round-trip JSON) yang bersama-sama membentuk fondasi untuk setiap alat kamera interaktif.

12.10.2. Peta jalan referensi

Halaman referensi library adalah tujuan pencarian ketika salah satu fitur ini muncul dalam kode nyata:

  • protocol --- Saluran Protokol OpenMV -- modul protocol, protocol.init(), protocol.register(), ProtocolChannel, konstanta flag saluran, dan tabel payload-maksimum per kamera.

  • Host SDK -- pip install openmv, openmv.camera.Camera. Metode yang disentuh dalam bab ini: update_channels(), has_channel(), channel_size(), channel_read(), channel_write(), poll_events(), read_frame(), exec(), dan stop().

  • Repositori openmv-projects -- alat nyata yang dibangun di atas library protokol. Direktori tools/ mencakup thermal-overlay-calibration (GUI penyelarasan RGB + termal), ccm-tuning (tuner matriks koreksi warna), genx320-event-streaming dan genx320-overlay-calibration (alat event-camera). Masing-masing menggunakan pola dari bab ini dari ujung ke ujung.

12.10.3. Ke mana melanjutkannya

Beberapa arah yang diambil proyek kamera dari sini:

  • Membangun GUI host. Saluran bingkai yang memberi makan widget video, satu atau dua saluran konfigurasi yang memberi makan slider dan tombol. Untuk lapisan GUI itu sendiri, DearPyGui adalah pilihan alami -- pure-Python, dapat dipasang dengan pip, cukup cepat untuk pratinjau langsung, dan yang dicari pertama kali oleh setiap alat host OpenMV yang ada.

  • Dashboard telemetri multi-saluran. Beberapa saluran aplikasi pada kamera yang sama (pembacaan sensor, penghitung, event status) masing-masing diperbarui dalam callback-nya sendiri, dan GUI host yang membacanya pada timer dan merender masing-masing secara terpisah. Kontrol aliran independen lapisan saluran berarti satu pembacaan lambat tidak menghambat yang lain.

  • Penyetelan jarak jauh melalui UART. Callback saluran yang sama; aplikasi memanggil protocol.init untuk beralih dari USB ke transport UART. Kamera terus berjalan tanpa kepala dan skrip Python di Raspberry Pi atau laptop berbicara dengannya melalui jalur serial untuk penyetelan lapangan.

Format kawat, lapisan keandalan, dan abstraksi saluran tidak berubah. Memilih transport yang sesuai dengan penempatan dan menambahkan saluran untuk setiap hal yang perlu dilihat atau diatur host adalah seluruh pekerjaan rekayasa dari sini.