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

MATLAB Controlled Roomba: 5 βήματα
MATLAB Controlled Roomba: 5 βήματα

Βίντεο: MATLAB Controlled Roomba: 5 βήματα

Βίντεο: MATLAB Controlled Roomba: 5 βήματα
Βίντεο: Roomba Control (ROS & MATLAB) 2024, Ιούλιος
Anonim
MATLAB Ελεγχόμενη Roomba
MATLAB Ελεγχόμενη Roomba
MATLAB Ελεγχόμενη Roomba
MATLAB Ελεγχόμενη Roomba

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

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

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

MATLAB 2018α

-Η έκδοση 2018 του MATLAB είναι η πιο προτιμώμενη έκδοση, κυρίως επειδή λειτουργεί καλύτερα με τον κωδικό που συνδέεται με την κινητή συσκευή. Ωστόσο, το μεγαλύτερο μέρος του κώδικα μας μπορεί να ερμηνευτεί στην πλειονότητα των εκδόσεων MATLAB.

iRobot Δημιουργία συσκευής

-Αυτή η συσκευή είναι μια ειδική συσκευή που έχει αποκλειστικό σκοπό τον προγραμματισμό και την κωδικοποίηση. (Δεν είναι πραγματικό κενό)

Raspberry Pi (με κάμερα)

- Αυτός είναι ένας μη ακριβός πίνακας υπολογιστών που λειτουργεί ως εγκέφαλος του iRobot. Μπορεί να είναι μικρό, αλλά είναι ικανό για πολλά πράγματα. Η κάμερα είναι ένα πρόσθετο πρόσθετο. Χρησιμοποιεί επίσης το raspberry pi για να λάβει όλες τις λειτουργίες και τις εντολές του. Η κάμερα που απεικονίζεται παραπάνω είναι τοποθετημένη σε τρισδιάστατη βάση εκτύπωσης, που δημιουργήθηκε από τα τμήματα Engineering Fundamentals στο Πανεπιστήμιο του Τενεσί

Βήμα 2: Αρχείο βάσης δεδομένων Roomba

Αρχείο βάσης δεδομένων Roomba
Αρχείο βάσης δεδομένων Roomba

Υπάρχει ένα κύριο αρχείο που θα χρειαστείτε για να χρησιμοποιήσετε τις κατάλληλες λειτουργίες και εντολές για το roomba σας. Αυτό το αρχείο είναι το σημείο όπου γράψατε τον κώδικα που αντλεί λειτουργίες για να κάνει τη λειτουργία του roomba πιο εύχρηστη.

Μπορείτε να κατεβάσετε το αρχείο σε αυτόν τον σύνδεσμο ή το αρχείο με δυνατότητα λήψης παρακάτω

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Βήμα 3: Σύνδεση στο Roomba

Πρώτον, πρέπει να βεβαιωθείτε ότι το ρομπότ σας είναι συνδεδεμένο στον πίνακα raspberry pi χρησιμοποιώντας ένα βύσμα micro USB. Στη συνέχεια, πρέπει να συνδέσετε σωστά τον υπολογιστή και το ρομπότ σας στο ίδιο WiFi. Μόλις γίνει αυτό, μπορείτε να ενεργοποιήσετε το ρομπότ σας και να συνδεθείτε σε αυτό χρησιμοποιώντας τη δεδομένη εντολή στο αρχείο βάσης δεδομένων ρομπότ. (Πάντα σκληρά επαναφέρετε το ρομπότ σας πριν και μετά τη χρήση του). Για παράδειγμα, χρησιμοποιούμε την εντολή "r.roomba (19)" για να συνδεθούμε στο ρομπότ μας, εκχωρώντας τη μεταβλητή r στη συσκευή μας. Αυτό αναφέρεται πίσω στο αρχείο βάσης δεδομένων, το οποίο ορίζει τη μεταβλητή μας ως δομή στην οποία μπορούμε να αναφερθούμε ανά πάσα στιγμή.

Βήμα 4: Ο κώδικας

Ο κώδικας
Ο κώδικας
Ο κώδικας
Ο κώδικας

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

Ξεκινήσαμε με την απλή εντολή "r.setDriveVelocity (.06)" που θέτει την ταχύτητα προς τα εμπρός του ρομπότ σε.06 m/s. Αυτό γίνεται μόνο για να κινηθεί το ρομπότ εκ των προτέρων

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

ενώ το true % while loop πηγαίνει μέχρι να συμβεί κάτι "false" (σε αυτή την περίπτωση συνεχίζεται απείρως) δεδομένα = r.getCliffSensors; data2 = r.getBumpers; % ανακτά συνεχώς δεδομένα σχετικά με τις τιμές του αισθητήρα βράχου και τα εκχωρεί σε μια μεταβλητή % img = r.getImage; % Λαμβάνει μια εικόνα από την τοποθετημένη κάμερα % image (img). % Εμφανίζει την εικόνα που ελήφθη % red_mean = μέσο (μέσος όρος (img (:,,, 1))); % Παίρνει τη μέση τιμή για το πράσινο χρώμα εάν data.rightFront <2000 r.turnAngle (-2); % στρέφει το Roomba περίπου 0,2 βαθμούς CW μόλις η τιμή για τους μπροστινούς αισθητήρες βράχου πέσει κάτω από 2000 r.setDriveVelocity (.05); elseif data.leftFront data.leftFront && 2000> data.rightFront r.moveDistance (.1); Το % λέει στο Roomba να συνεχίσει προς τα εμπρός με ταχύτητα περίπου 0,2 m/s εάν και οι δύο τιμές από το δεξί μπροστινό και το αριστερό μπροστινό αισθητήριο πέσουν κάτω από το 2000 % r.turnAngle (0). % λέει στο Roomba να μην γυρίσει αν ισχύουν οι παραπάνω συνθήκες

elseif data2.right == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05); elseif data2.left == 1 r.moveDistance (-. 2); r.turnAngle (5); r.setDriveVelocity (.05); elseif data2.front == 1 r.moveDistance (-. 12); r.turnAngle (160); r.setDriveVelocity (.05);

Μετά από αυτόν τον βρόχο while, εισάγουμε έναν άλλο βρόχο while που ενεργοποιεί τα δεδομένα που λαμβάνονται μέσω της κάμερας. Και χρησιμοποιούμε μια δήλωση if μέσα σε αυτόν τον βρόχο while που αναγνωρίζει μια εικόνα χρησιμοποιώντας ένα συγκεκριμένο πρόγραμμα (alexnet) και μόλις αναγνωρίσει την εικόνα ενεργοποιεί αμέσως το τηλεχειριστήριο της κινητής συσκευής

anet = alexnet; % Αναθέτει το alexnet deep learning σε μια μεταβλητή ενώ είναι αληθής % Infinite while loop img = r.getImage; img = μεγέθυνση (img, [227, 227]); ετικέτα = ταξινόμηση (anet, img); εάν ετικέτα == "χαρτοπετσέτα" || ετικέτα == "ψυγείο" label = "νερό"? τελική εικόνα (img)? τίτλος (κάρτα (ετικέτα))? drawnow?

Ο βρόχος while που μας επιτρέπει να ελέγχουμε τη συσκευή με το τηλέφωνό μας ανακτά αυτά τα δεδομένα από το γυροσκόπιο του τηλεφώνου και τα συνδέουμε σε μια μήτρα που συνεχώς μεταφέρει δεδομένα πίσω στο MATLAB στον υπολογιστή. Χρησιμοποιούμε μια εντολή if που διαβάζει τα δεδομένα της μήτρας και δίνει έξοδο που κινεί τη συσκευή με βάση ορισμένες τιμές του γυροσκοπίου του τηλεφώνου. Είναι σημαντικό να γνωρίζουμε ότι χρησιμοποιήσαμε τους αισθητήρες προσανατολισμού της κινητής συσκευής. Ο πίνακας ένας προς τρεις που αναφέρθηκε παραπάνω κατηγοριοποιείται ανά στοιχείο των αισθητήρων προσανατολισμού του τηλεφώνου, το οποίο είναι αζιμούθιο, βήμα και πλευρά. Οι δηλώσεις if δημιούργησαν συνθήκες που δηλώνουν όταν η πλευρά υπερβαίνει τις τιμές 50 ή πέφτει κάτω από -50, τότε το ρομπότ κινείται μια συγκεκριμένη απόσταση προς τα εμπρός (θετικό 50) ή προς τα πίσω (αρνητικό 50). Και το ίδιο ισχύει για την τιμή του βήματος. Εάν η τιμή του βήματος υπερβαίνει την τιμή των 25 του πέφτει κάτω από -25, το ρομπότ στρέφεται υπό γωνία 1 μοιρών (θετική 25) ή αρνητική 1 μοίρα (αρνητική 25)

ενώ αληθινή παύση (.1) % Παύση.5 δευτερολέπτων πριν από τη λήψη κάθε τιμής Controller = iphone. Orientation; % Αναθέτει τη μήτρα για τις τιμές προσανατολισμού του iPhone σε μια μεταβλητή Azimuthal = Controller (1); % Αναθέτει την πρώτη τιμή του πίνακα σε μια μεταβλητή Pitch = Controller (2); % Εκχωρεί τη δεύτερη τιμή του πίνακα σε μια μεταβλητή (κλίση προς τα εμπρός και προς τα πίσω όταν το iPhone κρατιέται στο πλάι) Πλευρά = Ελεγκτής (3). % Εκχωρεί την τρίτη τιμή του πίνακα σε μια μεταβλητή (κλίση αριστερά και δεξιά όταν το iPhone κρατιέται στο πλάι) % Προκαλεί έξοδο με βάση τον προσανατολισμό του τηλεφώνου εάν Side> 130 || Side 25 r.moveDistance (-. 1) % Μετακινεί το Roomba προς τα πίσω περίπου.1 μέτρα αν το iPhone έχει κλίση προς τα πίσω τουλάχιστον 25 πτώση αλλιώς έχει κλίση προς τα αριστερά τουλάχιστον 25 μοίρες elseif Βήμα <-25 r.turnAngle (1) % Γυρίζει το Roomba περίπου 1 βαθμό CW εάν το iPhone έχει κλίση τουλάχιστον 25 μοίρες στο τέλος

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

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

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

Συνιστάται: