Professional Documents
Culture Documents
Gtcode
Gtcode
Gtcode
sudo raspi-config
Chọn 3 Interface
Chọn P3 VNC -> Yes -> OK
Finish
import cv2#Thư viện OpenCV được sử dụng để xử lý hình ảnh và video trong Python.
import imutils#Thư viện imutils cung cấp các hàm tiện ích để thực hiện các hoạt
động xử lý ảnh đơn giản hơn.
import numpy as np#Thư viện numpy được sử dụng để thao tác với các mảng đa chiều
trong Python.
import math#Thư viện math được sử dụng để tính toán các giá trị toán học trong
Python.
import controlDT#Đây là file code test cũ, code chính thức ở trong con Pi
import time#Thư viện time được sử dụng để tạm dừng chương trình trong một khoảng
thời gian nhất định.
#Tiếp theo là khởi tạo và cấu hình các thiết bị điều khiển:
if check == 1:
w = math.sqrt( ((box[1][0]-box[2][0])**2) + ((box[1][1]-box[2]
[1])**2) )
h = math.sqrt( ((box[2][0]-box[3][0])**2) + ((box[2][1]-box[3]
[1])**2) )
mins, maxs = min(w,h), max(w,h)
x1,x2,y1,y2=0,0,0,0
if w>h:
x1 = (box[0][0]+box[1][0])/2
y1 = (box[0][1]+box[1][1])/2
x2 = (box[2][0]+box[3][0])/2
y2 = (box[2][1]+box[3][1])/2
else:
x1 = (box[1][0]+box[2][0])/2
y1 = (box[1][1]+box[2][1])/2
x2 = (box[0][0]+box[3][0])/2
y2 = (box[0][1]+box[3][1])/2
if x1!=x2:
cv2.line(frame, (int(x1),int(y1)), (int(x2),int(y2)),
(0,255,0), 2)
a = (y2-y1)/(x2-x1)
b = y1 - a*x1
goc=0
if a==0:
goc=0
else:
goc = math.degrees(math.atan2((-b)/a,b))
if goc>90:
goc=goc-90
else:
goc=goc+90
ctr.servoQuay(goc)
ctr.gaptha(0) # thả
ctr.stepper(80,0,0)
ctr.stepper(280,280,280)
ctr.gaptha(1) # gắp
time.sleep(0.5)
ctr.stepper(-100,-50,-50)
ctr.servoQuay(90)
ctr.stepper(-220,0,0)
ctr.stepper(0,50,50)
ctr.stepper(200,200,200)
ctr.gaptha(0) # thả
ctr.stepper(-100,-100,-100)
ctr.stepper(0,-50,-50)
ctr.vegoc()
check = 0
x0 = 800
cap.release()
cap = cv2.VideoCapture(0)
ctr.motorON()
dem = dem + 1
Nếu chiều rộng w lớn hơn chiều cao h, tức là hình chữ nhật nằm ngang, điểm trung
tâm của hai đường chéo sẽ nằm trên hai cạnh ngang của hình chữ nhật. Lúc đó, điểm
trung tâm của cạnh bên trái được tính toán bằng trung điểm của hai điểm (box[0][0],
box[0][1]) và (box[1][0], box[1][1]), điểm trung tâm của cạnh bên phải được tính
toán bằng trung điểm của hai điểm (box[2][0], box[2][1]) và (box[3][0], box[3][1]).
Ngược lại, nếu chiều rộng w nhỏ hơn hoặc bằng chiều cao h, tức là hình chữ nhật nằm
dọc, điểm trung tâm của hai đường chéo sẽ nằm trên hai cạnh dọc của hình chữ nhật.
Lúc đó, điểm trung tâm của cạnh bên trên được tính toán bằng trung điểm của hai
điểm (box[1][0], box[1][1]) và (box[2][0], box[2][1]), điểm trung tâm của cạnh bên
dưới được tính toán bằng trung điểm của hai điểm (box[0][0], box[0][1]) và (box[3]
[0], box[3][1]).
Tổng quát, đoạn mã bên trong vòng lặp này sẽ tính toán tọa độ của hai điểm trung
tâm của hình chữ nhật xoay và lưu kết quả vào biến x1, y1, x2, y2 để sử dụng trong
các xử lý tiếp theo của chương trình.
Trong đoạn mã này, nếu chiều rộng (w) của hình chữ nhật được tìm thấy lớn hơn chiều
cao (h), các điểm trung tâm của đường chéo được tính bằng cách lấy trung điểm giữa
hai đỉnh trên cùng hoặc hai đỉnh dưới cùng của hình chữ nhật. Nếu chiều cao lớn hơn
hoặc bằng chiều rộng, điểm trung tâm của đường chéo được tính bằng cách lấy trung
điểm giữa hai đỉnh kề của hình chữ nhật. Các điểm trung tâm của đường chéo này được
sử dụng để tính góc quay của servo và điều khiển robot để thực hiện việc gắp và vận
chuyển vật thể được nhận diện.
"""