Πίνακας περιεχομένων:

Raspberry Pi - Αυτόνομο Mars Rover με OpenCV Object Tracking: 7 βήματα (με εικόνες)
Raspberry Pi - Αυτόνομο Mars Rover με OpenCV Object Tracking: 7 βήματα (με εικόνες)

Βίντεο: Raspberry Pi - Αυτόνομο Mars Rover με OpenCV Object Tracking: 7 βήματα (με εικόνες)

Βίντεο: Raspberry Pi - Αυτόνομο Mars Rover με OpenCV Object Tracking: 7 βήματα (με εικόνες)
Βίντεο: Remote controlled Spy Rover with Raspberry Pi 2024, Νοέμβριος
Anonim
Raspberry Pi - Αυτόνομο Mars Rover με OpenCV Object Tracking
Raspberry Pi - Αυτόνομο Mars Rover με OpenCV Object Tracking

Τροφοδοτείται από Raspberry Pi 3, Ανοιχτή αναγνώριση αντικειμένων CV, αισθητήρες υπερήχων και κινητήρες συνεχούς ρεύματος. Αυτό το rover μπορεί να παρακολουθεί οποιοδήποτε αντικείμενο έχει εκπαιδευτεί και να κινείται σε οποιοδήποτε έδαφος.

Βήμα 1: Εισαγωγή

Image
Image
Απαιτείται Υλικό & Λογισμικό
Απαιτείται Υλικό & Λογισμικό

Σε αυτό το Instructables, πρόκειται να κατασκευάσουμε ένα Αυτόνομο Mars Rover το οποίο θα μπορεί να αναγνωρίζει αντικείμενα και να τα παρακολουθεί χρησιμοποιώντας το λογισμικό Open CV που λειτουργεί σε Raspberry Pi 3 με δυνατότητα χρήσης κάμερας web ή αρχικής κάμερας raspberry pi. Είναι επίσης εξοπλισμένο με έναν υπερηχητικό αισθητήρα τοποθετημένο σε σερβο για να παρακολουθεί τον δρόμο του σε σκοτεινά περιβάλλοντα όπου η κάμερα δεν θα λειτουργούσε. Τα σήματα που λαμβάνονται από το Pi αποστέλλονται στο IC του οδηγού κινητήρα (L293D), το οποίο κινεί κινητήρες DC 4 x 150RPM τοποθετημένους σε σώμα κατασκευασμένο με σωλήνες PVC.

Βήμα 2: Απαιτούνται υλικά και λογισμικό

Απαιτείται Υλικό & Λογισμικό
Απαιτείται Υλικό & Λογισμικό
Απαιτείται Υλικό & Λογισμικό
Απαιτείται Υλικό & Λογισμικό

Απαιτούμενα υλικά

  1. Raspberry Pi (κάθε άλλο παρά μηδέν)
  2. Raspberry PI Camera ή κάμερα web
  3. IC οδηγού κινητήρα L293D
  4. Τροχοί ρομπότ (7x4cm) Χ 4
  5. Geared DC Motors (150RPM) X 4
  6. Σωλήνες PVC για σασί

Απαιτείται λογισμικό

  1. Στόκος για SSH ing το Pi
  2. Ανοίξτε το βιογραφικό για αναγνώριση αντικειμένου

Βήμα 3: Χτίζοντας το σασί του Rover

Κατασκευή του πλαισίου Rover
Κατασκευή του πλαισίου Rover
Κατασκευή του πλαισίου Rover
Κατασκευή του πλαισίου Rover
Κατασκευή του πλαισίου Rover
Κατασκευή του πλαισίου Rover

Για να φτιάξετε αυτό το πλαίσιο PVC, θα χρειαστείτε

  • 2 Χ 8"
  • 2 Χ 4"
  • 4 T-Joints

Τακτοποιήστε τους σωλήνες PVC σε δομή που μοιάζει με σκάλα και εισάγετε στις αρθρώσεις Τ. Μπορείτε να χρησιμοποιήσετε το στεγανωτικό PVC για να κάνετε τις αρθρώσεις ακόμα πιο δυνατές.

Οι κινητήρες συνεχούς ρεύματος συνδέονται με το πλαίσιο του σωλήνα PVC χρησιμοποιώντας σφιγκτήρες και στη συνέχεια οι τροχοί συνδέονται με τους κινητήρες χρησιμοποιώντας βίδες.

Βήμα 4: Κατασκευή συναρμολόγησης υπερηχητικού εύρους εύρους

Δημιουργία συναρμολόγησης υπερηχητικού εύρους εύρους
Δημιουργία συναρμολόγησης υπερηχητικού εύρους εύρους

Η διάταξη ανίχνευσης υπερήχων κατασκευάζεται χρησιμοποιώντας έναν αισθητήρα υπερήχων HC-SR04 συνδεδεμένο με κινητήρα Micro Servo. Τα καλώδια συνδέονται προηγουμένως με τον αισθητήρα υπερήχων πριν τοποθετηθούν στην πλαστική θήκη που συνδέεται με τον σερβοκινητήρα μέσω βιδών.

Βήμα 5: Διαγράμματα και ηλεκτρικές συνδέσεις

Σχήματα και ηλεκτρικές συνδέσεις
Σχήματα και ηλεκτρικές συνδέσεις
Σχήματα και ηλεκτρικές συνδέσεις
Σχήματα και ηλεκτρικές συνδέσεις

Κάντε τις ηλεκτρικές συνδέσεις σύμφωνα με το συνημμένο διάγραμμα κυκλώματος.

Βήμα 6: SSH και Άνοιγμα εγκατάστασης βιογραφικού

SSH και Open CV Installation
SSH και Open CV Installation

Τώρα, πρέπει να κάνουμε SSH στο raspberry pi για να εγκαταστήσουμε το απαιτούμενο λογισμικό. Θα ξεκινήσουμε με SSHing στο Raspberry Pi μας. Βεβαιωθείτε ότι το Pi σας είναι συνδεδεμένο στον ίδιο δρομολογητή με τον υπολογιστή σας και γνωρίζετε ότι είναι η διεύθυνση IP που του έχει εκχωρηθεί από το δρομολογητή σας. Τώρα, ανοίξτε μια γραμμή εντολών ή PUTTY εάν χρησιμοποιείτε Windows και εκτελέστε την ακόλουθη εντολή.

ssh [email protected]

Η IP του Pi σας μπορεί να είναι διαφορετική, η δική μου είναι 192.168.1.6.

Τώρα, εισαγάγετε τον προεπιλεγμένο κωδικό πρόσβασής σας - "raspberry"

Τώρα, που έχετε SSH'd στο Pi σας, ας ξεκινήσουμε ενημερώνοντας με αυτήν την εντολή.

sudo apt-get ενημέρωση && sudo apt-get αναβάθμιση

Ας εγκαταστήσουμε τώρα τα απαιτούμενα εργαλεία προγραμματιστή, sudo apt-get install build-essential cmake pkg-config

Στη συνέχεια, πρέπει να εγκαταστήσουμε κάποια πακέτα εισόδου/εξόδου εικόνας που θα βοηθήσουν το Pi μας να ανακτήσει διάφορες μορφές εικόνας από το δίσκο.

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

Τώρα, ορισμένα πακέτα για λήψη βίντεο, ζωντανή ροή και βελτιστοποίηση της απόδοσης 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

Πρέπει επίσης να εγκαταστήσουμε αρχεία κεφαλίδας Python 2.7 και Python 3, ώστε να μπορούμε να μεταγλωττίσουμε OpenCV με δεσμεύσεις python

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

Λήψη πηγαίου κώδικα OpenCV

cd

wget -O opencv.zip

αποσυμπιέστε το opencv.zip

Λήψη αποθετηρίου opencv_contrib

wget -O opencv_contrib.zip

αποσυμπιέστε το opencv_contrib.zip

Συνιστάται επίσης η χρήση εικονικού περιβάλλοντος για την εγκατάσταση του OpenCV.

sudo pip εγκατάσταση virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Τώρα, που έχει εγκατασταθεί το virtualenv και το virtualenvwrapper, πρέπει να ενημερώσουμε το προφίλ μας./. Για να συμπεριλάβουμε τις παρακάτω γραμμές στο κάτω μέρος

εξαγωγή WORKON_HOME = $ HOME/.virtualenvs εξαγωγή VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 πηγή /usr/local/bin/virtualenvwrapper.sh

Δημιουργήστε το εικονικό περιβάλλον python

mkvirtualenv cv -p python2

μεταβείτε στο δημιουργημένο εικονικό περιβάλλον

πηγή ~/.προφίλ

workon cv

Εγκατάσταση NumPy

pip εγκατάσταση numpy

Μεταγλώττιση και εγκατάσταση OpenCV

cd ~/opencv-3.3.0/

mkdir χτίζω

cd build

cmake -D CMAKE_BUILD_TYPE = ΑΠΕΛΕΥΘΕΡΩΣΗ --D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/ανοιχτό

Τέλος, μεταγλωττίστε το OpenCV

κάνω -j4

Αφού ολοκληρωθεί η εκτέλεση αυτής της εντολής. Το μόνο που χρειάζεται να κάνετε είναι να το εγκαταστήσετε.

sudo make config

sudo ldconfig

Βήμα 7: Εκτέλεση του Python Code για το Rover

Image
Image

Δημιουργήστε ένα αρχείο Python που ονομάζεται tracker.py και προσθέστε τον ακόλουθο κώδικα σε αυτό.

sudo nano tracker.py

κώδικας:-

Πρόγραμμα #ASAR

#Αυτό το πρόγραμμα παρακολουθεί μια κόκκινη μπάλα και δίνει εντολή σε ένα βατόμουρο pi να την ακολουθήσει. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') 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 backward IO.output (22, 1) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def ryt (): IO.output (21, 0) #Left Motor backward IO.output (22, 1) IO.output (13, 1) #Right Motor forward IO.output (15, 0) def lft (): IO.output (21, 1) #Left Motor forward IO.output (22, 0) IO.output (13, 0) #Right Motor backward IO.output (15, 1) def stp (): IO.output (21, 0) #Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ############################## ################################################### ##################### def main (): capWebcam = cv2. VideoCapture (0)#հայտարարω VideoCapture object and related to webcam, 0 => χρήση 1ης κάμερας # εμφάνιση αρχικής ανάλυσης εκτύπωση "default resolution =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT) cap)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened () == Λάθος: # ελέγξτε αν το αντικείμενο VideoCapture συσχετίστηκε με επιτυχημένη εκτύπωση κάμερας "σφάλμα: capWebcam δεν είχε πρόσβαση με επιτυχία / n / n" # αν όχι, εκτυπώστε το μήνυμα σφάλματος στο std out os.system ("παύση") # παύση έως ότου ο χρήστης πατήσει ένα πλήκτρο, ώστε ο χρήστης να δει το μήνυμα σφάλματος επιστροφή # και έξοδο από τη λειτουργία (η οποία εξέρχεται από το πρόγραμμα) # τέλος εάν ενώ cv2.waitKey (1)! = 27 και capWebcam.isOpened (): # μέχρι να πατηθεί το πλήκτρο Esc ή να χαθεί η σύνδεση κάμερας blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # read next frame if not blnFrameReadSuccessful or imgOriginal is None: # if frame was not read sukses print "error: frame not read from webcam / n" # print message error to std out os.system ("παύση") # παύση έως ότου ο χρήστης πατήσει ένα κλειδί, ώστε ο χρήστης να μπορεί να δει το μήνυμα σφάλματος break # exit while loop (που βγαίνει από το πρόγραμμα) # τέλος εάν 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 πίνακας ([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 κύκλοι = cv2. HoughCircles (imgThresh, cv2 HOUGH_GRADIENT, 5, intRows / 4) # γεμίστε μεταβλητούς κύκλους με όλους τους κύκλους στην επεξεργασμένη εικόνα εάν οι κύκλοι δεν είναι Καμία: # αυτή η γραμμή είναι απαραίτητη για να μην πέσει το πρόγραμμα στην επόμενη γραμμή, αν δεν βρέθηκαν κύκλοι IO. έξοδος (7, 1) για κύκλο σε κύκλους [0]: # για κάθε κύκλο x, y, ακτίνα = κύκλος # ξεσπάσει εκτύπωση x, y και ακτίνας "θέση μπάλας x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # θέση μπάλας και ακτίνα εκτύπωσης 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) # σχεδιάστε μικρό πράσινο κύκλο στο κέντρο του ανιχνευθέντος αντικειμένου cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # σχεδιάστε κόκκινο κύκλο γύρω από το ανιχνευμένο αντικείμενο # τέλος για # τέλος αν αλλιώς: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # δημιουργήστε παράθυρα, χρησιμοποιήστε το WINDOW_AUTOSIZE για ένα σταθερό μέγεθος παραθύρου cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # ή χρησιμοποιήστε το WINDOW_NORMAL για να επιτρέψετε την αλλαγή μεγέθους παραθύρου cv2.imshow ("imgOriginal", imgOri ginal)#εμφάνιση windows cv2.imshow ("imgThresh", imgThresh)#τέλος ενώ cv2.destroyAllWindows ()#κατάργηση παραθύρων από τη μνήμη επιστροφή ###################### ################################################### ############################# εάν _name_ == "_main_": main ()

Τώρα, το μόνο που μένει να κάνετε είναι να εκτελέσετε το πρόγραμμα

python tracker.py

Συγχαρητήρια! το αυτοκινούμενο rover σας είναι έτοιμο! Το τμήμα πλοήγησης με αισθητήρα υπερήχων θα ολοκληρωθεί σύντομα και θα ενημερώσω αυτό το εκπαιδευτικό.

Ευχαριστώ για την ανάγνωση!

Συνιστάται: