2017 Vision Örnekleri

LabVIEW

2017 LabVIEW Vision Örneği diğer LabVIEW örnekleriyle birlikte verilmektedir. Açılış ekranından Destek-> FRC Bul | reg | Örneklerden veya başka herhangi bir LabVIEW penceresinden, Yardım-> Örnekler Bul’a tıklayın ve 2017 Vision Örneğini bulmak için Vision klasörünü bulun. Örnek görüntüler örnekle paketlenmiştir.

C++/Java

Bir GRIP projesi ve aşağıdaki açıklamanın yanı sıra bir ZIP içine yerleştirilmiş örnek görseller sağladık. TeamForge’da bulunabilir.

GRIP tarafından oluşturulan kodu robot programınıza entegre etme hakkında ayrıntılar için Oluşturulan Kodu Bir Robot Programında Kullanma bölümüne bakın.

Dahil edilen GRIP projesi tarafından oluşturulan kod, bu ZIP’ın Vision Images klasöründe bulunanlar gibi görüntülerde yeşil parçacıklar için OpenCV konturlarını bulacaktır. Oradan, hedef olup olmadıklarını değerlendirmek için bu konturları daha fazla işlemek isteyebilirsiniz. Bunu yapmak için:

  1. Konturların etrafına sınırlayıcı dikdörtgenler çizmek için boundingRect yöntemini kullanın

  2. LabVIEW örnek kodu, hedef için 5 ayrı oran hesaplar. Bu oranların her biri nominal olarak 1.0’a eşit olmalıdır. Bunu yapmak için, konturları boyuta göre sıralar, ardından en büyüğünden başlayarak, hedef olabilecek her olası kontur çifti için bu değerleri hesaplar ve bir hedef bulursa veya bulduğu en iyi çifti döndürürse durur.

Aşağıdaki formüllerde, her harf sınırlayıcı rektenin (H = Yükseklik, L = Sol, T = Üst, B = Alt, W = Genişlik) bir koordinatını ve sayısal alt simge kontur numarasını (1 en büyük kontur, 2 en büyük ikinci, vb.).

  • Üst yükseklik, toplam yüksekliğin% 40’ı olmalıdır (4 inç / 10 inç):

\[\textit{Group Height} = \frac{H_1}{0.4 (B_2 - T_1)}\]
  • Alt şeridin üstünden üst şeridin üstüne kadar toplam yüksekliğin% 60’ı olmalıdır (6 inç / 10 inç):

\[\textit{dTop} = \frac{T_2 - T_1}{0.6 (B_2 - T_1)}\]
  • Kontur 1’in sol kenarı ile kontur 2’nin sol kenarı arasındaki mesafe, 1. konturun genişliğine göre küçük olmalıdır; daha sonra oranı 1’e ortalamak için 1 ekliyoruz:

\[\textit{LEdge} = \frac{L_1 - L_2}{W_1} + 1\]
  • Her iki konturun genişliği yaklaşık olarak aynı olmalıdır:

\[\textit{Width ratio} = \frac{W_1}{W_2}\]
  • Büyük şerit, küçük şeritten iki kat daha uzun olmalıdır.

\[\textit{Height ratio} = \frac{H_1}{2 H_2}\]

Bu oranların her biri daha sonra hesaplanarak 0-100 arasında bir puana dönüştürülür:

\[100 - (100 \cdot \mathrm{abs}(1 - \textit{Val}))\]
  1. Mesafeyi belirlemek için, üst sınırlayıcı kutunun üstünden alt sınırlayıcı kutunun altına kadar pikselleri ölçün:

\[\textit{distance} = \frac{\textit{Target height in ft.} (10/12) \cdot \textit{YRes}}{2 \cdot \textit{PixelHeight} \cdot \tan (\textit{viewAngle of camera})}\]

LabVIEW örneği, yuvarlak hedefin kenarları algılamada parazite en yatkın olduğu için yüksekliği kullanır (açı kameradan uzaklaştıkça renk daha az yeşil görünür). Bunun dezavantajı, görüntüdeki hedefin piksel yüksekliğinin kamera açısından perspektif bozulmadan etkilenmesidir. Olası düzeltmeler şunları içerir:

  • Bunun yerine genişliği kullanmayı deneyin

  • Yüksekliği çeşitli mesafelerde ampirik olarak ölçün ve bir arama tablosu veya regresyon işlevi oluşturun

  • Kamerayı bir servoya monte edin, hedefi görüntüde dikey olarak ortalayın ve mesafe hesaplaması için servo açısını kullanın (uygun tetiği kendiniz hesaplamanız veya yardım etmesi için bir matematik öğretmeni bulmanız gerekir!)

  • OpenCV kullanarak perspektif bozulmasını düzeltin. Bunu yapmak için, calibrate your camera with OpenCV ile kalibre etmeniz gerekir. Bu, bir distorsiyon matrisi ve kamera matrisi ile sonuçlanacaktır. Mesafe hesaplaması için ölçmek istediğiniz noktaları “correct-doğru” koordinatlarla eşlemek için bu iki matrisi alacak ve onları undistortPoints fonksiyonu ile kullanacaksınız (bu, tüm görüntünün bozulmasını bozmaktan çok daha az CPU yoğunlukludur)