LogoLogo
  • FIRST nedir?
  • Fikret Yüksel Foundation
  • Takım Kurma Rehberi
    • Takım Kurma Rehberi
      • FRC Takım Üyeleri
      • FRC Mentorları
      • Robot Odası ve Demirbaşlar
      • Malzeme Kullanımı ve İş Güvenliği
      • Takım İsmi
      • Maddi İhtiyaçlar
      • Sosyal Medya Yönetimi
  • FRC - Yazılım
    • Java ve C/C++
      • FRC için C ++ ve Java Geliştirme Araçları Kurulumu (vscode)
      • Visual Studio Kod Temelleri ve WPILib Uzantısı
      • Robot Programı Oluşturma VSCODE
      • Başlangıç için örnek kodlar
    • FRC Java Temelleri
      • FRC Java Temelleri
      • Aktüatörler kullanma (motorlar, servolar ve röleler)
      • CAN cihazlarının kullanımı
      • WPILib sensörleri
      • Sürücü İstasyonu(Driver Station) Girişleri ve Geri Bildirim
      • Command Based Programlama
    • Labview
      • FRC 2018 için Labview Kurulumu (sadece LabVIEW)
    • VISION PROCESSING - GÖRÜNTÜ İŞLEME
      • Görüntü İşleme Kaynakları
      • Co-Processor - Raspberry Pi
      • Co-Processor - Limelight
      • Co-Processor - Cmucam5 Pixy
      • Co-Processor - Bilgisayar
    • Görüntü İşleme Workshop
      • Co-Processor - Hatalar ve Çözümleri
    • Videolu Java Anlatım
    • Diğer Yazılım İçerikleri
      • FRC için Farklı bir IDE kullanmak
  • FRC Elektronik
    • FRC Kontrol Sisteminin Kablolanması
    • Yapacağınız iş için doğru sensörü seçmek
  • FRC Mekanik
    • Andymark Şase Dokumantasyonu
    • Solidworks Özel Tasarım Dişli Kutusu Yapımı
    • Pnomatik
      • Pnömatik Hava Kaçakları ve Basit Çözümleri
  • İŞ/ÖDÜL/KURALLAR
    • Takım Fonlama
    • Ödüller
    • Video Editleme
  • Takımlardan Gelenler
    • Faydalı Siteler ve Dokumanlar
      • Faydalı Web Sayfaları
        • FRC ile ilgili faydalı linkler !
        • Genel Faydalı Linkler
    • Geçmiş Yıllara ait robot dökümanları
    • Geçmiş yıllara ait iş planları
    • Geçmiş yıllara ait robot yazılımları
    • Geçmiş yıllara ait ödül yazıları
  • Yarışmaya Hazırlanmak
    • Gönüllü Pozisyonları
  • Liste Dışı
    • Bu Sayfaya Nasıl İçerik Eklerim?
Powered by GitBook
On this page
  • Raspberry Pi
  • Gerekli Kütüphanelerin Kurulması
  • Renk işleme için renk değerlerinin oluşturulması
  • Renk İşleme
  • Şekil İşleme
  • Javadan Değerleri Çekin!

Was this helpful?

Export as PDF
  1. FRC - Yazılım
  2. VISION PROCESSING - GÖRÜNTÜ İŞLEME

Co-Processor - Raspberry Pi

PreviousGörüntü İşleme KaynaklarıNextCo-Processor - Limelight

Last updated 6 years ago

Was this helpful?

Raspberry Pi

Merhabalar, bu içerikte sizlerle daha önceden geliştirdiğimiz görüntü işleme komutlarını paylaşacağım. Öncelikle kodların tamamına ulaşmak isterseniz : buradan ulaşabilirsiniz.

Bu kısmı buradan daha detaylı bir şekilde izleyebilirsiniz:

Co-Processor olarak Raspberry PI kullanacağız.

Gerekli Kütüphanelerin Kurulması

Öncelikle görüntü işleme yapacağımız için OpenCV kütüphanelerinden faydalanacağız. OpenCV kütüphanelerinin çalışması için aynı zamanda Numpy kütüphanesini de kurmamız gerekmektedir.

Konsola girmemiz gereken komutlar şu şekildedir: sudo apt install python-numpy python-opencv libopencv-dev

y/n seçeneğine y yanıtını verelim. Bu işlem yaklaşık 5 dakika sürebilir.

Python için pip yani paket yöneticimizi indirmemiz gerekmektedir.

sudo apt install python python-pip

y/n seçeneğine y yanıtını verelim. Ardından

pip install opencv-python

pip install pynetworktables

pip install imutils

komutlarını girelim. Eğer Python 3 kullanıyorsanız, pip komutlarınız şu şekilde olmalı:

pip3 install opencv-python

pip3 install pynetworktables

pip3 install imutils

Her şey tamamlandıktan sonra bu adımda bitmiş demektir. Bir sonraki adıma geçebiliriz.

Renk işleme için renk değerlerinin oluşturulması

En başta renk işlememiz için bize tanımlayacağımız rengin alt ve üst sınırları dediğimiz renk kodu gerekmektedir. Bunun için bir converter yazılımı mevcut. Kodlar bu şekildedir:

import sys
import numpy as np
import cv2
 
blue = sys.argv[1]
green = sys.argv[2]
red = sys.argv[3]  
 
color = np.uint8([[[blue, green, red]]])
hsv_color = cv2.cvtColor(color, cv2.COLOR_BGR2HSV)
 
hue = hsv_color[0][0][0]
 
print("Lower bound is :"),
print("[" + str(hue-10) + ", 100, 100]\n")
 
print("Upper bound is :"),
print("[" + str(hue + 10) + ", 255, 255]")

Kullanımı ise şu şekildedir :

Algılatmak istediğiniz rengin kırmızı, yeşil, mavi renk değerlerini almalısınız. Ardından şu komutu kullanmalısınız:

convert.py red green blue

Lower bound ve upper bound dediğimiz renkleri kopyalayın. İleride kullanacağız.

Renk İşleme

Raspberry PI için python yazılımımız şu şekildedir :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from collections import deque
from networktables import NetworkTables
import numpy as np
import argparse
import cv2
import time
import imutils
x = 0 #programın ileride hata vermemesi için x 0 olarak tanımlıyorum
y = 0 # programın ileride hata vermemesi için y 0 olarak tanımlıyorum
NetworkTables.initialize(server='roborio-6025-frc.local') # Roborio ile iletişim kuruyoruz
table = NetworkTables.getTable("Vision") # table oluşturuyoruz

#sari rengin algilanmasi
colorLower = (24, 100, 100)
colorUpper = (44, 255, 255)
#converter.py ile convert ettiğiniz rengi buraya giriniz
camera = cv2.VideoCapture(0) #  webcamin bagli oldugu port varsayilan 0
while True: #yazılımımız çalıştığı sürece aşağıdaki işlemleri tekrarla


     (grabbed, frame) = camera.read() # grabbed ve frame değişkenini camera.read olarak tanımlıyoruz.

     frame = imutils.resize(frame, width=600) # görüntü genişliğini 600p yapıyoruz
     frame = imutils.rotate(frame, angle=0) # görüntüyü sabitliyoruz

     hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # görüntüyü hsv formatına çeviriyoruz

     mask = cv2.inRange(hsv, colorLower, colorUpper) # hsv formatına dönen görüntünün bizim belirttiğimiz renk sınırları içerisinde olanları belirliyor
     mask = cv2.erode(mask, None, iterations=2) # bizim renklerimizi işaretliyor
     mask = cv2.dilate(mask, None, iterations=2) # bizim renklerimizin genişliğini alıyor


     cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
	 cv2.CHAIN_APPROX_SIMPLE)[-2]
     center = None


     if len(cnts) > 0:

		     c = max(cnts, key=cv2.contourArea)
		     ((x, y), radius) = cv2.minEnclosingCircle(c)
		     M = cv2.moments(c)
		     center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))


		     if radius > 10: #algılanacak hedefin minumum boyutu
			     cv2.circle(frame, (int(x), int(y)), int(radius),
				 (0, 255, 255), 2)
			     cv2.circle(frame, center, 5, (0, 0, 255), -1)
     else:
        x = 0 ##değerlerin sıfırlanması
        y = 0

     print("x : ")
     print(x) # kameradan gelen görüntüde bizim rengimiz varsa x kordinatı
     print("y : ")
     print(y) # kameradan gelen görüntüde bizim rengimiz varsa y kordinatı

     table.putNumber("X", x) # roborioya değeri göndermek
     table.putNumber("Y", y)

Komutların açıklamaları kod içerisinde bulunmaktadır. Eğer Raspberry PI için komutu otomatik olarak indirmek isterseniz wget komutunu kullanabilirsiniz.

wget https://raw.githubusercontent.com/enisgetmez/FRC-Vision-Processing/master/Color%20Detect/vision.py

Artık Java kodlarınızıda yazdıktan sonra robotunuzu enable ettiğinizde , Raspberry PI üzerinden yazılımımızı çalıştırdığımızda değerler otomatik olarak SmartDashboarda düşmeye başlayacaktır.

Kodunuzu Raspberry PI üzerinden çalıştırmak için:

python yazilimadi.py

Şeklinde kullanmanız gerekmektedir. Eğer wget komutunu kullandıysanız yazılım otomatik olarak vision.py olarak gelecektir. Yani çalıştırmak için:

python vision.py

komutunu kullanmanız yeterli olacaktır.

Raspberry Pi kod düzenleme(opsiyonel)

Raspberry Pi ile gelen kodu düzenlemek isterseniz nano komutunu kullanarak düzenleyebilirsiniz.

nano vision.py

Komutunu girip düzenleyeceğiniz satırı düzenledikten sonra ctrl-x tuşlarıyla çıkış yapabilirsiniz.

Şekil İşleme

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import argparse
import cv2
import cv2 as CV 
from networktables import NetworkTables


NetworkTables.initialize(server='roborio-6025-frc.local') # Roborio ile iletişim kuruyoruz
table = NetworkTables.getTable("Vision") # table oluşturuyoruz

cap = cv2.VideoCapture(0) # webcamin bagli oldugu port


while(True):
	# goruntu yakalama
	ret, frame = cap.read()

	# goruntuyu grilestir
			
	output = frame.copy()
	gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
	
	# goruntuyu blurlastir
	gray = cv2.GaussianBlur(gray,(5,5),0);
	gray = cv2.medianBlur(gray,5)

	gray = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
            cv2.THRESH_BINARY,11,3.5)
	
	kernel = np.ones((5,5),np.uint8)
	gray = cv2.erode(gray,kernel,iterations = 1)

	gray = cv2.dilate(gray,kernel,iterations = 1)
	circles = cv2.HoughCircles(gray, cv2.cv.CV_HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0) #python2 icin
#	circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20, param1=40, param2=45, minRadius=0, maxRadius=0) # python3 icin 
    # (x−xcenter)2+(y−ycenter)2=r2   (xcenter,ycenter) 
	# kalibre
	# daireyi isle
	
	if circles is not None:

		circles = np.round(circles[0, :]).astype("int")
		
		
		for (x, y, r) in circles:
	
			cv2.circle(output, (x, y), r, (0, 255, 0), 4)
			cv2.rectangle(output, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)

			
			print ("X kordinat: ")
			print (x) # x kordinatı
			print ("Y Kordinat: ")
			print (y) # y kordinatı
			print ("Radius: ")
			print (r) # cisimin büyüklüğü
			table.putNumber("X", x) # roborioya değeri göndermek
			table.putNumber("Y", y)
			#cv2.imshow('frame',output) # ekranda göster
			if cv2.waitKey(1) & 0xFF == ord('q'):
				break
cap.release()
cv2.destroyAllWindows()

Komutların açıklamaları kod içerisinde bulunmaktadır. Eğer Raspberry PI için komutu otomatik olarak indirmek isterseniz wget komutunu kullanabilirsiniz.

wget https://raw.githubusercontent.com/enisgetmez/FRC-Vision-Processing/master/Figure%20Detect/circle.py

Artık robotunuzu enable ettiğinizde , Raspberry PI üzerinden yazılımımızı çalıştırdığımızda değerler otomatik olarak smart dashboarda düşmeye başlayacaktır.

Kodunuzu Raspberry PI üzerinden çalıştırmak için:

python yazilimadi.py

Şeklinde kullanmanız gerekmektedir. Eğer wget komutunu kullandıysanız yazılım otomatik olarak vision.py olarak gelecektir. Yani çalıştırmak için:

python circle.py

komutunu kullanmanız yeterli olacaktır.

Javadan Değerleri Çekin!

Kütüphaneleri import edin

import edu.wpi.first.wpilibj.networktables.NetworkTable; // Networktables kütüphanesi
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; // smartdashboardan verileri görmek için
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;

Class'ınızın altına networktables'i tanımlayın

	public static NetworkTable table1 = NetworkTable.getTable("Vision"); // vision adında table çekiliyor

Değerleri okumak için 2 tane void oluşturalım.

public static double konumX()
	{
		return table1.getNumber("X", 0.0); //raspberry pi den gelen x kordinatları
	}
	public static double konumY() 
	{
		return table1.getNumber("Y", 0.0); //raspberry pi den gelen y kordinatları
	}

Değerleri SmartDashboard'a yazdıralım.

	public void teleopPeriodic() {
		SmartDashboard.putNumber("Nesnenin X konumu: ", konumX()); // smartdashboarda x konumu yazdır
		SmartDashboard.putNumber("Nesnenin Y konumu: ", konumY()); // smartdashboarda y konumunu yazdır

	}

Motorlarımız Değerlere göre haraket ettirelim!

	public void autonomousPeriodic() {
	    if(konumX() == 0)
	{
	sagmotor1.set(0);
	sagmotor2.set(0);
	solmotor1.set(0);
	solmotor2.set(0);
	}
		else if(konumX() < 285) // degerler 285'ten kucukse saga don
		{
		sagmotor1.set(0.5); // sag motorları calistir
		sagmotor2.set(0.5);
		}
		else if (konumX() > 295) // degerler 295'ten buyukse sola don
		{
		solmotor1.set(0.5); //sol motorlari calistir
		solmotor2.set(0.5);
		}

	}

Kodların tamamına buradan ulaşabilirsiniz :

Artık robotunuzu enable ettiğinizde , yazılımımızı çalıştırdığımızda değerler otomatik olarak SmartDashboard düşmeye başlayacaktır.

Dilerseniz bu kodlara ulaşabilirsiniz. Github üzerinden kolayca wget komutu ile indirebilirsiniz.

wget

Github hesabımdan
https://raw.githubusercontent.com/enisgetmez/BAUROV-Autonomous/master/converter.py
https://github.com/enisgetmez/FRC-Vision-Processing
FRC-Vision-Processing/robot.java at master · enisgetmez/FRC-Vision-ProcessingGitHub
Logo
Görüntü İşleme Workshop | Fikret Yüksel Foundation #FRCTurkeyYouTube
Logo