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

UTK EF 230 MarsRoomba Project Fall 2018: 5 Βήματα
UTK EF 230 MarsRoomba Project Fall 2018: 5 Βήματα

Βίντεο: UTK EF 230 MarsRoomba Project Fall 2018: 5 Βήματα

Βίντεο: UTK EF 230 MarsRoomba Project Fall 2018: 5 Βήματα
Βίντεο: В БЕЗДНУ - ранчо Скинвокер с Брэндоном Фугалом (последние сведения) 2024, Ιούλιος
Anonim
UTK EF 230 MarsRoomba Project Fall 2018
UTK EF 230 MarsRoomba Project Fall 2018

Επί του παρόντος, τα ροβόλια του Άρη χρησιμοποιούνται για τη συλλογή δεδομένων στην επιφάνεια του Άρη μέσω διαφόρων μεθόδων, με σκοπό να μάθουν περισσότερα για τις δυνατότητες του πλανήτη για μικροβιακή ζωή. Τα Rover χρησιμοποιούν κυρίως εργαλεία φωτογραφίας και ανάλυσης εδάφους για τη συλλογή δεδομένων, αλλά τα rovers περιλαμβάνουν επίσης εργαλεία πλοήγησης, ανιχνευτές ακτινοβολίας, ατμοσφαιρικούς αισθητήρες και λέιζερ για εξάτμιση δείγματος βράχου. Ο στόχος της προγραμματισμένης αποστολής rover 2020 είναι ο ίδιος, αλλά με το ειδικό καθήκον να «συλλέξει δείγματα εδάφους και βράχων και να τα αποθηκεύσει στην επιφάνεια για πιθανή επιστροφή στη Γη από μελλοντική αποστολή», σύμφωνα με τη NASA.

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

Αυτό το Instructable έχει σχεδιαστεί για να βοηθήσει τον αναγνώστη να προγραμματίσει το Roomba του να ακολουθήσει επιτυχώς έναν "αστροναύτη" και να στείλει ένα σήμα κινδύνου, εάν υπάρχει.

Βήμα 1: Απαιτούνται υλικά

Χρειαζονται ΥΛΙΚΑ
Χρειαζονται ΥΛΙΚΑ

1) Υπολογιστής/φορητός υπολογιστής με πρόσβαση στο Διαδίκτυο

2) MATLAB_R2018α

3) Λήψη Roomba και Roomba

Βήμα 2: Ρύθμιση/Λήψη

Ρύθμιση/Λήψη
Ρύθμιση/Λήψη

Εκτελέστε αυτό το σενάριο στο MATLAB για να κάνετε λήψη του λογισμικού που απαιτείται για πρόσβαση στο Roomba (αποθηκευμένο στο δικό του αρχείο στο φάκελο του έργου)

Πρόσθετη βοήθεια:

% Πρόγραμμα εγκατάστασης για το έργο EF 230 Roomba% Τελευταία ενημέρωση: 13 Σεπτεμβρίου 2017 (Διορθώθηκαν ζητήματα ασφάλειας που σχετίζονται με τον διακομιστή https και αφαιρέθηκε η προειδοποίηση διαγραφής αρχείου σε περίπτωση σφάλματος) λειτουργία roombaInstall clc; % λίστα αρχείων για εγκατάσταση αρχείων = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % τοποθεσία για εγκατάσταση από τις επιλογές = weboptions ('CertificateFilename', ''); % πείτε του να αγνοήσει τις απαιτήσεις πιστοποιητικού διακομιστή = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Εγκατάσταση/Ενημέρωση Roomba'; % εμφανίζει το σκοπό και λάβετε προτροπή επιβεβαίωσης = {'Αυτό το πρόγραμμα θα κατεβάσει αυτά τα αρχεία EF 230 Roomba:' '' strjoin (αρχεία, '') '' 'σε αυτόν το φάκελο:' '' cd '' 'Θέλετε να συνεχίσετε; '}; μπιπ? yn = questdlg (προτροπή,… dlgTitle,… 'Ναι', 'Όχι', 'Ναι');

εάν ~ strcmp (yn, 'Yes'), επιστροφή. τέλος

% get λίστα αρχείων που υπάρχουν υπάρχοντα_αρχεία = αρχεία (cellfun (@exist, files)> 0) εάν ~ isempty (υπάρχοντα_αρχεία) % βεβαιωθείτε ότι είναι εντάξει να τα αντικαταστήσετε αμέσως = {'Αντικαθιστάτε αυτά τα αρχεία:' '' strjoin (υπάρχοντα_αρχεία, '') '' 'ΟΚ για αντικατάσταση;' }; μπιπ? yn = questdlg (προτροπή,… dlgTitle,… 'Ναι', 'Όχι', 'Ναι'); εάν ~ strcmp (yn, 'Yes'), επιστροφή. τέλος τέλος

% λήψη των αρχείων cnt = 0; για i = 1: μήκος (αρχεία) f = αρχεία {i}; disp (['Λήψη' f]); δοκιμάστε url = [διακομιστής f]; websave (f, url, options)? % πρόσθετες επιλογές για την αποφυγή σφαλμάτων ασφαλείας cnt = cnt + 1; catch disp (['Σφάλμα κατά τη λήψη' f]); ομοίωμα = [f '.html']; εάν υπάρχει (εικονικό, 'αρχείο') == 2 διαγραφή (εικονικό) τελικό τέλος

εάν cnt == μήκος (αρχεία) msg = 'Επιτυχής εγκατάσταση'; waitfor (msgbox (msg, dlgTitle)); else msg = 'Σφάλμα εγκατάστασης - δείτε το παράθυρο εντολών για λεπτομέρειες'; waitfor (errordlg (msg, dlgTitle)); τέλος

τέλος %roombaInstall

Βήμα 3: Κωδικός Μέρος 1: Λειτουργία παρακολούθησης

Κωδικός Μέρος 1: Λειτουργία παρακολούθησης
Κωδικός Μέρος 1: Λειτουργία παρακολούθησης

Αυτή η λειτουργία παίρνει τη μεταβλητή Roomba και την εικόνα από την κάμερα στο Roomba και βρίσκει τις κεντρικές συντεταγμένες xy του αντικειμένου που παρακολουθείται

Αποθηκεύστε αυτόν τον κωδικό σε άλλο αρχείο στον ίδιο φάκελο.

συνάρτηση [xm, ym] = trackingblue (r) %Inputs: roomba variable %Outputs: x and y value of the center of the following object %Σκοπός: βρίσκει το κέντρο ενός μπλε αντικειμένου που δίνει μια εικόνα %Χρήση [τιμή x, y τιμή] = trackingblue (μεταβλητή roomba) img = r.getImage; % διαβάζει την κάμερα από το δευτερεύον υποκόμμα ρομπότ (1, 2, 2) (img). %εμφανίζει εικόνα στο ίδιο παράθυρο με τον τίτλο της διαδρομής ('Tracking Image') red = img (:,:, 1); πράσινο = img (:,:, 2); μπλε = img (:,:, 3); justBlue = μπλε - πράσινο/2 - κόκκινο/2; bw = justBlue> 40; κρατήστε το subplot (1, 2, 2) subimage (bw)? [x, y] = εύρεση (bw); αν ~ άδικο (x) && ~ άδικο (y) xm = στρογγυλό (μέσος όρος (x)); ym = στρογγυλό (μέσο (y)); xx = max (1, xm-5): min (xm+5, μέγεθος (bw, 1)); yy = max (1, ym-5): min (ym+5, μέγεθος (bw, 2)); bwbw = μηδενικά (μέγεθος (bw), 'uint8'); bwbw (xx, yy) = 255; κρατήστε πατημένο το subplot (1, 2, 2) subimage (justBlue + bwbw)? τέλος

Βήμα 4: Κωδικός Μέρος 2: Ενώ βρόχος

Αυτός ο κωδικός οδηγεί το Roomba με βάση τη θέση x και y του αντικειμένου από τη λειτουργία παρακολούθησης. Αυτό θα κάνει το Roomba να προσέχει τους τοίχους και τους γκρεμούς, ενώ αναζητά το μπλε. Αυτό θα πάρει επίσης τις συντεταγμένες x και y της διαδρομής Roomba και θα δημιουργήσει ένα αντίστοιχο διάγραμμα με την εικόνα παρακολούθησης. Εάν ο αισθητήρας bump είναι ενεργοποιημένος, θα μεταβεί στην ενότητα email

%Rover Project

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Είσοδοι: τιμή δωματίου, δεδομένα κάμερας, αισθητήρες χτυπήματος, φωτός και τοίχου %Σκοπός: Ακολουθεί αστροναύτη και αποφεύγει εμπόδια. Εάν ειδοποιηθεί, το roomba στέλνει ένα μήνυμα ηλεκτρονικού ταχυδρομείου %αναφέροντας έναν χάρτη και πού βρίσκεται σύμφωνα με τη θέση εκκίνησης. %Χρήση: απλώς εκτελέστε το πρόγραμμα έχοντας δηλώσει μεταβλητή roomba, επίσης %έχουν κινούμενο πράσινο αντικείμενο %Έξοδος: εμφανίζει εικόνα παρακολούθησης εικόνας, χάρτη μηνυμάτων ηλεκτρονικού ταχυδρομείου και κείμενο στο χρήστη %% Ακολουθώντας την ενότητα b = 0; %Αρχικοποίηση μεταβλητών c = 0; x = 0; y = 0; θήτα = 0; ενώ c == 0 %Loop για να εντοπίσει το μπλε αντικείμενο και τα εμπόδια t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue (r); cliff = getCliffSensors (r); %προετοιμασία των δομών για τιμές αισθητήρων φως = getLightBumpers (r); bump = getBumpers (r); εάν light.leftCenter> = 10 || light.rightCenter> = 10 % Ανιχνεύει αν υπάρχει τοίχος κοντά σε r.stop r.setLEDDigits («βοήθεια») c = 1 % ενώ b == 0 % αν bump.right == 1 || bump.left == 1 || bump.front == 1 % Αισθάνεται αν έχει χτυπήσει κάτι αφού αισθανθεί έναν τοίχο % c = 1 % b = 1 % disp ('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Αντιλαμβάνεται αν έχει χτυπήσει κάτι, αν ναι, θα στείλει ένα μήνυμα ηλεκτρονικού ταχυδρομείου r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || cliff.left <= 100 || cliff.right <= 100 %Αισθάνεται αν υπάρχει γκρεμός κοντά σε r.stop c = 1 r.setLEDDigits ('help') else %Ορίζει τις ταχύτητες της μονάδας δίσκου να ακολουθούν το μπλε αν yval = 100 r.setDriveVelocity (0.1) elseif yval 400 r.turnAngle (-5) τελικό άκρο theta = theta + r.getAngle; x = d.*cosd (theta) + x; % x συντεταγμένη του δωματίου y = d.*sind (theta).*d + y; συντεταγμένη % y του υποπαρουσιού roomba (1, 2, 1) οικόπεδο (x, y, 'bd') % σχεδιάζει τη διαδρομή και προσθέτει έναν τίτλο τίτλου ('Roomba Path') αναμονή. τέλος

Βήμα 5: Κωδικός Μέρος 3: Τμήμα ηλεκτρονικού ταχυδρομείου

Αυτό θα ακολουθήσει το σχεδιάγραμμα της διαδρομής και της εικόνας και θα το στείλει σε μια καθορισμένη διεύθυνση email

(Εμφανίζεται εδώ με παράδειγμα email)

%% Ενότητα ηλεκτρονικού ταχυδρομείου

αν b == 1 saveas (gcf, 'rovermap.png') %αποθηκεύει το σχήμα setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com')? setpref ("Διαδίκτυο", "E_mail", "[email protected]"); % λογαριασμός αλληλογραφίας προς αποστολή από το setpref ("Διαδίκτυο", "SMTP_Username", "[email protected]"); % user name setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Αποστολές κωδικών πρόσβασης αποστολέων = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail («παράδειγμα email», «RoverBeacon», «Ο αστροναύτης σταμάτησε να κινείται. Για ανάκτηση, ακολουθήστε τις οδηγίες στο συνημμένο αρχείο.», «rovermap.png») disp («εστάλη email») τέλος

Συνιστάται: