add netowrking between pi and laptop, basically add all the components together

video
Cole Deck 5 years ago
parent 47eb71057f
commit 6524ba6cfe

@ -1,10 +1,29 @@
import math import math
import serial
import RPi.GPIO as gpio
import time
ser = serial.Serial('/dev/ttyUSB0', 115200)
gpio.setmode(gpio.BCM)
gpio.setup(13, gpio.OUT)
pwm = gpio.PWM(13, 100)
pwm.start(5)
def goToBin(bin): def goToBin(bin):
if bin % 2 == 0:
direction = "right"
else:
direction = "left"
adjustedBin = math.floor(bin / 2) adjustedBin = math.floor(bin / 2)
distance = adjustedBin * 18 distance = adjustedBin * 18
time = 0.5 + 0.93 * adjustedBin delay = 0.5 + 0.93 * adjustedBin
command = 'G0 X'
command += distance
ser.write(command)
time.sleep(delay)
if bin % 2 == 0: # tilt to right
pwm.ChangeDutyCycle(0)
time.sleep(1)
pwm.ChangeDutyCycle(20)
else:
pwm.ChangeDutyCycle(40)
time.sleep(1)
pwm.ChangeDutyCycle(20)
ser.write(b'G0 X0')
time.sleep(delay)

@ -0,0 +1,25 @@
import socket
import sort
import control_motor
import control_pixel
host = socket.gethostname()
port = 9001 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'Connected to server!')
control_pixel.ledOn()
while True:
try:
data = s.recv(1024)
if not data: break
print("Found "+data)
selectedBin = sort.sort(data)
control_pixel.ledOff()
control_motor.goToBin(selectedBin)
control_pixel.ledOn()
s.sendall(b'Continue')
except socket.error:
print("Error Occured.")
break
s.close()

@ -0,0 +1,10 @@
import socket
host = socket.gethostname()
port = 12345 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))

@ -3,6 +3,10 @@ import detect
import sort import sort
import timeit import timeit
import cv2 import cv2
import control_motor
import socket
import time
from imutils.video import FPS from imutils.video import FPS
calibration_width = 0.75 calibration_width = 0.75
image = "img7.jpg" image = "img7.jpg"
@ -24,7 +28,8 @@ def go():
break break
if valid: if valid:
print("Found " + itema) print("Found " + itema)
bin = sort.sort(itema) selectedBin = sort.sort(itema)
control_motor.goToBin(selectedBin)
if not video: if not video:
elapsed_time = timeit.timeit(go, number=1)/1 elapsed_time = timeit.timeit(go, number=1)/1
@ -33,13 +38,29 @@ if not video:
else : else :
#capture = cv2.VideoCapture('tcpclientsrc port=5001 host=192.168.1.129 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! videorate ! video/x-raw,framerate=5/1 ! appsink', cv2.CAP_GSTREAMER) #capture = cv2.VideoCapture('tcpclientsrc port=5001 host=192.168.1.129 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! videorate ! video/x-raw,framerate=5/1 ! appsink', cv2.CAP_GSTREAMER)
capture = cv2.VideoCapture('udpsrc port=9000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! avdec_h264 ! videoconvert ! appsink sync=false', cv2.CAP_GSTREAMER) capture = cv2.VideoCapture('udpsrc port=9000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! avdec_h264 ! videoconvert ! appsink sync=false', cv2.CAP_GSTREAMER)
host = '' # Symbolic name meaning all available interfaces
port = 9001 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
conn, addr = s.accept()
print('Connected to', addr)
time.sleep(1)
waitForPi = True
while waitForPi is True:
try:
data = conn.recv(1024)
if not data: break
print "Client: "+data
waitForPi = False
except socket.error:
print("Error Occured.")
break
# server command for imx135 camera ./video2stdout | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.43.152 port=5001 # server command for imx135 camera ./video2stdout | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.43.152 port=5001
# server command for udp: ./video2stdout | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=192.168.43.40 port=9000 # server command for udp: ./video2stdout | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=192.168.43.40 port=9000
#ret,frame = capture.read()
#detect.detect(calibration_width, "img7.jpg", True, False)
#detect.detect(calibration_width, frame, True, True)
x = 0 x = 0
currentItem = ""
samples = 0
while True: while True:
ret = capture.grab() ret = capture.grab()
x+=1 x+=1
@ -49,8 +70,45 @@ else :
#print('frame') #print('frame')
if x > 1: if x > 1:
ret,frame = capture.retrieve() ret,frame = capture.retrieve()
list,output = detect.detect(calibration_width, frame, True, True) items,output = detect.detect(calibration_width, frame, True, True)
cv2.imshow('Item Sorter', output) cv2.imshow('Item Sorter', output)
x = 0 x = 0
if "Penny" in items:
items.remove("Penny")
itema = items[0]
valid = True
for item in items:
if item != itema:
print("Too many items!")
valid = False
break
if valid:
if currentItem == itema:
samples += 1
else:
currentItem = itema
samples = 0
if samples == 5:
samples = 0
sendString(currentItem)
waitForPi = True
while waitForPi is True:
try:
data = conn.recv(1024)
if not data: break
if data == "Continue":
waitForPi = False
except socket.error:
print("Error Occured.")
break
if cv2.waitKey(1)&0xFF == ord('q'): if cv2.waitKey(1)&0xFF == ord('q'):
break break
def sendString(string):
print("Found " + string)
try:
conn.sendall(string)
except socket.error:
print("Error Occured.")
break
Loading…
Cancel
Save