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
1
import numpy as np
2
from PIL import ImageGrab
3
from collections import deque
4
from networktables import NetworkTables
5
import cv2
6
import time
7
import imutils
8
import argparse
9
import cv2 as CV
10
11
x = 0 #programın ileride hata vermemesi için x 0 olarak tanımlıyorum
12
y = 0 # programın ileride hata vermemesi için y 0 olarak tanımlıyorum
13
14
NetworkTables.initialize(server='roborio-6025-frc.local') # Roborio ile iletişim kuruyoruz
15
16
table = NetworkTables.getTable("Vision") # table oluşturuyoruz
17
18
#sari rengin algilanmasi
19
colorLower = (24, 100, 100)
20
colorUpper = (44, 255, 255)
21
#converter.py ile convert ettiğiniz rengi buraya giriniz
22
23
def screen_record():
24
x = 0
25
y = 0
26
r = 0
27
last_time = time.time()
28
while(True):
29
# 800x600 windowed mode
30
printscreen = np.array(ImageGrab.grab(bbox=(0,40,1024,768)))
31
print('Tekrarlanma süresi : {} saniye'.format(time.time()-last_time))
32
last_time = time.time()
33
34
frame = printscreen
35
frame = imutils.resize(frame, width=600)
36
frame = imutils.rotate(frame, angle=0)
37
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
38
mask = cv2.inRange(hsv, colorLower, colorUpper)
39
mask = cv2.erode(mask, None, iterations=2)
40
mask = cv2.dilate(mask, None, iterations=2)
41
cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
42
cv2.CHAIN_APPROX_SIMPLE)[-2]
43
center = None
44
if len(cnts) > 0:
45
c = max(cnts, key=cv2.contourArea)
46
((x, y), radius) = cv2.minEnclosingCircle(c)
47
M = cv2.moments(c)
48
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
49
if radius > 10:
50
cv2.circle(frame, (int(x), int(y)), int(radius),
51
(0, 255, 255), 2)
52
cv2.circle(frame, center, 5, (0, 0, 255), -1)
53
else:
54
x = 0
55
y = 0
56
57
print("x : ")
58
print(x)
59
print("y : ")
60
print(y)
61
table.putNumber("X", x) # roborioya değeri göndermek
62
table.putNumber("Y", y) # roborioya değeri göndermek
63
64
cv2.imshow('frame', frame)
65
cv2.waitKey(1)
66
screen_record()
Copied!
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
1
import edu.wpi.first.wpilibj.networktables.NetworkTable; // Networktables kütüphanesi
2
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser; // smartdashboardan verileri görmek için
3
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
Copied!
Class'ınızın altına networktables'i tanımlayın
1
public static NetworkTable table1 = NetworkTable.getTable("Vision"); // vision adında table çekiliyor
Copied!
Değerleri okumak için 2 tane void oluşturalım.
1
public static double konumX()
2
{
3
return table1.getNumber("X", 0.0); //raspberry pi den gelen x kordinatları
4
}
5
public static double konumY()
6
{
7
return table1.getNumber("Y", 0.0); //raspberry pi den gelen y kordinatları
8
}
Copied!
Değerleri SmartDashboard'a yazdıralım.
1
public void teleopPeriodic() {
2
SmartDashboard.putNumber("Nesnenin X konumu: ", konumX()); // smartdashboarda x konumu yazdır
3
SmartDashboard.putNumber("Nesnenin Y konumu: ", konumY()); // smartdashboarda y konumunu yazdır
4
5
}
Copied!
Motorlarımız Değerlere göre haraket ettirelim!
1
public void autonomousPeriodic() {
2
if(konumX() == 0)
3
{
4
sagmotor1.set(0);
5
sagmotor2.set(0);
6
solmotor1.set(0);
7
solmotor2.set(0);
8
}
9
else if(konumX() < 285) // degerler 285'ten kucukse saga don
10
{
11
sagmotor1.set(0.5); // sag motorları calistir
12
sagmotor2.set(0.5);
13
}
14
else if (konumX() > 295) // degerler 295'ten buyukse sola don
15
{
16
solmotor1.set(0.5); //sol motorlari calistir
17
solmotor2.set(0.5);
18
}
19
20
}
Copied!
Kodların tamamına buradan ulaşabilirsiniz :
FRC-Vision-Processing/robot.java at master · enisgetmez/FRC-Vision-Processing
GitHub
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.
Last modified 2yr ago