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

Roomba With MATLAB: 4 βήματα (με εικόνες)
Roomba With MATLAB: 4 βήματα (με εικόνες)

Βίντεο: Roomba With MATLAB: 4 βήματα (με εικόνες)

Βίντεο: Roomba With MATLAB: 4 βήματα (με εικόνες)
Βίντεο: Mr. Roombato - A MATLAB-Driven Roomba Project 2024, Νοέμβριος
Anonim
Roomba Με MATLAB
Roomba Με MATLAB

Αυτό το έργο κάνει χρήση του MATLAB και ενός προγραμματιζόμενου ρομπότ iRobot Create2. Δοκιμάζοντας τις γνώσεις μας για το MATLAB, είμαστε σε θέση να προγραμματίσουμε το Create2 να ερμηνεύει εικόνες και να ανιχνεύει σήματα. Η λειτουργικότητα του ρομπότ εξαρτάται κυρίως από την εφαρμογή για κινητά MATLAB και μια μονάδα κάμερας Raspberry Pi.

Βήμα 1: Μέρη και υλικά

Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά
Ανταλλακτικά και Υλικά

1. Δημιουργία iRobot, Έκδοση 2

- Αυτό είναι ένα προγραμματιζόμενο ρομπότ που μοιάζει με Roomba. Λάβετε υπόψη ότι αυτό το προϊόν από το iRobot δεν είναι κενό. Προορίζεται για προσαρμοσμένο προγραμματισμό από τον χρήστη.

2. MATLAB 2017a

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

3. Raspberry Pi 3 Model B, Έκδοση 1.2

- Ελέγξτε για να δείτε ποιο Raspberry Pi είναι συμβατό με το iRobot σας. Δείτε αυτόν τον σύνδεσμο για περαιτέρω βοήθεια: https://www.irobotweb.com/~/media/MainSite/PDFs/A… Αυτό το διδακτικό υποθέτει ότι εργάζεστε με ένα προ -προγραμματισμένο Raspberry Pi. Λάβετε υπόψη ότι θα χρειαστεί να εργαστείτε με ένα προ -προγραμματισμένο Pi για να λειτουργήσουν τα παρακάτω βήματα. Η χρήση ενός προ -προγραμματισμένου Pi θα σας επιτρέψει να εκτελέσετε όλη την κωδικοποίηση μόνο στο MATLAB.

4. Camera Module V2 (για Raspberry Pi)

- Μπορεί να εκπλαγείτε. παρά το μέγεθός του, το Raspberry Pi Camera Module είναι πολύ καλής ποιότητας. Είναι η φθηνότερη και πιο συμβατή επιλογή για αυτό το έργο.

Προαιρετικό: Βάση με 3D εκτύπωση. Αυτό χρησιμοποιείται για τη σταθεροποίηση της κάμερας. Δεν επηρεάζει τη λειτουργικότητα του ρομπότ, αλλά θα σας βοηθήσει να κωδικοποιήσετε εάν επιθυμείτε να χρησιμοποιήσετε δεδομένα απεικόνισης για αναγνώριση χρώματος και/ή αντικειμένου.

Βήμα 2: Διαμόρφωση

Διαμόρφωση
Διαμόρφωση
Διαμόρφωση
Διαμόρφωση

1. Σύνδεση Raspberry Pi και μονάδας κάμερας (Hardware)

- Για να τροφοδοτήσετε το Raspberry Pi, θα χρειαστεί να τρέξετε ένα αρσενικό micro USB στη θηλυκή θύρα τροφοδοσίας του μικροελεγκτή. Προαιρετικά: Μπορεί να χρησιμοποιηθεί ρυθμιστής τάσης για να διασφαλιστεί ότι η τάση δεν υπερβαίνει τα 5V. Αφού τροφοδοτήσετε το Raspberry Pi, μπορείτε να το συνδέσετε στο ρομπότ σας εκτελώντας αρσενικό άκρο USB a από τη μητρική πλακέτα στη θύρα USB A του μικροελεγκτή.

