Mục lục:
- Bước 1: NHỮNG ĐIỀU CẦN THIẾT:
- Bước 2: NGUYÊN TẮC LÀM VIỆC:
- Bước 3: NHẬP VÀ XỬ LÝ ĐẦU VÀO:
- Bước 4:
- Bước 5:
- Bước 6: PHẦN CHẾ BIẾN:
- Bước 7:
- Bước 8:
- Bước 9:
- Bước 10:
- Bước 11:
- Bước 12: KIỂM SOÁT CHUYỂN ĐỘNG:
- Bước 13:
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)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
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:
- Trình điều khiển động cơ L298N
- Động cơ DC
- Khung xe rô bốt
- Arduino Uno
- Pin LiPo
- Cáp USB Arduino (dài)
- Thư viện OpenCV với Python
Bước 2: 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:
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:
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:
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:
Bước 8:
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:
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:
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:
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:
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:
Điều khiển bằng cử chỉ đơn giản - Điều khiển đồ chơi RC của bạn bằng chuyển động của cánh tay: 4 bước (có hình ảnh)
Điều khiển bằng cử chỉ đơn giản - Điều khiển đồ chơi RC của bạn bằng chuyển động của cánh tay: Chào mừng bạn đến với 'ible' # 45 của tôi. Cách đây một thời gian, tôi đã tạo một phiên bản RC hoàn chỉnh của BB8 bằng cách sử dụng các phần Lego Star Wars … https://www.instructables.com/id/Whats-Inside-My-R…Khi tôi thấy nó thú vị như thế nào Force Band do Sphero tạo ra, tôi nghĩ: " Ok, tôi c
Esp8266 dựa trên Boost Converter với giao diện người dùng Blynk tuyệt vời với bộ điều chỉnh phản hồi: 6 bước
Esp8266 dựa trên Boost Converter với giao diện người dùng Blynk tuyệt vời với bộ điều chỉnh phản hồi: Trong dự án này, tôi sẽ chỉ cho bạn một cách hiệu quả và phổ biến cách tăng điện áp DC. Tôi sẽ cho bạn thấy việc xây dựng một bộ chuyển đổi tăng cường có thể dễ dàng như thế nào với sự trợ giúp của Nodemcu. Hãy xây dựng nó. Nó cũng bao gồm một vôn kế trên màn hình và một phản hồi
ESP8266 RGB LED STRIP Điều khiển WIFI - NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi - Điều khiển điện thoại thông minh RGB LED STRIP: 4 bước
ESP8266 RGB LED STRIP Điều khiển WIFI | NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi | Điều khiển bằng điện thoại thông minh RGB LED STRIP: Xin chào các bạn trong hướng dẫn này, chúng ta sẽ học cách sử dụng gật đầu hoặc esp8266 làm điều khiển từ xa IR để điều khiển dải LED RGB và Nodemcu sẽ được điều khiển bằng điện thoại thông minh qua wifi. Vì vậy, về cơ bản bạn có thể điều khiển DÂY CHUYỀN LED RGB bằng điện thoại thông minh của mình
Cách chế tạo Robot điều khiển di động - Dựa trên DTMF - Không có Vi điều khiển & Lập trình - Kiểm soát từ mọi nơi trên thế giới - RoboGeeks: 15 bước
Cách chế tạo Robot điều khiển di động | Dựa trên DTMF | Không có Vi điều khiển & Lập trình | Kiểm soát từ mọi nơi trên thế giới | RoboGeeks: Muốn tạo ra một robot có thể được điều khiển từ mọi nơi trên thế giới, Hãy làm điều đó
Giao diện người dùng Android (remotexy) để điều khiển động cơ Servo bằng Arduino và Bluetooth: 7 bước (có hình ảnh)
Giao diện người dùng Android (remotexy) để điều khiển động cơ Servo bằng Arduino và Bluetooth: Trong bài viết này, tôi sẽ cung cấp cho bạn các bước nhanh chóng để tạo Giao diện người dùng Android bằng cách sử dụng Trình tạo giao diện từ xa để điều khiển Động cơ Servo được kết nối với Arduino Mega qua Bluetooth. Video này cho thấy giao diện người dùng sẽ điều khiển tốc độ và vị trí động cơ servo như thế nào