Mục lục:

Diều hâu: Robot điều khiển bằng cử chỉ bằng tay sử dụng giao diện dựa trên xử lý hình ảnh: 13 bước (có hình ảnh)
Diều hâu: Robot điều khiển bằng cử chỉ bằng tay sử dụng giao diện dựa trên xử lý hình ảnh: 13 bước (có hình ảnh)

Video: Diều hâu: Robot điều khiển bằng cử chỉ bằng tay sử dụng giao diện dựa trên xử lý hình ảnh: 13 bước (có hình ảnh)

Video: Diều hâu: Robot điều khiển bằng cử chỉ bằng tay sử dụng giao diện dựa trên xử lý hình ảnh: 13 bước (có hình ảnh)
Video: Nếu Cơ Thể Của Bạn Có Thể Làm Điều Đó, Bạn Là Một Trên 1 Triệu 2024, Tháng bảy
Anonim
Diều hâu: Robot điều khiển bằng cử chỉ bằng tay sử dụng giao diện dựa trên xử lý hình ảnh
Diều hâu: Robot điều khiển bằng cử chỉ bằng tay sử dụng giao diện dựa trên xử lý hình ảnh

Gesture Hawk đã được giới thiệu trong TechEvince 4.0 như một giao diện người-máy xử lý hình ảnh đơn giản. Tiện ích của nó nằm ở chỗ không cần thêm cảm biến hoặc thiết bị đeo ngoại trừ một chiếc găng tay để điều khiển chiếc xe robot chạy trên nguyên tắc truyền động vi sai. Trong phần hướng dẫn này, chúng tôi sẽ đưa bạn qua nguyên tắc hoạt động đằng sau tính năng theo dõi đối tượng và phát hiện cử chỉ được sử dụng trong hệ thống. Mã nguồn của dự án này có thể được tải xuống từ Github thông qua liên kết:

Bước 1: NHỮNG ĐIỀU CẦN THIẾT:

NHỮNG ĐIỀU CẦN THIẾT
NHỮNG ĐIỀU CẦN THIẾT
NHỮNG ĐIỀU CẦN THIẾT
NHỮNG ĐIỀU CẦN THIẾT
NHỮNG ĐIỀU CẦN THIẾT
NHỮNG ĐIỀU CẦN THIẾT
NHỮNG ĐIỀU CẦN THIẾT
NHỮNG ĐIỀU CẦN THIẾT
  1. Trình điều khiển động cơ L298N
  2. Động cơ DC
  3. Khung xe rô bốt
  4. Arduino Uno
  5. Pin LiPo
  6. Cáp USB Arduino (dài)
  7. Thư viện OpenCV với Python

Bước 2: NGUYÊN TẮC LÀM VIỆC:

NGUYÊN TẮC LÀM VIỆC
NGUYÊN TẮC LÀM VIỆC

Gesture Hawk là một hệ thống xử lý ba giai đoạn như bạn có thể thấy trong sơ đồ trên.

Bước 3: NHẬP VÀ XỬ LÝ ĐẦU VÀO:

NHẬP VÀ XỬ LÝ ĐẦU VÀO
NHẬP VÀ XỬ LÝ ĐẦU VÀO

Nắm bắt đầu vào có thể được hiểu theo các loại rộng hơn được đưa ra trong sơ đồ trên.

Để tách hình bàn tay ra khỏi môi trường, chúng ta cần sử dụng che hoặc lọc một màu xác định (trong trường hợp này là - xanh tím '). Để làm điều đó, bạn cần phải chuyển đổi hình ảnh từ định dạng BGR sang HSV có thể được thực hiện bằng cách sử dụng đoạn mã sau.

hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV)

Bây giờ, bước tiếp theo là tìm phạm vi thông số HSV mong muốn để trích xuất bàn tay thông qua mặt nạ hoặc bộ lọc. Đối với điều này, cách tốt nhất là sử dụng các thanh theo dõi để tìm một phạm vi phù hợp. Đây là ảnh chụp màn hình của thanh theo dõi được sử dụng cho dự án này.

Bước 4:

Hình ảnh
Hình ảnh

Bước 5:

Ở đây, có một đoạn mã được cung cấp bên dưới để tạo một thanh theo dõi như vậy để xây dựng mặt nạ:

nhập cv2

import numpy as npdef nothing (x): pass cv2.nameWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, nothing) cv2.createTrackbar ('l_S ',' image ', 50, 255, nothing) cv2.createTrackbar (' l_V ',' image ', 50, 255, nothing) cv2.createTrackbar (' h_H ',' image ', 130, 255, nothing) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing) trong khi (1): _, frame = img.read ()

hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'image') lS = cv2.getTrackbarPos ('l_S', 'image') lV = cv2.getTrackbarPos ('l_V', 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') Lower_R = np. array ([lH, lS, lV]) high_R = np.array ([hH, hS, hV]) mask = cv2.inRange (hsv, Lower_R, Higher_R) res = cv2.bitwise_and (frame, frame, mask = mask) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()

Bước 6: PHẦN CHẾ BIẾN:

PHẦN CHẾ BIẾN
PHẦN CHẾ BIẾN

Chà, chúng ta đã có hình dạng hình học của một bàn tay, bây giờ đã đến lúc khai thác nó và sử dụng nó để tìm ra cử chỉ của bàn tay.

Lồi Hull:

Thông qua thân tàu lồi, chúng tôi cố gắng lắp một đa giác gần đúng thông qua các điểm cực trị có trong hình dạng. Hình ảnh bên trái cho thấy đa giác gần đúng đã được gán cho hình dạng với các điểm lồi được đánh dấu bằng màu đỏ.

Điểm lồi là những điểm trong hình nằm xa nhất từ một cạnh của đa giác gần đúng này. Nhưng, vấn đề với vỏ tàu lồi là trong quá trình tính toán của nó, chúng ta sẽ nhận được một mảng gồm tất cả các điểm lồi nhưng thứ chúng ta cần là điểm lồi có đầu nhọn màu xanh lam. Chúng tôi sẽ cho bạn biết lý do tại sao nó được yêu cầu.

Để tìm điểm lồi này, chúng ta cần áp dụng công thức khoảng cách vuông góc để tìm khoảng cách của điểm lồi với cạnh gần nhất. Chúng tôi quan sát thấy rằng điểm nhọn màu xanh có khoảng cách tối đa so với mặt bên và do đó chúng tôi nhận được điểm này.

Bước 7:

Hình ảnh
Hình ảnh

Bước 8:

Hình ảnh
Hình ảnh

Tiếp theo chúng ta cần tìm độ nghiêng của đoạn thẳng nối đầu ngón tay cái (hoặc điểm cực viễn) đến điểm lồi này với phương ngang.

Bước 9:

Hình ảnh
Hình ảnh

Trong trường hợp trên, góc α phải nằm trong khoảng từ 0 đến 90 độ nếu cử chỉ rẽ trái. Đó là tan (α) nên dương.

Bước 10:

Hình ảnh
Hình ảnh

Trong trường hợp trên, góc α phải nằm trong khoảng từ 180 đến 90 độ nếu cử chỉ rẽ phải. Đó là tan (α) nên âm.

Do đó, Nếu Tan α là dương thì Rẽ trái. Nếu Tan α là âm thì Rẽ phải. Bây giờ, đã đến lúc xem cách phát hiện lệnh dừng quan trọng nhất.

Ở đây, một tỷ lệ xác định (được tìm thấy bằng cách bắn trúng và thử nghiệm) được kiểm tra và trong các trường hợp tối đa, tỷ lệ khoảng cách này vẫn nằm trong phạm vi cụ thể này.

Bước 11:

Hình ảnh
Hình ảnh

Cuối cùng, cử chỉ chuyển động về phía trước được phân tích bằng hàm matchShape () trong OpenCV. Hàm này so sánh hình dạng của hai bộ đếm, trong trường hợp này, giữa ví dụ đào tạo ở bên phải trong hình trên với đường bao ở phía bên trái của hình trên. Nó trả về một giá trị nằm trong khoảng từ 0 đến 2 hoặc 3, tùy theo biến thể có trong hình dạng của hai đường viền. Đối với đường bao giống hệt nhau, nó trả về 0.

ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)

Ở đây, cn1 và cnt2 là hai đường bao sẽ được so sánh.

Bước 12: KIỂM SOÁT CHUYỂN ĐỘNG:

KIỂM SOÁT CHUYỂN ĐỘNG
KIỂM SOÁT CHUYỂN ĐỘNG

PySerial:

Chúng tôi đã sử dụng thư viện PySerial của python để chuyển đổi dữ liệu đã xử lý thành dữ liệu nối tiếp để giao tiếp với Arduino Uno thông qua Cáp USB Arduino. Sau khi opencv phát hiện một cử chỉ cụ thể, chúng tôi đã tạo một biến tạm thời nói ‘x’ và gán cho nó một số giá trị duy nhất và chuyển đổi nó thành đầu vào nối tiếp bằng cách sử dụng dòng lệnh sau: -

nhập nối tiếp # để nhập thư viện Pyserial

serial. Serial ('', baudrate = '9600', timeout = '0') # thiết lập đầu ra nối tiếp.. TÊN CỔNG là tên cổng mà truyền dữ liệu sẽ xảy ra.

serial.write (b'x ') # x là bảng chữ cái được gửi đến cổng… b là chuyển chuỗi này thành byte.

Xử lý Arduino:

Giờ đây arduino được mã hóa theo cách mà mỗi x nối tiếp khác nhau được ánh xạ tuyến tính tới một hành động nhất định chịu trách nhiệm cho chuyển động trơn tru của robot (giả sử phát hiện cử chỉ bên trái sẽ kích hoạt động cơ bên phải quay sang trái). Chúng ta có thể điều khiển chuyển động của từng bánh xe theo phương tịnh tiến cũng như quay bằng cách thay đổi mã đúng cách.

Trình điều khiển động cơ L298N: -

Trình điều khiển động cơ được sử dụng làm trung gian giữa động cơ và nguồn điện vì động cơ không thể được cấp điện trực tiếp do xếp hạng điện áp thấp. Pin Li-Po được kết nối với đầu vào 12V của nó và chúng tôi kết nối ổ cắm 5V của arduino với ổ cắm đầu vào 5V của trình điều khiển động cơ cuối cùng kết nối đất của Li-Po cũng như arduino trong ổ cắm nối đất chung của trình điều khiển động cơ.

Bây giờ các thiết bị đầu cuối của động cơ được kết nối tại các ổ cắm đã cho. Cuối cùng, chúng tôi kết nối các thiết bị đầu cuối đầu vào cho động cơ với các ổ cắm đầu ra PWM của arduino cho phép chúng tôi tự do quyết định các khía cạnh quay và dịch của chuyển động một cách chính xác.

Đề xuất: