- Απαιτείται υλικό:
- Απαίτηση προγραμματισμού:
- Ρύθμιση επεξεργασίας στο Raspberry Pi:
- Διάγραμμα κυκλώματος:
- Πρόγραμμα παρακολούθησης Raspberry Pi Ball:
- Εργασία του ρομπότ παρακολούθησης Ball Raspberry Pi:
Ο τομέας της Ρομποτικής, της Τεχνητής Νοημοσύνης και της Μηχανικής Μάθησης εξελίσσεται ραγδαία ότι είναι σίγουρο ότι θα αλλάξει τον τρόπο ζωής της ανθρωπότητας στο εγγύς μέλλον. Τα ρομπότ πιστεύεται ότι κατανοούν και αλληλεπιδρούν με τον πραγματικό κόσμο μέσω αισθητήρων και επεξεργασίας μηχανικής μάθησης. Η αναγνώριση εικόνας είναι ένας από τους δημοφιλείς τρόπους με τους οποίους πιστεύεται ότι τα ρομπότ κατανοούν αντικείμενα κοιτάζοντας τον πραγματικό κόσμο μέσω μιας κάμερας όπως και εμείς. Σε αυτό το έργο, ας χρησιμοποιήσουμε τη δύναμη του Raspberry Pi για να φτιάξουμε ένα ρομπότ που θα μπορούσε να παρακολουθεί την μπάλα και να το ακολουθεί όπως τα ρομπότ που παίζει ποδόσφαιρο.
Το OpenCV είναι ένα πολύ διάσημο εργαλείο ανοιχτού κώδικα που χρησιμοποιείται για την επεξεργασία εικόνας, αλλά σε αυτό το σεμινάριο για να διατηρήσουμε τα πράγματα απλά, χρησιμοποιούμε το Processing IDE. Δεδομένου ότι η επεξεργασία για ARM κυκλοφόρησε επίσης τη βιβλιοθήκη GPIO για επεξεργασία, δεν θα χρειαστεί πλέον να κάνουμε εναλλαγή μεταξύ python και επεξεργασίας για να δουλέψουμε με το Raspberry Pi. Ακούγεται δροσερό, σωστά; Ας ξεκινήσουμε λοιπόν.
Απαιτείται υλικό:
- Raspberry Pi
- Μονάδα κάμερας με καλώδιο κορδέλας
- Ρομπότ σασί
- Κινητήρες γραναζιών με τροχό
- Οδηγός κινητήρα L293D
- Power bank ή οποιαδήποτε άλλη φορητή πηγή ενέργειας
Απαίτηση προγραμματισμού:
- Οθόνη ή άλλη οθόνη για Raspberry pi
- Πληκτρολόγιο ή ποντίκι για Pi
- Επεξεργασία λογισμικού ARM
Σημείωση: Είναι υποχρεωτικό να υπάρχει μια οθόνη συνδεδεμένη στο Pi μέσω καλωδίων κατά τον προγραμματισμό, επειδή μόνο τότε μπορεί να προβληθεί το βίντεο της κάμερας
Ρύθμιση επεξεργασίας στο Raspberry Pi:
Όπως ειπώθηκε προηγουμένως, θα χρησιμοποιήσουμε το περιβάλλον επεξεργασίας για να προγραμματίσουμε το Raspberry Pi και όχι τον προεπιλεγμένο τρόπο χρήσης του python. Ακολουθήστε τα παρακάτω βήματα:
Βήμα 1: - Συνδέστε το Raspberry Pi στην οθόνη, το πληκτρολόγιο και το ποντίκι και ενεργοποιήστε το.
Βήμα 2: - Βεβαιωθείτε ότι το Pi είναι συνδεδεμένο σε μια ενεργή σύνδεση στο Διαδίκτυο επειδή πρόκειται να κατεβάσουμε λίγα πράγματα.
Βήμα 3: - Κάντε κλικ στο Processing ARM, για να κατεβάσετε το IDE επεξεργασίας για το Raspberry Pi. Η λήψη θα έχει τη μορφή αρχείου ZIP.
Βήμα 4: - Μετά τη λήψη, εξαγάγετε τα αρχεία στο φάκελο ZIP στον κατάλογο που προτιμάτε. Μόλις το έβγαλα στην επιφάνεια εργασίας μου.
Βήμα 5: - Τώρα, ανοίξτε τον εξαγόμενο φάκελο και κάντε κλικ στο αρχείο που ονομάζεται επεξεργασία. Θα πρέπει να ανοίξει ένα παράθυρο όπως φαίνεται παρακάτω.
Βήμα 6: - Αυτό είναι το περιβάλλον όπου θα πληκτρολογούμε τους κωδικούς μας. Για άτομα που είναι εξοικειωμένα με το Arduino, μην εκπλαγείτε ΝΑΙ, το IDE μοιάζει με το Arduino και το ίδιο και το πρόγραμμα.
Βήμα 7: - Χρειαζόμαστε δύο βιβλιοθήκες για να λειτουργήσει το πρόγραμμα μας μετά το ball, για να το εγκαταστήσουμε και απλώς κάντε κλικ στο Sketch -> Import Library -> Add Library . Θα ανοίξει το ακόλουθο παράθυρο διαλόγου.
Βήμα 8: - Χρησιμοποιήστε το επάνω αριστερό πλαίσιο κειμένου για αναζήτηση του Raspberry Pi και πατήστε enter, το αποτέλεσμα αναζήτησης θα πρέπει να μοιάζει με αυτό.
Βήμα 9: - Αναζητήστε τις βιβλιοθήκες με την ονομασία "GL Video" και "Hardware I / O" και κάντε κλικ στην εγκατάσταση για να τις εγκαταστήσετε. Βεβαιωθείτε ότι έχετε εγκαταστήσει και τις δύο βιβλιοθήκες.
Βήμα 10: - Με βάση το διαδίκτυο, η εγκατάσταση θα διαρκέσει λίγα λεπτά. Μόλις τελειώσουμε, είμαστε έτοιμοι για την επεξεργασία λογισμικού.
Διάγραμμα κυκλώματος:
Το διάγραμμα κυκλώματος αυτού του έργου Raspberry Pi Ball Tracking φαίνεται παρακάτω.
Όπως μπορείτε να δείτε, το κύκλωμα περιλαμβάνει μια κάμερα PI, μια μονάδα Motor Driver και ένα ζευγάρι κινητήρων συνδεδεμένων στο Raspberry pi. Το πλήρες κύκλωμα τροφοδοτείται από μια κινητή τράπεζα ισχύος (αντιπροσωπεύεται από μπαταρία AAA στο παραπάνω κύκλωμα).
Δεδομένου ότι οι λεπτομέρειες των ακίδων δεν αναφέρονται στο Raspberry Pi, πρέπει να επαληθεύσουμε τις ακίδες χρησιμοποιώντας την παρακάτω εικόνα
Για να οδηγήσουμε τους κινητήρες, χρειαζόμαστε τέσσερις καρφίτσες (A, B, A, B). Αυτές οι τέσσερις ακίδες συνδέονται από GPIO14,4,17 και 18 αντίστοιχα. Το πορτοκαλί και το λευκό σύρμα σχηματίζουν μαζί τη σύνδεση για έναν κινητήρα. Έχουμε λοιπόν δύο τέτοια ζεύγη για δύο κινητήρες.
Οι κινητήρες συνδέονται στη μονάδα οδηγού κινητήρα L293D όπως φαίνεται στην εικόνα και η μονάδα οδήγησης τροφοδοτείται από μια τράπεζα τροφοδοσίας. Βεβαιωθείτε ότι η γείωση της τράπεζας τροφοδοσίας είναι συνδεδεμένη στο έδαφος του Raspberry Pi, μόνο τότε η σύνδεσή σας θα λειτουργήσει.
Αυτό είναι που τελειώσαμε με τη σύνδεση του υλικού μας, ας επιστρέψουμε στο περιβάλλον επεξεργασίας μας και να ξεκινήσουμε τον προγραμματισμό για να διδάξουμε στο ρομπότ μας πώς να παρακολουθεί μια μπάλα.
Πρόγραμμα παρακολούθησης Raspberry Pi Ball:
Το πλήρες πρόγραμμα επεξεργασίας αυτού του έργου δίνεται στο τέλος αυτής της σελίδας, το οποίο χρησιμοποιείτε απευθείας. Ακριβώς παρακάτω, εξήγησα τη λειτουργία του κώδικα, ώστε να μπορείτε να τον χρησιμοποιήσετε για άλλα παρόμοια έργα.
Η ιδέα του προγράμματος είναι πολύ απλή. Αν και η πρόθεση του έργου είναι να εντοπίσει μια μπάλα, στην πραγματικότητα δεν πρόκειται να το κάνουμε. Απλώς πρόκειται να προσδιορίσουμε την μπάλα χρησιμοποιώντας το χρώμα της. Όπως όλοι γνωρίζουμε ότι τα βίντεο δεν είναι παρά συνεχείς κορνίζες εικόνων. Έτσι τραβάμε κάθε εικόνα και τη χωρίζουμε σε pixel. Στη συνέχεια συγκρίνουμε κάθε χρώμα pixel με το χρώμα της μπάλας. αν βρεθεί ένας αγώνας τότε μπορούμε να πούμε ότι έχουμε βρει την μπάλα. Με αυτές τις πληροφορίες μπορούμε επίσης να προσδιορίσουμε τη θέση της μπάλας (χρώμα pixel) στην οθόνη. Εάν η θέση είναι πολύ αριστερά μετακινούμε το ρομπότ προς τα δεξιά, εάν η θέση είναι πολύ δεξιά, μετακινεί το ρομπότ προς τα αριστερά, έτσι ώστε η θέση των pixel να παραμένει πάντα στο κέντρο της οθόνης. Μπορείτε να παρακολουθήσετε βίντεο Computer Vision του Daniel shiffman για να λάβετε μια σαφή εικόνα.
Όπως πάντα ξεκινάμε εισάγοντας τις δύο βιβλιοθήκες που κατεβάζουμε. Αυτό μπορεί να γίνει με τις ακόλουθες δύο γραμμές. Η βιβλιοθήκη υλικού I / O χρησιμοποιείται για πρόσβαση στις καρφίτσες GPIO του PI απευθείας από το περιβάλλον επεξεργασίας, ενώ η βιβλιοθήκη glvideo χρησιμοποιείται για πρόσβαση στην ενότητα κάμερας Raspberry Pi.
εισαγωγή processing.io. *; εισαγωγή gohai.glvideo. *;
Μέσα στη λειτουργία ρύθμισης αρχικοποιούμε τους πείρους εξόδου για τον έλεγχο του κινητήρα και επίσης λαμβάνουμε το βίντεο από την κάμερα pi και το μέγεθος σε ένα παράθυρο μεγέθους 320 * 240.
άκυρη ρύθμιση () {size (320, 240, P2D); βίντεο = νέο GLCapture (αυτό); video.start (); trackColor = χρώμα (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Η άκυρη κλήρωση είναι σαν τον άπειρο βρόχο, ο κώδικας μέσα σε αυτόν τον βρόχο θα εκτελεστεί όσο το πρόγραμμα τερματίζεται. Εάν υπάρχει διαθέσιμη πηγή κάμερας, διαβάζουμε το βίντεο που βγαίνει από αυτήν
άκυρη κλήρωση () {φόντο (0) · εάν (video.available ()) {video.read (); }}
Στη συνέχεια αρχίζουμε να χωρίζουμε το πλαίσιο βίντεο σε pixel. Κάθε εικονοστοιχείο έχει τιμή κόκκινου, πράσινου και μπλε. Αυτές οι τιμές αποθηκεύονται στη μεταβλητή r1, g1 και b1
για (int x = 0; x <video.width; x ++) {για (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Τι είναι το τρέχον χρώμα χρώματος currentColor = video.pixels; float r1 = κόκκινο (currentColor); float g1 = πράσινο (currentColor); float b1 = μπλε (currentColor);
Για να ανιχνεύσουμε αρχικά το χρώμα της μπάλας, πρέπει να κάνουμε κλικ στο χρώμα. Μόλις κάνετε κλικ στο χρώμα της μπάλας θα αποθηκευτεί σε μεταβλητή που ονομάζεται trackColour .
void mousePressed () {// Αποθήκευση χρώματος όπου γίνεται κλικ στο ποντίκι στη μεταβλητή trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Μόλις έχουμε το χρώμα του κομματιού και το τρέχον χρώμα πρέπει να τα συγκρίνουμε. Αυτή η σύγκριση χρησιμοποιεί τη συνάρτηση dist. Ελέγχει πόσο κοντά είναι το τρέχον χρώμα στο χρώμα του κομματιού.
float d = dist (r1, g1, b1, r2, g2, b2);
Η τιμή του dist θα είναι μηδέν για έναν ακριβή αγώνα. Έτσι, εάν η τιμή του dist είναι μικρότερη από μια καθορισμένη τιμή (World Record) τότε υποθέτουμε ότι βρήκαμε το χρώμα του κομματιού. Στη συνέχεια παίρνουμε την τοποθεσία αυτού του εικονοστοιχείου και την αποθηκεύουμε στη μεταβλητή πλησιέστερο X και πλησιέστερο Y για να βρούμε τη θέση της μπάλας
εάν (d <worldRecord) {worldRecord = d; πλησιέστεροX = x; πλησιέστεροY = y; }
Σχεδιάζουμε επίσης μια έλλειψη γύρω από το χρώμα που βρέθηκε για να δείξουμε ότι το χρώμα βρέθηκε. Η τιμή της θέσης είναι επίσης τυπωμένη στην κονσόλα, αυτό θα βοηθήσει πολύ κατά τον εντοπισμό σφαλμάτων.
if (worldRecord <10) {// Σχεδιάστε έναν κύκλο στο γεμισμένο εικονοστοιχείο (trackColor); εγκεφαλικό βάρος (4.0); εγκεφαλικό επεισόδιο (0) έλλειψη (πλησιέστεροX, πλησιέστεροY, 16, 16); println (πλησιέστεροX, πλησιέστεροY);
Τέλος, μπορούμε να συγκρίνουμε τη θέση του πλησιέστερου X και του πλησιέστερου Υ και να ρυθμίσουμε τους κινητήρες με τέτοιο τρόπο ώστε το χρώμα να φτάσει στο κέντρο της οθόνης. Ο παρακάτω κωδικός χρησιμοποιείται για να στρέψετε το ρομπότ δεξιά, καθώς η θέση X του χρώματος βρέθηκε στην αριστερή πλευρά της οθόνης (<140)
εάν (πλησιέστεροX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); καθυστέρηση (10) GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Στρίψτε δεξιά"); }
Παρομοίως μπορούμε να ελέγξουμε τη θέση των Χ και Υ για τον έλεγχο των κινητήρων στην απαιτούμενη κατεύθυνση. Όπως πάντα, μπορείτε να ανατρέξετε στο κάτω μέρος της σελίδας για το πλήρες πρόγραμμα.
Εργασία του ρομπότ παρακολούθησης Ball Raspberry Pi:
Μόλις είστε έτοιμοι με το υλικό και το πρόγραμμα, ήρθε η ώρα να διασκεδάσετε. Πριν δοκιμάσουμε το bot μας στο έδαφος, πρέπει να βεβαιωθούμε ότι όλα λειτουργούν καλά. Συνδέστε το Pi σας για παρακολούθηση και εκκίνηση του κώδικα επεξεργασίας. Θα πρέπει να δείτε τη ροή βίντεο σε ένα μικρό παράθυρο. Τώρα, φέρτε την μπάλα μέσα στο πλαίσιο και κάντε κλικ στην μπάλα για να διδάξετε στο ρομπότ ότι πρέπει να παρακολουθεί αυτό το συγκεκριμένο χρώμα. Τώρα μετακινήστε την μπάλα γύρω από την οθόνη και θα πρέπει να παρατηρήσετε ότι οι τροχοί περιστρέφονται.
Εάν όλα λειτουργούν όπως αναμενόταν, αφήστε το bot στο έδαφος και ξεκινήστε να παίζετε με αυτό. Βεβαιωθείτε ότι ο χώρος φωτίζεται ομοιόμορφα για καλύτερα αποτελέσματα. Η πλήρης εργασία του έργου φαίνεται στο παρακάτω βίντεο. Ελπίζω να καταλάβατε το έργο και να απολαύσατε κάτι παρόμοιο. Εάν έχετε προβλήματα, μπορείτε να τα δημοσιεύσετε στην ενότητα σχολίων παρακάτω ή να βοηθήσετε.