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
  • Bilgisayarı Co-processor olarak kullanmak
  • Renk İşlemek
  • Javadan Değerleri Çekin!

Was this helpful?

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

Co-Processor - Bilgisayar

Bilgisayarı Co-processor olarak kullanmak

Renk İşlemek

Eğer Raspberry Pi kullanmadan doğrudan bilgisayar aracılığı ile görüntü işlemek için bilgisayarınıza Python ve belirli kütüphaneleri kurmanız gerekmektedir. Gerekli kütüphaneleri şu şekilde kurabilirsiniz:

pip install pillow

pip install opencv-python

pip install pynetworktables

pip install imutils

import numpy as np
from PIL import ImageGrab
from collections import deque
from networktables import NetworkTables
import cv2
import time
import imutils
import argparse
import cv2 as CV

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

def screen_record():
    x = 0
    y = 0
    r = 0
    last_time = time.time()
    while(True):
        # 800x600 windowed mode
        printscreen =  np.array(ImageGrab.grab(bbox=(0,40,1024,768)))
        print('Tekrarlanma süresi : {} saniye'.format(time.time()-last_time))
        last_time = time.time()

        frame = printscreen
        frame = imutils.resize(frame, width=600)
        frame = imutils.rotate(frame, angle=0)
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        mask = cv2.inRange(hsv, colorLower, colorUpper)
        mask = cv2.erode(mask, None, iterations=2)
        mask = cv2.dilate(mask, None, iterations=2)
        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:
                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
            y = 0

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

        cv2.imshow('frame', frame)
        cv2.waitKey(1)
screen_record()

Kodunuzu yazıp kaydettikten sonra çalıştırmak için konsoldan şu komutu girmeniz gerekmektedir:

python yazilimadi.py

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'a düşmeye başlayacaktır.

PreviousCo-Processor - Cmucam5 PixyNextGörüntü İşleme Workshop

Last updated 6 years ago

Was this helpful?

LogoFRC-Vision-Processing/robot.java at master · enisgetmez/FRC-Vision-ProcessingGitHub