Mục lục:

Raspberry Pi - Mars Rover tự trị với tính năng theo dõi đối tượng OpenCV: 7 bước (có hình ảnh)
Raspberry Pi - Mars Rover tự trị với tính năng theo dõi đối tượng OpenCV: 7 bước (có hình ảnh)

Video: Raspberry Pi - Mars Rover tự trị với tính năng theo dõi đối tượng OpenCV: 7 bước (có hình ảnh)

Video: Raspberry Pi - Mars Rover tự trị với tính năng theo dõi đối tượng OpenCV: 7 bước (có hình ảnh)
Video: Jetson Nano Custom Object Detection - how to train your own AI 2024, Tháng mười một
Anonim
Raspberry Pi - Mars Rover tự trị với tính năng theo dõi đối tượng OpenCV
Raspberry Pi - Mars Rover tự trị với tính năng theo dõi đối tượng OpenCV

Được hỗ trợ bởi Raspberry Pi 3, nhận dạng đối tượng Open CV, cảm biến siêu âm và động cơ DC có hộp số. Rover này có thể theo dõi bất kỳ đối tượng nào mà nó được huấn luyện và di chuyển trên mọi địa hình.

Bước 1: Giới thiệu

Image
Image
Vật liệu & Phần mềm Yêu cầu
Vật liệu & Phần mềm Yêu cầu

Trong Tài liệu hướng dẫn này, chúng tôi sẽ chế tạo một Mars Rover tự động có thể nhận dạng các đối tượng và theo dõi chúng bằng phần mềm Open CV chạy trên Raspberry Pi 3 với tùy chọn sử dụng thiết bị webcam hoặc máy ảnh mâm xôi pi ban đầu. Nó cũng được trang bị một cảm biến siêu âm gắn trên một servo để theo dõi đường đi của nó trong môi trường tối nơi máy ảnh không hoạt động. Tín hiệu nhận được từ Pi được gửi đến IC điều khiển động cơ (L293D) điều khiển động cơ DC 4 x 150RPM được gắn trên thân được chế tạo bằng ống PVC.

Bước 2: Vật liệu & Phần mềm Yêu cầu

Vật liệu & Phần mềm Yêu cầu
Vật liệu & Phần mềm Yêu cầu
Vật liệu & Phần mềm Yêu cầu
Vật liệu & Phần mềm Yêu cầu

Vật liệu thiết yếu

  1. Raspberry Pi (Bất kỳ trừ 0)
  2. Raspberry PI Camera hoặc một webcam
  3. IC điều khiển động cơ L293D
  4. Bánh xe Robot (7x4cm) X 4
  5. Động cơ DC giảm tốc (150RPM) X 4
  6. Ống PVC cho khung xe

Phần mềm yêu cầu

  1. Putty cho SSH trong Pi
  2. Mở CV để nhận dạng đối tượng

Bước 3: Xây dựng Khung gầm Rover

Xây dựng khung gầm Rover
Xây dựng khung gầm Rover
Xây dựng khung gầm Rover
Xây dựng khung gầm Rover
Xây dựng khung gầm Rover
Xây dựng khung gầm Rover

Để xây dựng khung PVC này, bạn sẽ cần

  • 2 X 8"
  • 2 X 4"
  • 4 khớp chữ T

Sắp xếp các ống PVC theo cấu trúc giống như bậc thang và chèn vào các khớp chữ T. Bạn có thể sử dụng chất bịt kín PVC để làm cho các khớp trở nên chắc chắn hơn.

Động cơ DC có hộp số được kết nối với khung ống PVC bằng kẹp và sau đó bánh xe được kết nối với động cơ bằng vít.

Bước 4: Xây dựng lắp ráp máy đo khoảng cách siêu âm

Xây dựng lắp ráp máy đo khoảng cách siêu âm
Xây dựng lắp ráp máy đo khoảng cách siêu âm

Cụm công cụ tìm phạm vi siêu âm được chế tạo bằng cách sử dụng cảm biến siêu âm HC-SR04 được kết nối với động cơ Micro Servo. Cáp được kết nối trước với cảm biến siêu âm trước khi đưa vào hộp nhựa được kết nối với động cơ servo thông qua vít.

Bước 5: Sơ đồ và kết nối điện

Sơ đồ và kết nối điện
Sơ đồ và kết nối điện
Sơ đồ và kết nối điện
Sơ đồ và kết nối điện

