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/profileve 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
Camerasınıfı, USB-CDC’yi protokol moduna geçiren921600baud sihirli hızı vechannel_size/channel_read/channel_writegidiş-dönüş deseni.Bir çerçeve akış deseni – tek arabellekli yakalama, kilitli (latch)
readp, yeni çerçeve bildirimleri içinsend_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ı –
protocolmodü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()vestop().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-streamingvegenx320-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.