- Αφού συνδέσετε το Pi στο Roomba, η κάμερα είναι έτοιμη για εγκατάσταση. Η μονάδα κάμερας θα είναι πολύ μικρότερη από ό, τι περιμένετε. Σημειώστε ότι ο φακός είναι τοποθετημένος σε έναν αισθητήρα και μια λευκή κορδέλα εκτείνεται από την κάμερα. ΜΗΝ αφαιρείτε ή σκίζετε την κορδέλα! Αυτό είναι το καλώδιο που χρειάζεστε για να το συνδέσετε στο Raspberry Pi. Πρώτα, κρατήστε το άκρο της κορδέλας και βρείτε τα ασημένια βύσματα και το μπλε καλώδιο. Αυτά βρίσκονται σε αντίθετες πλευρές. Στη συνέχεια, βρείτε την υποδοχή μεταξύ των θυρών ethernet και HDMI στο Raspberry Pi. Παρατηρήστε ότι υπάρχει μια μικρή, λευκή κλειδαριά που το καλύπτει. Σηκώστε αργά την κλειδαριά, αλλά μην την αφαιρέσετε από την υποδοχή, καθώς θα ασφαλίσει και θα υποστεί μόνιμη ζημιά. Μόλις σηκώσετε την κλειδαριά, πιάστε την κορδέλα και κοιτάξτε τα ασημένια βύσματα στη θύρα HDMI. Η μπλε πλευρά θα βλέπει τη θύρα Ethernet. Σύρετε αργά την κορδέλα στην υποδοχή ενώ είναι ακόμα ξεκλείδωτη. Δεν χρειάζεται να το πιέσετε με δύναμη στην υποδοχή. Μετά την εισαγωγή, σπρώξτε την κλειδαριά προς τα κάτω. Εάν η κάμερά σας είναι σωστά ασφαλισμένη, θα πρέπει να μπορείτε (να) τραβάτε απαλά την κορδέλα και να αισθάνεστε ένταση. Η κορδέλα δεν πρέπει να είναι χαλαρή. Αφού συνδέσετε τη φωτογραφική σας μηχανή με το Pi, μπορεί να παρατηρήσετε πόσο χαλαρή είναι. Αυτός είναι ο λόγος που χρησιμοποιήσαμε μια βάση 3D-εκτύπωσης για να τη σταθεροποιήσουμε. Είναι επιλογή σας να καθορίσετε ποια υλικά θα θέλατε να χρησιμοποιήσετε για να κρατήσετε τη φωτογραφική σας μηχανή ακίνητη για υψηλής ποιότητας απεικόνιση.

2. Εγκατάσταση κατάλληλων αρχείων και σύνδεση του Roomba στον υπολογιστή σας Αφού διαμορφωθεί όλο το υλικό σας, μπορείτε τώρα να προχωρήσετε στην εγκατάσταση του MATLAB μαζί με τα σχετικά αρχεία m που σας επιτρέπουν να επικοινωνείτε με το ρομπότ. Για να το κάνετε αυτό, ανοίξτε το MATLAB και δημιουργήστε έναν νέο φάκελο για να διατηρήσετε όλα τα σχετικά αρχεία ενωμένα. Χρησιμοποιήστε αυτό το σενάριο για να εγκαταστήσετε/ενημερώσετε τα απαιτούμενα αρχεία:

- Όλα τα αρχεία θα πρέπει τώρα να εμφανίζονται στο φάκελο που δημιουργήσατε. Κάντε δεξί κλικ στο παράθυρο Τρέχων φάκελος και επιλέξτε «Προσθήκη στη διαδρομή» για να προσθέσετε αυτήν τη διαδρομή στη λίστα καταλόγων όπου το MATLAB αναζητά αρχεία. Βεβαιωθείτε ότι όλα τα αρχεία σας βρίσκονται στη σωστή διαδρομή.

3. Μόλις εγκατασταθούν τα αρχεία, μπορείτε τώρα να αρχίσετε να συνδέεστε στο ρομπότ σας. Ξεκινήστε ενεργοποιώντας το ρομπότ σας και στη συνέχεια σκληρή επαναφορά του αμέσως μετά την εκκίνηση (μην ξεχνάτε να επαναφέρετε το ρομπότ σας κάθε φορά πριν και μετά τη χρήση). Δεύτερον, συνδέστε τόσο το ρομπότ όσο και το φορητό υπολογιστή σας στο ίδιο δίκτυο wifi. Μετά από αυτό, θα μιλήσουμε στο προσχεδιασμένο Raspberry Pi μέσω MATLAB καλώντας το Roomba χρησιμοποιώντας το όνομα του και τη λειτουργία roomba. Για παράδειγμα, θα συνδεόμουν με το ρομπότ 28 χρησιμοποιώντας την ακόλουθη γραμμή: R = roomba (28).

- Παρατηρήστε πώς εκχώρησα το αντικείμενο σε μια μεταβλητή R. Τώρα μπορώ να έχω πρόσβαση στις συναφείς συναρτήσεις Roomba από το αρχείο εγκατάστασης αντιμετωπίζοντας τη μεταβλητή R σαν δομή.

- R.turnAngle (90) Αν όλα πήγαιναν καλά, θα έπρεπε να παίζει ένας μουσικός τόνος, επιβεβαιώνοντας τη σύνδεση.

Βήμα 3: Λογική MATLAB

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

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

Ο Κώδικας δίνει εντολή στο Roomba να εκτελέσει μια βασική ρύθμιση και στη συνέχεια να συνεχίσει μέσω ενός συνεχούς βρόχου. Αρχικά ο φορητός υπολογιστής θα δημιουργήσει μια σύνδεση με το Roomba χρησιμοποιώντας την εντολή Roomba (). Ρυθμίζει επίσης τη σύνδεση twitter χρησιμοποιώντας την εντολή webwrite () στο MATLAB. Ο βρόχος περιέχει πέντε κύριες λογικές ροές ανάλογα με το περιβάλλον που περιβάλλει το Roomba. Πρώτα το Roomba ελέγχει για εμπόδια και προσαρμόζεται προς τα πίσω εάν διαπιστώσει ότι εμποδίζεται. Ενσωματωμένος σε αυτόν τον βρόχο είναι η δεύτερη διαδρομή που ειδοποιεί τους χρήστες εάν το Roomba παρασύρεται. Ένα σημαντικό βοηθητικό πρόγραμμα στη σκληρή εμπόλεμη ζώνη του Άρη. Αφού το Roomba διαπιστώσει ότι η θέση του είναι ασφαλής, κοιτάζει την κινητή συσκευή για να καθορίσει την επόμενη κίνησή της. Εάν η κινητή συσκευή έχει κλίση προς τα εμπρός, θα υπολογίσει μια ταχύτητα βάσης ανάλογα με τη σοβαρότητα της μέτρησης του κυλίνδρου, παρά θα προσαρμόσει τις μεμονωμένες ταχύτητες τροχού να περιστρέφονται με βάση τον βαθμό κλίσης. Το τηλέφωνο μπορεί επίσης να μετακινήσει την Roomba αντίστροφα. Μια κατάσταση ουδέτερης κινητής συσκευής ανοίγει τις δύο τελευταίες διαδρομές. Ένας ξεκούραση Roomba θα αναζητήσει μια ξένη σημαία και θα ειδοποιήσει το χρήστη αναλόγως.

Παρακάτω είναι ο κωδικός μας (συμπληρωμένος στο MATLAB 2017a)

%εισόδους: Δεδομένα προσανατολισμού από συνδεδεμένη συσκευή wifi, κάμερα

%πληροφορίες, δεδομένα αισθητήρα

%εξόδους: η κίνηση ελέγχεται από τη συνδεδεμένη συσκευή wifi και την κίνηση

% ελέγχεται η ασφάλεια με την ανάγνωση δεδομένων αισθητήρα. Εάν η κάμερα ανιχνεύσει

% μια εξωγήινη σημαία τότε το roomba απαντά με tweeting την εχθρική σημαία

% έχει εντοπιστεί.

%σκοπός: η συσκευή μας ζει χωρίς σκοπό εκτός από την προστασία αυτών που

% το δημιούργησε, εξυπηρετεί τον δημιουργό του και το κάνει

% ακριβώς αυτό που λέει.

%Χρήση: ουσιαστικά το πρόγραμμα θα τρέξει μόνο του.

διαγραφή όλων, κλείσιμο όλων, clc

%Αρχικοποίηση αντικειμένων και μεταβλητών

r = roomba (28);

m = mobiledev;

%use respond = webwrite (όνομα κεντρικού υπολογιστή, δεδομένα)

hostname = 'https://api.thingspeak.com/apps/thingtweet/1/statuses/update'?

API = 'SGZCTNQXCWAHRCT5';

tweet = 'Το RoboCop είναι Λειτουργικό… Αναμονή εντολής';

data = strcat ('api_key =', API, '& status =', tweet);

reponse = webwrite (όνομα κεντρικού υπολογιστή, δεδομένα);

%συνεχώς τρέχει βρόχος

ενώ 1 == 1

%Δομές που περιέχουν δεδομένα Relavent

o = m. προσανατολισμός; %προσανατολισμός της κινητής συσκευής

φως = r.getLightBumpers (); %Τιμές ελαφρού προφυλακτήρα

a = r.getCliffSensors (); %Τιμές αισθητήρα CLiff

bump = r.getBumpers (); %Αισθητήρες προφυλακτήρα

%προφυλακτήρες ελέγχου

αν bump.right == 1 || bump.left == 1 || bump.front == 1

r.moveDistance (-. 2,.2);

%Αισθητήρες ελέγχου φωτός

elseif light.left> 60 || light.leftΜπροστινό> 60 || light.leftCenter> 60 || light.right> 60 || light.rightΜπροστινό> 60 || light.rightCenter> 60

r.moveDistance (-. 2,.2);

%έλεγχος Cliff Sensors

%Αντικλεπτικό σήμα και ειδοποίηση

elseif a.left <300 && a.right <300 && a.leftΜπροστινό <300 && a.rightFront <300

r.stop ();

r.beep ();

tweet = 'Το RoboCop έχει αρθεί!'

data = strcat ('api_key =', API, '& status =', tweet);

reponse = webwrite (όνομα κεντρικού υπολογιστή, δεδομένα);

%Κανονική λειτουργία αποφυγής γκρεμού

elseif a.left <300 || α.δεξιά <300 || a.leftFront <300 || a.rightFront <300

r.moveDistance (-. 2,.2);

%Ο Roomba πέρασε τους ελέγχους και τώρα θα λειτουργεί με κανονική λειτουργία.

%Αρχικά το ρολό της συσκευής μετριέται και γίνεται βάση

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

%Forward Motion

elseif o (3)> = 0 && o (3) <= 60

baseVel = (-. 5/60)*(o (3) -60);

αν o (2)> =-70 && o (2) <0

r.setDriveVelocity (baseVel+(. 3/50)*abs (o (2)), baseVel-(. 3/50)*abs (o (2)));

elseif o (2) = 0

r.setDriveVelocity (baseVel-(. 3/50)*abs (o (2)), baseVel+(. 3/50)*abs (o (2)));

αλλιώς r.stop

τέλος

%Πίσω κίνηση

elseif o (3)> 100 && o (3) <150

r.setDriveVelocity (-. 2, -.2)

r.beep ();

r.beep ();

Το %resta roombaba θα αναζητήσει τη Σημαία Ξένων που έχει επισημανθεί ως φθορίζον

%πράσινο Κομμάτι χαρτί

αλλού

r.stop

img = r.getImage (); %λήψη εικόνας

κατώφλι = γκριζωπό (img (200: 383,:, 2))+. 1; %calc πράσινο επίπεδο

αν κατώφλι>.42

tweet = 'Ο εχθρός εντοπίστηκε !!'

data = strcat ('api_key =', API, '& status =', tweet);

reponse = webwrite (όνομα κεντρικού υπολογιστή, δεδομένα);

αλλού

r.stop

τέλος

τέλος

τέλος

Βήμα 4: Συμπέρασμα

Θυμηθείτε, μπορείτε να χρησιμοποιήσετε το σενάριο που γράψαμε παραπάνω, αλλά μπορείτε πάντα να το αλλάξετε ώστε να ταιριάζει στις ανάγκες σας. Δεν χρειάζεται να ελέγχεται από το τηλέφωνό σας! (Ωστόσο, το κάνει πιο διασκεδαστικό.) Επιλέξτε ποια μέθοδο προτιμάτε να χρησιμοποιήσετε για τον έλεγχο του ρομπότ σας. Οδηγήστε με το ρομπότ σας και απολαύστε!

Συνιστάται: