Görüntü Programlama Stratejileri

Bilgisayarla görmeyi kullanmak, robotunuzun sahadaki unsurlara duyarlı olmasını ve çok daha otonom olmasını sağlamanın harika bir yoludur. Genellikle FRC |reg| oyunlar, topları veya diğer oyun parçalarını kendi kendine hedefe atmak veya sahadaki yerlere gitmek için bonus puanlar vardır. Bilgisayarla görme, bu sorunların çoğunu çözmenin harika bir yoludur. Ve eğer meydan okumayı gerçekleştirebilecek özerk bir kodunuz varsa, o zaman insan sürücülere yardımcı olmak için teleop döneminde de kullanılabilir.

Görüntü işleme için bileşenleri ve görsel denetim programının nerede çalışması gerektiğini seçmek için bir çok seçenek vardır. WPILib ve ilgili araçlar bir dizi seçeneği destekler ve ekiplere ne yapacaklarına karar vermeleri için büyük bir esneklik sağlar. Bu makale, mevcut birçok seçenek ve değiş tokuş hakkında size fikir vermeye çalışacaktır.

Different vision workflows in FRC.

OpenCV Computer Vision Kitaplığı

** OpenCV **, akademi ve endüstri genelinde yaygın olarak kullanılan açık kaynaklı bir bilgisayar görüntü kitaplığıdır. GPU hızlandırmalı işleme sağlayan donanım üreticilerinden destek alır, C ++, Java ve Python dahil olmak üzere bir dizi dil için bağlantıları vardır. Ayrıca birçok web sitesi, kitap, video ve eğitim kursları ile iyi bir şekilde belgelenmiştir, bu nedenle nasıl kullanılacağını öğrenmenize yardımcı olacak birçok kaynak vardır. WPILib’in C ++ ve Java sürümleri OpenCV kitaplıklarını içerir, kitaplıkta video yakalama, işleme ve görüntüleme desteği ve vizyon algoritmalarınızı oluşturmanıza yardımcı olacak araçlar vardır. OpenCV hakkında daha fazla bilgi için bkz. https://opencv.org.

RoboRIO’da Görüntü Kodu

The chain from a USB Webcam to roboRIO to Ethernet Switch over a video stream to the driver station computer.

Görüntü kodu, roboRIO’daki ana robot programına yerleştirilebilir. Görüntü kodu oluşturmak ve çalıştırmak basittir çünkü robot programıyla birlikte oluşturulup devreye alınır. Görüntü kodu elle yazılabilir veya GRIP tarafından C ++ veya Java’da oluşturulabilir. Bu yaklaşımın dezavantajı, robot programıyla aynı işlemci üzerinde çalışan görüntü kodunun performans sorunlarına neden olabilmesidir. Bu, robotunuzun ve görsel denetim programınızın gereksinimlerine bağlı olarak değerlendirmeniz gereken bir şeydir.

Bu yaklaşımda, görüş kodu basitçe robot kodunun doğrudan kullandığı sonuçları üretir. Bir vizyon dizisinden değerler alan robot kodunu yazarken senkronizasyon sorunlarına dikkat edin. GRIP tarafından üretilen kod ve WPILib’deki VisionRunner sınıfı bunu kolaylaştırır.

CameraServer sınıfı tarafından sağlanan işlevleri kullanarak, video akışı Shuffleboard gibi gösterge tablolarına gönderilebilir, böylece operatörler kameranın gördüklerini görebilir. Ek olarak, OpenCV komutları bilgi görüntülere eklenebilir, böylece hedefler veya diğer ilginç nesneler gösterge tablosu görünümünde tanımlanabilir.

DS Bilgisayarda Görüntü Kodu

Same as the above diagram but the Driver Station computer must process that video and send NetworkTables updates back to the roboRIO.

DS bilgisayarında görüntü kodu çalışırken, video işlenmek üzere Driver Station dizüstü bilgisayarına geri gönderilir. Daha eski Classmate dizüstü bilgisayarlar bile görüntü işlemede roboRIO’dan önemli ölçüde daha hızlıdır. GRIP, sonuçların NetworkTables kullanılarak robota geri gönderilmesiyle doğrudan Driver Station dizüstü bilgisayarında çalıştırılabilir. Alternatif olarak, seçtiğiniz bir dili kullanarak kendi vizyon programınızı yazabilirsiniz. Python, yerel bir NetworkTables uygulaması olduğu ve OpenCV bağları çok iyi olduğu için iyi bir seçim yapar.

Görüntüler işlendikten sonra, hedef konum, mesafe veya ihtiyacınız olan herhangi bir şey gibi anahtar değerler, NetworkTables ile robota geri gönderilebilir. Görüntülerin dizüstü bilgisayara gönderilmesi gerektiğinden gecikme eklendiğinden, bu yaklaşım genellikle daha yüksek gecikmeye sahiptir. Bant genişliği sınırlamaları ayrıca işleme için kullanılan görüntülerin maksimum çözünürlüğünü ve FPS’sini de sınırlar.

Video akışı Shuffleboard’da veya GRIP’te görüntülenebilir.

Yardımcı İşlemcide Görüntü Kodu

Coprocessor is on same network as the roboRIO so it off loads the compute without having the latency of going to the Driver Station and back.

Raspberry Pi gibi yardımcı işlemciler, görüntü kodunu desteklemek için idealdir (bkz: ref: docs / software / vision-processing / wpilibpi / using-the-raspberry-pi-for-frc: Raspberry Pi for FRC). Avantajı, tam hızda çalışabilmeleri ve robot programına müdahale etmemeleridir. Bu durumda, kamera muhtemelen yardımcı işlemciye veya (Ethernet kameraları olması durumunda) robot üzerindeki bir Ethernet anahtarına bağlıdır. Program herhangi bir dilde yazılabilir; Python, OpenCV ve NetworkTables’a olan basit bağlantıları nedeniyle iyi bir seçimdir. Bazı ekipler, en yüksek hız ve en yüksek çözünürlük için Nvidia Jetson gibi yüksek performanslı görüntü yardımcı işlemcileri kullandı, ancak bu yaklaşım genellikle gelişmiş Linux ve programlama bilgisi gerektiriyor.

Bu yaklaşım, biraz daha fazla programlama uzmanlığı ve az miktarda ek ağırlık gerektirir, ancak aksi takdirde, yardımcı işlemciler roboRIO’dan çok daha hızlı olduğundan ve görüntü işleme ile gerçekleştirilebildiğinden, diğer iki yaklaşıma kıyasla her iki yerin en iyisini minimum gecikme veya bant genişliği kullanımı ile getirir.

Veriler, yardımcı işlemcideki görüntü programından robota NetworkTables veya bir ağ veya seri bağlantı üzerinden özel bir protokol kullanılarak gönderilebilir.

Kamera Seçenekleri

WPILib tarafından desteklenen bir dizi kamera seçeneği vardır. Kameraların çalışmayı etkileyen bir dizi parametresi vardır; örneğin, kare hızı ve görüntü çözünürlüğü alınan görüntülerin kalitesini etkiler, ancak çok yüksek etkili işleme süresi ayarlandığında ve sürücü istasyonuna gönderilirse, sahadaki mevcut bant genişliğini aşabilir.

C ++ ve Java’daki CameraServer sınıfı, robota bağlı kameralarla arayüz oluşturmak için kullanılır. Bir Kaynak nesnesi aracılığıyla yerel işleme için çerçeveleri alır ve akışı orada görüntülemek veya işlemek için sürücü istasyonunuza gönderir.