Vui lòng thực hiện các kết nối điện theo sơ đồ mạch đính kèm.

Bước 6: Cài đặt SSH và Mở CV

Cài đặt SSH và Mở CV
Cài đặt SSH và Mở CV

Bây giờ, chúng ta cần SSH vào raspberry pi của mình để cài đặt phần mềm cần thiết. Chúng tôi sẽ bắt đầu bằng cách SSHing đến Raspberry Pi của chúng tôi. Đảm bảo rằng Pi của bạn được kết nối với cùng một bộ định tuyến với PC của bạn và bạn biết đó là địa chỉ IP được bộ định tuyến của bạn gán cho nó. Bây giờ, hãy mở dấu nhắc lệnh hoặc PUTTY nếu bạn đang sử dụng Windows và chạy lệnh sau.

ssh [email protected]

IP của Pi của bạn có thể khác, của tôi là 192.168.1.6.

Bây giờ, hãy nhập mật khẩu mặc định của bạn - "raspberry"

Bây giờ, bạn đã có SSH vào số Pi của mình, Hãy bắt đầu bằng cách cập nhật bằng lệnh này.

sudo apt-get update && sudo apt-get nâng cấp

Hãy cài đặt các công cụ dành cho nhà phát triển cần thiết ngay bây giờ, sudo apt-get install build-essential cmake pkg-config

Tiếp theo, chúng ta cần cài đặt một số gói I / O hình ảnh sẽ giúp Pi của chúng ta tìm nạp các định dạng hình ảnh khác nhau từ đĩa.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Bây giờ, một số gói để tìm nạp video, phát trực tiếp và tối ưu hóa hiệu suất OpenCV

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get install libxvidcore-dev libx264-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev

sudo apt-get install libatlas-base-dev gfortran

Chúng tôi cũng cần cài đặt các tệp tiêu đề Python 2.7 và Python 3 để chúng tôi có thể biên dịch OpenCV với các liên kết python

sudo apt-get install python2.7-dev python3-dev

Tải xuống mã nguồn OpenCV

cd ~

wget -O opencv.zip

giải nén opencv.zip

Tải xuống kho lưu trữ opencv_contrib

wget -O opencv_contrib.zip

giải nén opencv_contrib.zip

Bạn cũng nên sử dụng môi trường ảo để cài đặt OpenCV.

sudo pip cài đặt virtualenv virtualenvwrapper

sudo rm -rf ~ /.cache / pip

Bây giờ, virtualenv và virtualenvwrapper đã được cài đặt, chúng ta cần cập nhật ~ /.profile của mình để bao gồm các dòng sau ở cuối

export WORKON_HOME = $ HOME /.virtualenvs export VIRTUALENVWRAPPER_PYTHON = / usr / bin / python3 source /usr/local/bin/virtualenvwrapper.sh

Tạo môi trường ảo python của bạn

mkvirtualenv cv -p python2

chuyển sang môi trường ảo đã tạo

nguồn ~ /.profile

workon cv

Cài đặt NumPy

pip cài đặt numpy

Biên dịch và cài đặt OpenCV

cd ~ / opencv-3.3.0 /

mkdir xây dựng

xây dựng cd

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX = / usr / local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~ / opencv_contrib-3.3.0 / modules / -D BUILD_EXAMPLES = ON..

Cuối cùng biên dịch OpenCV

make -j4

Sau khi lệnh này chạy xong. Tất cả những gì bạn cần làm là cài đặt nó.

sudo thực hiện cấu hình

sudo ldconfig

Bước 7: Chạy mã Python cho Rover

Image
Image

Tạo một tệp Python có tên tracker.py và thêm mã sau vào nó.

sudo nano tracker.py

mã số:-

Chương trình #ASAR

# Chương trình này theo dõi một quả bóng màu đỏ và hướng dẫn một quả mâm xôi pi làm theo nó. import sys sys.path.append ('/ usr / local / lib / python2.7 / site-pack') import cv2 import numpy as np import os import RPi. GPIO as IO IO.setmode (IO. BOARD) IO.setup (7, IO. OUT) IO.setup (15, IO. OUT) IO.setup (13, IO. OUT) IO.setup (21, IO. OUT) IO.setup (22, IO. OUT) def fwd (): IO.output (21, 1) #Left Motor Forward IO.output (22, 0) IO.output (13, 1) #Right Motor Forward IO.output (15, 0) def bac (): IO.output (21, 0) # Left Motor lùi IO.output (22, 1) IO.output (13, 0) #Right Motor lùi IO.output (15, 1) def ryt (): IO.output (21, 0) # IO.output lùi về phía sau Mô tơ (22, 1) IO.output (13, 1) # IO.output về phía trước của Mô tơ bên phải (15, 0) def lft (): IO.output (21, 1) # IO về phía trước của mô tơ.output (22, 0) IO.output (13, 0) #Right Motor lùi IO.output (15, 1) def stp (): IO.output (21, 0) #Left Motor dừng IO.output (22, 0) IO.output (13, 0) #Right Motor dừng IO.output (15, 0) ############################## ##################################################### ###################### def main (): capWebcam = cv2. VideoCapture (0) # khai báo a Đối tượng VideoCapture và liên kết với webcam, 0 => sử dụng webcam thứ nhất # hiển thị độ phân giải gốc in "default Resolution =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) capWebcam.set (cv2. CAP_PROP_FRAME_WIDTH, 320.0) # thay đổi độ phân giải thành 320x240 để xử lý nhanh hơn capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # hiển thị độ phân giải đã cập nhật in "cập nhật độ phân giải =" + str (capWebcam.get)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened () == False: # kiểm tra xem đối tượng VideoCapture được liên kết với webcam in thành công "lỗi: capWebcam không được truy cập thành công / n / n" # nếu không, in thông báo lỗi ra std out os.system ("tạm dừng") # tạm dừng cho đến khi người dùng nhấn phím để người dùng có thể thấy thông báo lỗi return # và chức năng thoát (thoát chương trình) # end if while cv2.waitKey (1)! = 27 và capWebcam.isOpened (): # cho đến khi phím Esc được nhấn hoặc mất kết nối webcam blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # read next frame if not blnFrameReadSuccessful hoặc imgOriginal là Không: # if frame was not read Success in "error: frame not read from webcam / n" # in thông báo lỗi để xuất hệ điều hành os.system ("pause") # pause cho đến khi người dùng nhấn phím để người dùng có thể thấy thông báo lỗi break # exit while loop (thoát khỏi chương trình) # end if imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np.array ([0, 135, 135]), np.array ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. array ([179, 255, 255])) imgThresh = cv2.add (imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur (imgThresh, (3, 3), 2) imgThresh = cv2.dilate (imgThresh, np.ones ((5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape circle = cv2. HoughCircles (imgThresh, cv2). HOUGH_GRADIENT, 5, intRows / 4) # điền vào các vòng tròn có thể thay đổi với tất cả các vòng tròn trong hình ảnh được xử lý nếu các vòng tròn không phải Không có: # dòng này là cần thiết để giữ cho chương trình không bị treo ở dòng tiếp theo nếu không tìm thấy vòng kết nối nào IO.output (7, 1) cho vòng tròn trong vòng tròn [0]: # cho mỗi vòng tròn x, y, radius = circle # ngắt x, y và bán kính in ra "vị trí quả bóng x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # in vị trí quả bóng và bán kính obRadius = int (radius) xAxis = int (x) if obRadius> 0 & obRadius100 & xAxis180: print ("Moving Right") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # vẽ vòng tròn nhỏ màu xanh lục ở tâm của đối tượng được phát hiện cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # vẽ vòng tròn màu đỏ xung quanh đối tượng được phát hiện # end cho # end if else: IO.output (7, 0) cv2.nameWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # tạo cửa sổ, sử dụng WINDOW_AUTOSIZE cho kích thước cửa sổ cố định cv2.nameWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # hoặc sử dụng WINDOW_NORMAL để cho phép thay đổi kích thước cửa sổ cv2.imshow ("imgOriginal", imgOri ginal) # show windows cv2.imshow ("imgThresh", imgThresh) # end while cv2.destroyAllWindows () # remove windows from memory return ###################### ##################################################### ############################## if _name_ == "_main_": main ()

Bây giờ, tất cả những gì còn lại phải làm là chạy chương trình

python tracker.py

Chúc mừng! xe tự lái của bạn đã sẵn sàng! Phần điều hướng dựa trên cảm biến siêu âm sẽ sớm được hoàn thành và tôi sẽ cập nhật hướng dẫn này.

Cảm ơn vì đã đọc!

Đề xuất: