Πίνακας περιεχομένων:
- Βήμα 1: Εισαγωγή
- Βήμα 2: Απαιτούνται υλικά και λογισμικό
- Βήμα 3: Χτίζοντας το σασί του Rover
- Βήμα 4: Κατασκευή συναρμολόγησης υπερηχητικού εύρους εύρους
- Βήμα 5: Διαγράμματα και ηλεκτρικές συνδέσεις
- Βήμα 6: SSH και Άνοιγμα εγκατάστασης βιογραφικού
- Βήμα 7: Εκτέλεση του Python Code για το Rover
Βίντεο: Raspberry Pi - Αυτόνομο Mars Rover με OpenCV Object Tracking: 7 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:33
Τροφοδοτείται από Raspberry Pi 3, Ανοιχτή αναγνώριση αντικειμένων CV, αισθητήρες υπερήχων και κινητήρες συνεχούς ρεύματος. Αυτό το rover μπορεί να παρακολουθεί οποιοδήποτε αντικείμενο έχει εκπαιδευτεί και να κινείται σε οποιοδήποτε έδαφος.
Βήμα 1: Εισαγωγή
Σε αυτό το Instructables, πρόκειται να κατασκευάσουμε ένα Αυτόνομο Mars Rover το οποίο θα μπορεί να αναγνωρίζει αντικείμενα και να τα παρακολουθεί χρησιμοποιώντας το λογισμικό Open CV που λειτουργεί σε Raspberry Pi 3 με δυνατότητα χρήσης κάμερας web ή αρχικής κάμερας raspberry pi. Είναι επίσης εξοπλισμένο με έναν υπερηχητικό αισθητήρα τοποθετημένο σε σερβο για να παρακολουθεί τον δρόμο του σε σκοτεινά περιβάλλοντα όπου η κάμερα δεν θα λειτουργούσε. Τα σήματα που λαμβάνονται από το Pi αποστέλλονται στο IC του οδηγού κινητήρα (L293D), το οποίο κινεί κινητήρες DC 4 x 150RPM τοποθετημένους σε σώμα κατασκευασμένο με σωλήνες PVC.
Βήμα 2: Απαιτούνται υλικά και λογισμικό
Απαιτούμενα υλικά
- Raspberry Pi (κάθε άλλο παρά μηδέν)
- Raspberry PI Camera ή κάμερα web
- IC οδηγού κινητήρα L293D
- Τροχοί ρομπότ (7x4cm) Χ 4
- Geared DC Motors (150RPM) X 4
- Σωλήνες PVC για σασί
Απαιτείται λογισμικό
- Στόκος για SSH ing το Pi
- Ανοίξτε το βιογραφικό για αναγνώριση αντικειμένου
Βήμα 3: Χτίζοντας το σασί του Rover
Για να φτιάξετε αυτό το πλαίσιο PVC, θα χρειαστείτε
- 2 Χ 8"
- 2 Χ 4"
- 4 T-Joints
Τακτοποιήστε τους σωλήνες PVC σε δομή που μοιάζει με σκάλα και εισάγετε στις αρθρώσεις Τ. Μπορείτε να χρησιμοποιήσετε το στεγανωτικό PVC για να κάνετε τις αρθρώσεις ακόμα πιο δυνατές.
Οι κινητήρες συνεχούς ρεύματος συνδέονται με το πλαίσιο του σωλήνα PVC χρησιμοποιώντας σφιγκτήρες και στη συνέχεια οι τροχοί συνδέονται με τους κινητήρες χρησιμοποιώντας βίδες.
Βήμα 4: Κατασκευή συναρμολόγησης υπερηχητικού εύρους εύρους
Η διάταξη ανίχνευσης υπερήχων κατασκευάζεται χρησιμοποιώντας έναν αισθητήρα υπερήχων HC-SR04 συνδεδεμένο με κινητήρα Micro Servo. Τα καλώδια συνδέονται προηγουμένως με τον αισθητήρα υπερήχων πριν τοποθετηθούν στην πλαστική θήκη που συνδέεται με τον σερβοκινητήρα μέσω βιδών.
Βήμα 5: Διαγράμματα και ηλεκτρικές συνδέσεις
Κάντε τις ηλεκτρικές συνδέσεις σύμφωνα με το συνημμένο διάγραμμα κυκλώματος.
Βήμα 6: SSH και Άνοιγμα εγκατάστασης βιογραφικού
Τώρα, πρέπει να κάνουμε SSH στο raspberry pi για να εγκαταστήσουμε το απαιτούμενο λογισμικό. Θα ξεκινήσουμε με SSHing στο Raspberry Pi μας. Βεβαιωθείτε ότι το Pi σας είναι συνδεδεμένο στον ίδιο δρομολογητή με τον υπολογιστή σας και γνωρίζετε ότι είναι η διεύθυνση IP που του έχει εκχωρηθεί από το δρομολογητή σας. Τώρα, ανοίξτε μια γραμμή εντολών ή PUTTY εάν χρησιμοποιείτε Windows και εκτελέστε την ακόλουθη εντολή.
Η 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
Δημιουργήστε ένα αρχείο 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 σας είναι έτοιμο! Το τμήμα πλοήγησης με αισθητήρα υπερήχων θα ολοκληρωθεί σύντομα και θα ενημερώσω αυτό το εκπαιδευτικό.
Ευχαριστώ για την ανάγνωση!
Συνιστάται:
Μετατρέποντας το Roomba σας σε Mars Rover: 5 Βήματα
Μετατρέποντας το Roomba σας σε Mars Rover:
Micro: bit MU Vision Sensor - Object Tracking: 7 Βήματα
Micro: bit MU Vision Sensor - Object Tracking: Έτσι σε αυτό το διδακτικό θα αρχίσουμε να προγραμματίζουμε το Smart Car που κατασκευάζουμε σε αυτό το εκπαιδευτικό και στο οποίο έχουμε εγκαταστήσει έναν αισθητήρα οπτικής MU σε αυτό το εκπαιδευτικό. Θα προγραμματίσουμε το micro: λίγο με απλή παρακολούθηση αντικειμένων, οπότε
Mars Rover χρησιμοποιώντας Raspberry Pi: 5 βήματα
Mars Rover Using Raspberry Pi: Dear all Great Learner, Είμαι πάντα περίεργος να μάθω για το mars rover, Έχοντας 6 τροχούς που μπορούν να βγουν σε όλη την επιφάνεια του Άρη και να εξερευνήσουν πράγματα από τη Γη. Θέλω επίσης να εξερευνήσω κάτι καθισμένος στο φορητό υπολογιστή μου. Λοιπόν, τώρα πιστεύω ότι είναι η κατάλληλη στιγμή να το φτιάξω και
DIY Smart Robot Tracking Car Kits Tracking Car Photosensitive: 7 βήματα
DIY Smart Robot Tracking Car Kits Tracking Car Photosensitive: Design by SINONING ROBOT Μπορείτε να αγοράσετε από το robot car tracking TheoryLM393 chip σύγκριση των δύο φωτοαντιστάσεων, όταν υπάρχει μία πλευρική φωτοαντίσταση LED στο WHITE η πλευρά του κινητήρα θα σταματήσει αμέσως, η άλλη πλευρά του κινητήρα γυρίστε, έτσι ώστε
IRobot Create-Mars Expedition Rover Mark I: 4 Βήματα
IRobot Create-Mars Expedition Rover Mark I: Αυτό το διδακτικό θα σας διδάξει πώς να ρυθμίσετε το iRobot Create χρησιμοποιώντας κωδικοποίηση MatLab. Το ρομπότ σας θα έχει την ικανότητα να αναζητά ορυκτά διακρίνοντας σχήματα, να χειρίζεται τραχύ έδαφος με τη χρήση αισθητήρων βράχου και έχει την ικανότητα