Mục lục:
- Bước 1: Giới thiệu
- Bước 2: Vật liệu & Phần mềm Yêu cầu
- Bước 3: Xây dựng Khung gầm Rover
- Bước 4: Xây dựng lắp ráp máy đo khoảng cách siêu âm
- Bước 5: Sơ đồ và kết nối điện
- Bước 6: Cài đặt SSH và Mở CV
- Bước 7: Chạy mã Python cho Rover
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)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Đượ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
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 thiết yếu
- Raspberry Pi (Bất kỳ trừ 0)
- Raspberry PI Camera hoặc một webcam
- IC điều khiển động cơ L293D
- Bánh xe Robot (7x4cm) X 4
- Động cơ DC giảm tốc (150RPM) X 4
- Ống PVC cho khung xe
Phần mềm yêu cầu
- Putty cho SSH trong Pi
- 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 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
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
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
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.
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
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:
Theo dõi đối tượng Opencv: 3 bước
Theo dõi đối tượng Opencv: Phát hiện đối tượng di chuyển là một kỹ thuật được sử dụng trong xử lý hình ảnh và thị giác máy tính. Nhiều khung hình liên tiếp từ một video được so sánh bằng nhiều phương pháp khác nhau để xác định xem có phát hiện đối tượng chuyển động nào không. Tính năng phát hiện đối tượng chuyển động đã được sử dụng cho wi
Theo dõi & theo dõi các cửa hàng nhỏ: 9 bước (có hình ảnh)
Theo dõi & theo dõi cho các cửa hàng nhỏ: Đây là một hệ thống dành cho các cửa hàng nhỏ được cho là gắn vào xe đạp điện hoặc xe tay ga điện tử để giao hàng trong phạm vi ngắn, ví dụ như một tiệm bánh muốn giao bánh ngọt. Theo dõi và theo dõi nghĩa là gì? Theo dõi và theo dõi là một hệ thống được sử dụng bởi ca
Trượt Máy Ảnh Theo Dõi Đối Tượng Với Trục Xoay. 3D được in & xây dựng trên bộ điều khiển động cơ DC RoboClaw & Arduino: 5 bước (có hình ảnh)
Trượt Máy Ảnh Theo Dõi Đối Tượng Với Trục Xoay. 3D được in & xây dựng trên bộ điều khiển động cơ DC RoboClaw & Arduino: Dự án này là một trong những dự án yêu thích của tôi vì tôi đã kết hợp sở thích làm video với DIY. Tôi đã luôn xem xét và muốn mô phỏng những cảnh quay điện ảnh đó trong những bộ phim trong đó máy ảnh di chuyển trên màn hình trong khi lia để theo dõi
Theo dõi thời tiết M5Stack M5stick C dựa trên ESP32 với DHT11 - Theo dõi nhiệt độ độ ẩm & chỉ số nhiệt trên M5stick-C với DHT11: 6 bước
Theo dõi thời tiết M5Stack M5stick C dựa trên ESP32 với DHT11 | Theo dõi nhiệt độ độ ẩm và chỉ số nhiệt trên M5stick-C Với DHT11: Xin chào các bạn, trong phần hướng dẫn này, chúng ta sẽ học cách giao tiếp cảm biến nhiệt độ DHT11 với m5stick-C (một bảng phát triển của m5stack) và hiển thị nó trên màn hình của m5stick-C. Vì vậy, trong hướng dẫn này, chúng ta sẽ đọc nhiệt độ, độ ẩm & nhiệt tôi
Robot ăn xin với tính năng theo dõi và điều khiển khuôn mặt bằng bộ điều khiển Xbox - Arduino: 9 bước (có hình ảnh)
Robot ăn xin với tính năng theo dõi và điều khiển khuôn mặt bằng bộ điều khiển Xbox - Arduino: Chúng tôi sẽ tạo ra một robot ăn xin. Robot này sẽ cố gắng chọc tức hoặc thu hút sự chú ý của những người đi qua. Nó sẽ phát hiện khuôn mặt của họ và cố gắng bắn tia laze vào họ. Nếu bạn cho robot một đồng xu, nó sẽ hát một bài hát và nhảy. Robot sẽ cần một