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

Ρομπότ παρακολούθησης μπάλας: 8 βήματα
Ρομπότ παρακολούθησης μπάλας: 8 βήματα

Βίντεο: Ρομπότ παρακολούθησης μπάλας: 8 βήματα

Βίντεο: Ρομπότ παρακολούθησης μπάλας: 8 βήματα
Βίντεο: ΑΝΕΚΔΟΤΑΡΑ 🤣🤣 #swimming #shorts 2024, Ιούλιος
Anonim
Ρομπότ παρακολούθησης μπάλας
Ρομπότ παρακολούθησης μπάλας
Ρομπότ παρακολούθησης μπάλας
Ρομπότ παρακολούθησης μπάλας
Ρομπότ παρακολούθησης μπάλας
Ρομπότ παρακολούθησης μπάλας

Έτσι, σε αυτό, θα πω πώς να φτιάξετε ένα ρομπότ παρακολούθησης μπάλας που είναι ένα ρομπότ να αναγνωρίζει μια μπάλα και να την ακολουθεί. Είναι βασικά μια αυτοματοποιημένη τεχνική επιτήρησης που μπορεί να χρησιμοποιηθεί στον σύγχρονο κόσμο. Λοιπόν, αφήστε μας απλά να μπούμε μέσα και να αρχίσουμε να χτίζουμε…

ΣΗΜΕΙΩΣΗ: Αυτή είναι η εργασία που υποβλήθηκε στο Πανεπιστήμιο Deakin, School of IT, SIT-210 Embedded Systems Development

Προμήθειες

www.hackster.io/junejarohan/ball-tracking-robot-7a9865

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

Εισαγωγή
Εισαγωγή

Η σημερινή επιτήρηση παρέχει ένα μεγάλο μειονέκτημα, το οποίο βασίζεται στη συμμετοχή των ανθρώπων, η οποία όπως όλοι γνωρίζουμε μπορεί να αποσπάται εύκολα, οπότε ήταν ύψιστης σημασίας να ανακαλύψουμε ένα σύστημα που θα μπορεί να παρακολουθεί τις περιοχές αυτόνομα και συνεχώς. Επίσης, θέλουμε να εντοπίσουμε αντιπαθητικά ή ανεπιθύμητα πράγματα και κινδύνους, ενώ ταυτόχρονα λαμβάνουμε αποφάσεις και ανταποκρινόμαστε ανάλογα. Έτσι, η παρακολούθηση αντικειμένων με τη χρήση ευφυών συστημάτων και υπολογιστών είναι απαραίτητη και καθοριστική για την επίτευξη αυτοματοποιημένης επιτήρησης.

Κάθε υπαίθριο σύστημα επιτήρησης πρέπει να είναι σε θέση να παρακολουθεί αντικείμενα που κινούνται στο οπτικό του πεδίο, να ταξινομεί αυτά τα αντικείμενα και να ανιχνεύει μερικές από τις δραστηριότητές τους. Έχω αναπτύξει μια μέθοδο παρακολούθησης και ταξινόμησης αυτών των αντικειμένων σε ρεαλιστικά σενάρια. Η παρακολούθηση αντικειμένων σε μία μόνο κάμερα εκτελείται με αφαίρεση φόντου, ακολουθούμενη από αντιστοιχία περιοχής. Αυτό λαμβάνει υπόψη πολλαπλές ενδείξεις, συμπεριλαμβανομένων των ταχυτήτων, των μεγεθών και των αποστάσεων των πλαισίων οριοθέτησης.

Βήμα 2: Υλικά και μαλακά είδη που χρησιμοποιούνται σε αυτό το έργο

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

Εξαρτήματα υλικού που χρησιμοποιούνται:

  • Raspberry Pi (x1)
  • Ενότητα κάμερας Raspberry Pi (x1)
  • Αισθητήρας υπερήχων (x3)
  • Πρόγραμμα οδήγησης κινητήρα SparkFun Dual H-Bridge L298 (x1)
  • DC Motor (x1)
  • Breadboard (x1)
  • Σύνδεση καλωδίων

Λογισμικό που χρησιμοποιείται:

OpenCV

Εργαλεία χειρός:

Πύθων

Βήμα 3: Τι να κάνετε;

Κάθε υπαίθριο σύστημα επιτήρησης πρέπει να είναι σε θέση να παρακολουθεί αντικείμενα που κινούνται στο οπτικό του πεδίο, να ταξινομεί αυτά τα αντικείμενα και να ανιχνεύει μερικές από τις δραστηριότητές τους. Έχω αναπτύξει μια μέθοδο παρακολούθησης και ταξινόμησης αυτών των αντικειμένων σε ρεαλιστικά σενάρια. Η παρακολούθηση αντικειμένων σε μία μόνο κάμερα εκτελείται με αφαίρεση φόντου, ακολουθούμενη από αντιστοιχία περιοχής. Αυτό λαμβάνει υπόψη πολλαπλές ενδείξεις, συμπεριλαμβανομένων των ταχυτήτων, των μεγεθών και των αποστάσεων των πλαισίων οριοθέτησης.

Το πιο σημαντικό πράγμα κατά την ανίχνευση εικόνων καρέ προς καρέ ήταν να αποφύγουμε τυχόν πτώσεις καρέ καθώς τότε το bot μπορεί να μπει σε κατάσταση limbo εάν το bot δεν καταφέρει να παρατηρήσει την κατεύθυνση κίνησης της μπάλας λόγω πτώσεων πλαισίου. Εάν η μπάλα βγει εκτός εμβέλειας της κάμερας, θα μεταβεί σε αυτό που ονομάζουμε κατάσταση limbo, σε αυτή την περίπτωση, το bot κάνει μια στροφή 360 μοιρών για να δει το χώρο γύρω του μέχρι να επιστρέψει η μπάλα στο πλαίσιο την κάμερα και μετά ξεκινήστε να κινείστε προς την κατεύθυνσή της.

Για την ανάλυση εικόνας, παίρνω κάθε καρέ και στη συνέχεια το καλύπτω με το χρώμα που χρειάζεται. Στη συνέχεια βρίσκω όλα τα περιγράμματα και βρίσκω το μεγαλύτερο ανάμεσά τους και το δένω σε ορθογώνιο. Και δείξτε το ορθογώνιο στην κύρια εικόνα και βρείτε τις συντεταγμένες του κέντρου του ορθογωνίου.

Τέλος, το bot προσπαθεί να φέρει τις συντεταγμένες της μπάλας στο κέντρο του άξονα συντεταγμένων της. Έτσι λειτουργεί το ρομπότ. Αυτό μπορεί να ενισχυθεί περαιτέρω χρησιμοποιώντας μια συσκευή IoT όπως ένα σωματίδιο φωτονίου που μπορεί να σας ενημερώσει όταν ανιχνεύεται ένα πράγμα και ότι το ρομπότ το ακολουθεί ή όταν το ρομπότ έχει χάσει το ίχνος του και τώρα επιστρέφει στη βάση Το

Για σκοπούς επεξεργασίας εικόνας, πρέπει να εγκαταστήσετε λογισμικό OpenCV στο raspberry pi σας, το οποίο ήταν αρκετά δύσκολο για μένα.

Μπορείτε να λάβετε όλες τις απαιτούμενες πληροφορίες για την εγκατάσταση του OpenCV μέσω αυτού του συνδέσμου: κάντε κλικ εδώ

Βήμα 4: Διαγράμματα

Image
Image
Σχήματα
Σχήματα
Σχήματα
Σχήματα

Πάνω έχω παράσχει τα διαγράμματα για το έργο μου και μαζί με αυτό είναι το Printed Circuit Board (PCB).

Και εδώ είναι μερικές από τις κύριες συνδέσεις που πρέπει να κάνετε:

• Πρώτα απ 'όλα, η μονάδα Raspberry Pi Camera συνδέεται άμεσα με το Raspberry Pi.

• Οι αισθητήρες υπερήχων VCC συνδέονται με το κοινό τερματικό, όπως και με το GND (γείωση) και οι υπόλοιπες δύο θύρες του αισθητήρα υπερήχων συνδέονται με τις ακίδες GPIO στο Raspberry Pi.

• Τα μοτέρ συνδέονται χρησιμοποιώντας το H-Bridge.

• Το ρεύμα παρέχεται με τη χρήση της μπαταρίας.

Έχω προσθέσει επίσης το βίντεο που μπορεί να βοηθήσει στην κατανόηση της λειτουργίας του αισθητήρα υπερήχων και πώς λειτουργεί.

και επίσης μπορείτε να ακολουθήσετε αυτόν τον σύνδεσμο εάν δεν μπορείτε να βρείτε το παραπάνω βίντεο.

Βήμα 5: Πώς να το κάνετε;

Έφτιαξα αυτό το έργο που απεικονίζει ένα βασικό ρομπότ που μπορεί να παρακολουθεί μια μπάλα. Το ρομπότ χρησιμοποιεί μια κάμερα για να κάνει επεξεργασία εικόνας παίρνοντας καρέ και παρακολουθώντας την μπάλα. Για την παρακολούθηση της μπάλας χρησιμοποιούνται διάφορα χαρακτηριστικά όπως το χρώμα, το μέγεθος, το σχήμα της.

