12.10. Özet

Bir USB kablosuna takılı, çerçeveleri bir host programına akıtan, host’tan geri yapılandırma güncellemelerini kabul eden ve eşitlemesini kaybetmeden çıkar/tak işlemine dayanan bir kamera – yeniden iletimler gizli, birden fazla mantıksal akış tek bir bağlantı noktasını paylaşıyor ve uygulamada hiç çerçeveleme kodu yokken – yaklaşık kırk satır kamera tarafı koddan ve host’ta benzer miktarda koddan ortaya çıkar. Protokol kütüphanesi bir bayt borusunu programlanabilir bir kanal yüzeyine dönüştürür ve uygulamanın altındaki her şeyi görünmez tutar.

12.10.1. Bölümün inşa ettikleri

  • Yığının dört katmanlı zihinsel modeli: taşıma (transport), çerçeveleme, güvenilirlik, kanallar. Her katman tek bir sorunu çözer ve üzerindeki her şeyi göz ardı eder.

  • Kablo üzerindeki paket biçimi – CRC’li 10 baytlık başlık, değişken yük, sonda CRC. Bayt bayt incelenecek kadar küçük.

  • Bir taşıma bağlandığında kamera ve host’un yürüttüğü el sıkışma (handshake): PROTO_SYNC, yetenek değişimi, kanal keşfi.

  • Üstteki güvenilirlik mekanizması: sıra numaraları, ACK’ler, NAK’ler, üstel geri çekilmeli (backoff) yeniden iletimler, on durum kodu.

  • Kanal modeli: tek bir kablo üzerinde 32’ye kadar adlandırılmış mantıksal akış; yerleşik stdin / stdout / stream / profile ve Python sınıfıyla kaydedilen uygulama kanalları.

  • Arka uç (backend) arabirimi – size, read, write, poll, lock / unlock, shape, ioctl, flush, is_active – ve protokol kütüphanesinin kanalın neyi desteklediğine karar vermek için bir arka uçta bulunan yöntemleri nasıl kullandığı.

  • Host tarafı: openmv-python SDK’sının Camera sınıfı, USB-CDC’yi protokol moduna geçiren 921600 baud sihirli hızı ve channel_size / channel_read / channel_write gidiş-dönüş deseni.

  • Bir çerçeve akış deseni – tek arabellekli yakalama, kilitli (latch) readp, yeni çerçeve bildirimleri için send_event – ve birlikte her etkileşimli kamera aracının temelini oluşturan çift yönlü bir yapılandırma deseni (host tarafından yazılabilir kanal, JSON gidiş-dönüşü).

12.10.2. Referans yol haritası

Bu özelliklerden biri gerçek kodda ortaya çıktığında, kütüphane referans sayfaları başvuru noktalarıdır:

  • protocol — OpenMV Protokol Kanallarıprotocol modülü, protocol.init(), protocol.register(), ProtocolChannel, kanal bayrak sabitleri ve kamera başına maksimum yük tablosu.

  • Host SDK’sı – pip install openmv, openmv.camera.Camera. Bu bölümde değinilen yöntemler: update_channels(), has_channel(), channel_size(), channel_read(), channel_write(), poll_events(), read_frame(), exec() ve stop().

  • openmv-projects deposu – protokol kütüphanesi üzerine inşa edilmiş gerçek araçlar. tools/ dizini şunları içerir: thermal-overlay-calibration (RGB + termal hizalama GUI’si), ccm-tuning (renk düzeltme matrisi ayarlayıcısı), genx320-event-streaming ve genx320-overlay-calibration (olay kamerası araçları). Her biri bu bölümdeki desenleri baştan sona kullanır.

12.10.3. Bundan sonra nereye götürebilirsiniz

Kamera projelerinin buradan ilerlediği birkaç yön:

  • Bir host GUI’si oluşturmak. Bir video bileşenini besleyen bir çerçeve kanalı, kaydırıcıları ve düğmeleri besleyen bir veya iki yapılandırma kanalı. GUI katmanının kendisi için DearPyGui doğal seçimdir – saf Python, pip ile kurulabilir, canlı önizleme için yeterince hızlı ve mevcut her OpenMV host aracının ilk başvurduğu şey.

  • Çok kanallı telemetri panosu. Aynı kamerada birkaç uygulama kanalı (sensör okumaları, sayaçlar, durum olayları), her biri kendi geri çağırmasında (callback) tazelenir; ve bunları bir zamanlayıcıda okuyup her birini ayrı ayrı işleyen bir host GUI’si. Kanal katmanının bağımsız akış denetimi, bir yavaş okumanın diğerlerini durdurmaması anlamına gelir.

  • UART üzerinden uzaktan ayarlama. Aynı kanal geri çağırmaları; uygulama, USB’den bir UART taşımaya geçmek için protocol.init‘i çağırır. Kamera başsız (headless) çalışmaya devam eder ve bir Raspberry Pi veya dizüstündeki bir Python betiği, saha ayarlaması için onunla seri hat üzerinden konuşur.

Kablo biçimi, güvenilirlik katmanı ve kanal soyutlaması değişmez. Dağıtıma uyan taşımayı seçmek ve host’un görmesi veya ayarlaması gereken her şey için bir kanal eklemek, bundan sonraki tüm mühendislik işidir.