Το Ρομπότ βρίσκει ένα σκληρό κωδικοποιημένο χρώμα και στη συνέχεια ψάχνει για την μπάλα αυτού του χρώματος και το ακολουθεί. Έχω επιλέξει το Raspberry Pi ως μικροελεγκτή σε αυτό το έργο επειδή μας επιτρέπει να χρησιμοποιούμε τη μονάδα κάμερας και δίνει μεγάλη ευελιξία στον κώδικα καθώς χρησιμοποιεί γλώσσα python που είναι πολύ φιλική προς το χρήστη και επίσης μας επιτρέπει να χρησιμοποιούμε τη βιβλιοθήκη OpenCV για την ανάλυση των εικόνων.

Μια γέφυρα H έχει χρησιμοποιηθεί για να αλλάξει η κατεύθυνση περιστροφής των κινητήρων ή να τους σταματήσει.

Για την ανάλυση εικόνας, παίρνω κάθε καρέ και στη συνέχεια το καλύπτω με το χρώμα που χρειάζεται. Στη συνέχεια βρίσκω όλα τα περιγράμματα και βρίσκω το μεγαλύτερο ανάμεσά τους και το δένω σε ορθογώνιο. Και δείξτε το ορθογώνιο στην κύρια εικόνα και βρείτε τις συντεταγμένες του κέντρου του ορθογωνίου.

Τέλος, το bot προσπαθεί να φέρει τις συντεταγμένες της μπάλας στο κέντρο του άξονα συντεταγμένων της. Έτσι λειτουργεί το ρομπότ. Αυτό μπορεί να ενισχυθεί περαιτέρω χρησιμοποιώντας μια συσκευή IoT όπως ένα σωματίδιο φωτονίου που μπορεί να σας ενημερώσει όταν ανιχνεύεται ένα πράγμα και ότι το ρομπότ το ακολουθεί ή όταν το ρομπότ έχει χάσει το ίχνος του και τώρα επιστρέφει στη βάση Το Και για να το κάνουμε αυτό θα χρησιμοποιήσουμε μια διαδικτυακή πλατφόρμα λογισμικού που συνδέει τις συσκευές και τους επιτρέπει να εκτελούν ορισμένες ενέργειες σε συγκεκριμένους κανόνες ενεργοποίησης που είναι οι ενεργοποιητές IFTTT.

Βήμα 6: udευδοκώδικας

Ψευδοκώδικας
Ψευδοκώδικας

Εδώ είναι ο ψευδοκώδικας για το τμήμα ανίχνευσης χρησιμοποιώντας OpenCV όπου εντοπίζουμε μια μπάλα.

Βήμα 7: Κωδικός

Κώδικας
Κώδικας
Κώδικας
Κώδικας
Κώδικας
Κώδικας
Κώδικας
Κώδικας

Πάνω είναι τα αποσπάσματα του κώδικα και παρακάτω η λεπτομερής περιγραφή του κώδικα.

# εισαγωγή των απαραίτητων πακέτων

ΕΙΣΑΓΟΥΜΕ ΟΛΑ ΤΑ ΑΝΑΓΚΑΙΑ ΣΥΣΚΕΥΑΣΙΑ

από την εισαγωγή picamera.array PiRGBArray #Καθώς υπάρχει πρόβλημα επίλυσης στο raspberry pi, δεν θα είναι δυνατή η λήψη καρέ με το VideoCapture

από την εισαγωγή picamera PiCamera import RPi. GPIO ως GPIO time import time numpy as np

ΤΩΡΑ ΣΥΝΕΡΓΑΖΟΥΜΕ ΤΟ HARDWARE ΚΑΙ ΕΚΔΟΘΟΥΜΕ ΤΟΥΣ ΚΟΝΔΕΣ ΣΥΝΔΕΘΕΜΕΝΟΥΣ ΣΤΟ ΡΙ ΡΑΣΠΕΡΙ

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Αριστερός αισθητήρας υπερήχων

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 #Μπροστινός υπερηχητικός αισθητήρας

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Σωστός υπερηχητικός αισθητήρας

GPIO_ECHO3 = 35

MOTOR1B = 18 #Αριστερό μοτέρ

MOTOR1E = 22

MOTOR2B = 21 #Δεξί μοτέρ

MOTOR2E = 19

LED_PIN = 13 #Αν βρει την μπάλα, τότε θα φωτίσει το led

# Ορίστε καρφίτσες ως έξοδο και είσοδο

GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO2 GPIO_TRIGGER3, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)

# Ορίστε τη σκανδάλη σε False (Low)

GPIO.output (GPIO_TRIGGER1, False) GPIO.output (GPIO_TRIGGER2, False) GPIO.output (GPIO_TRIGGER3, False)

ΑΥΤΗ Η ΛΕΙΤΟΥΡΓΙΑ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΟΛΟΙ ΟΙ ΥΠΕΡΑΣΚΟΝΟΙ ΑΙΣΘΗΤΗΡΕΣ ΣΥΛΛΕΓΟΥΝ ΤΗΝ ΑΠΟΣΤΑΣΗ ΑΠΟ ΤΑ ΑΝΤΙΚΕΙΜΕΝΑ ΓΥΡΩ ΤΟΥ ΜΠΟΤ ΜΑΣ

# Αφήστε την ενότητα να εγκατασταθεί

def sonar (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Ορίστε καρφίτσες ως έξοδο και είσοδο GPIO. (Χαμηλό) GPIO.output (GPIO_TRIGGER, False) #Αφήστε την ενότητα να ρυθμίσει το χρόνο. Ύπνος (0,01) #ενδιάμεση απόσταση> 5: #Αποστολή παλμού 10us για ενεργοποίηση GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. έξοδος (GPIO_TRIGGER, False) έναρξη = time.time () ενώ GPIO.input (GPIO_ECHO) == 0 και time.time ()

ΛΗΗ ΤΩΝ DC MOTORS ΓΙΑ ΝΑ ΔΟΥΛΕΥΟΥΝ ΜΕ ΤΟ PI RASPBERRY

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

GPIO.setup (MOTOR2B, GPIO. OUT) GPIO.setup (MOTOR2E, GPIO. OUT)

ΟΡΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΩΝ ΛΕΙΤΟΥΡΓΙΑΣ ΤΟΥ ΡΟΜΠΟΤ ΚΑΙ ΚΑΝΤΕ ΤΗΝ ΚΙΝΗΣΗ ΣΕ ΔΙΑΦΟΡΕΣ ΟΔΗΓΙΕΣ

def forward ():

GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def reverse (): GPIO.output (MOTOR1, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH) def rightturn (): GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def leftturn (): GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGHT)

def stop ():

GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW)

ΚΑΤΑΣΚΕΥΗ ΤΗΣ ΜΟΝΑΔΑΣ ΚΑΜΕΡΑΣ ΚΑΙ ΡΥΘΜΙΣΗ ΤΩΝ ΡΥΘΜΙΣΕΩΝ

#ΚΑΜΠΕΡΑ ΚΑΜΕΡΑ

# αρχικοποιήστε την κάμερα και πάρτε μια αναφορά στην ακατέργαστη κάμερα λήψης κάμερας = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (κάμερα, μέγεθος = (160, 120)) # επιτρέψτε την κάμερα για τον χρόνο προθέρμανσης. ύπνος (0,001)

ΤΩΡΑ ΕΦΑΡΜΟΓΗ ΤΟΥ ΚΥΡΙΟΥ ΠΟΥ ΑΚΟΛΟΥΘΕΙ ΤΟ ΜΠΑΛΟ ΚΑΙ ΑΠΟΦΥΓΕΤΕ ΟΠΟΙΟΔΗΠΟΤΕ ΕΜΠΟΔΙΟ ΜΕ ΤΟΝ ΤΡΟΠΟ

ενώ (1 <10): { #απόσταση που προέρχεται από τον μπροστινό αισθητήρα υπερηχητικών αποστάσεων C = σόναρ (GPIO_TRIGGER2, GPIO_ECHO2) #απόσταση που προέρχεται από τη δεξιά απόσταση αισθητήρα υπερήχων, GPIO_ECHO1) εάν (απόσταση C = 8: δεξιά στροφή () ώρα. Ύπνος (0,00625) στάση () ώρα. Ύπνος (0,0125) εμπρός () χρόνος. Ύπνος (0,00625) στάση () ώρα. Ύπνος (0,0125) #ενω βρέθηκε == 0: leftturn () time.sleep (0.00625) elif distanceL> = 8: leftturn () time.sleep (0.00625) stop () time.sleep (0.0125) forward () time.sleep (0.00625) stop () time.sleep (0.0125) rightturn () time.sleep (0.00625) stop () time.sleep (0.0125) else: stop () time.sleep (0.01) else: #αλλιώς προχωρά μπροστά () time.sleep (0.00625) if (απόσταση C> 10): #φέρνει τις συντεταγμένες της μπάλας στο κέντρο του φανταστικού άξονα της κάμερας.) διακοπή () ώρα. ύπνος (0.00625) άλλο: διακοπή () ώρα. ύπνος (0.01)

αλλού:

#αν βρει την μπάλα και είναι πολύ κοντά φωτίζει το led. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # διαγράψτε τη ροή για προετοιμασία για επόμενο καρέ}

ΚΑΝΤΕ ΤΑ ΑΠΑΡΑΙΤΗΤΑ ΚΑΘΑΡΙΣΜΑΤΑ

GPIO.cleanup () #δωρεάν όλες τις καρφίτσες GPIO

Βήμα 8: Εξωτερικοί σύνδεσμοι

Σύνδεσμος για το βίντεο επίδειξης: κάντε κλικ εδώ (Youtube)

Σύνδεσμος προς τον Κώδικα στο Git-hub: κάντε κλικ εδώ (Git-Hub)

Συνιστάται: