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

IRobot Create-Mars Expedition Rover Mark I: 4 Βήματα
IRobot Create-Mars Expedition Rover Mark I: 4 Βήματα

Βίντεο: IRobot Create-Mars Expedition Rover Mark I: 4 Βήματα

Βίντεο: IRobot Create-Mars Expedition Rover Mark I: 4 Βήματα
Βίντεο: Посадка Марсохода Perseverance- История Изнутри 2024, Νοέμβριος
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

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

Βήμα 1: Προμήθειες

Προμήθειες
Προμήθειες

Για αυτό το έργο, θα χρειαστείτε ένα iRobot Create, το οποίο είναι μια προγραμματιζόμενη έκδοση της ρομπότ σκούπας Roomba. Το ρομπότ έρχεται εξοπλισμένο με όλους τους αισθητήρες που απαιτούνται για αυτό το έργο, συγκεκριμένα αισθητήρες χτυπήματος, αισθητήρες βράχου και αισθητήρες "Light Bump". Θα χρειαστείτε επίσης Raspberry Pi και βιντεοκάμερα, που χρησιμοποιούνται για ασύρματη επικοινωνία, ζωντανό προγραμματισμό και ζωντανή ροή βίντεο. Τέλος, θα χρειαστείτε μια βάση εκτύπωσης 3D για το Raspberry Pi και την κάμερα.

Βήμα 2: Αναπτύξτε την κωδικοποίηση για να ικανοποιήσετε το επιθυμητό αποτέλεσμα

Αναπτύξτε την κωδικοποίηση για να ικανοποιήσετε το επιθυμητό αποτέλεσμα
Αναπτύξτε την κωδικοποίηση για να ικανοποιήσετε το επιθυμητό αποτέλεσμα

Μόλις συνδέσετε το Roomba, θα χρειαστεί να δημιουργήσετε έναν κώδικα Matlab που θα σας δώσει τις επιθυμητές εξόδους μετά τις επιθυμητές εισόδους.

Μπορείτε να δείτε τον κωδικό εδώ:

%Roomba Project%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Περιγραφή προβλήματος: Δημιουργήστε ένα rover για να βοηθήσει τους ανθρώπους κατά τη διάρκεια της %εξερεύνησης/κατοίκησης του Άρη. %Μέθοδος επίλυσης: Αναζητήστε οργανική (πράσινη) ύλη χρησιμοποιώντας %προφυλακτήρες φωτός, αισθητήρες βράχου και κάμερα για έλεγχο οργανικής ύλης. Επιτρέψτε στο %rover να περιηγηθεί σε ανώμαλο έδαφος χρησιμοποιώντας προφυλακτήρες, αισθητήρες %cliff και αισθητήρες ύψους τροχού. Δώστε τη δυνατότητα στους ανθρώπους να ελέγχουν το rover από %σε απόσταση ασφαλείας και να αναζητούν μη αυτόματα ορυκτά με μη αυτόματο τρόπο. επιλογές = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Τρεις επιλογές στο μενού διαλόγου Ρύθμιση = μενού ('', επιλογές) εάν Ρύθμιση> 0 %Εάν επιλεγεί η επιλογή ζητήστε επιλογές επιβεβαίωσης χρήστη2 = {'Ναι', 'Όχι'} %Δημιουργήστε έναν πίνακα κελιών για "ναι" ή "Όχι "επιλογή Επιβεβαίωση = μενού ([" Επιλέξατε "" επιλογές {Ρύθμιση} "" λειτουργία. '], επιλογές2) %Επιβεβαιώστε την επιλογή ρύθμισης χρήστη εάν Επιβεβαιώσετε == 1 εάν Ρύθμιση == 1 %Ελέγξτε εάν έχει επιλεγεί η ρύθμιση "LIFE" i = 0 ενώ i == 0 r.setLEDDigits (num2str ('LIFE')) %Εμφάνιση 'LIFE' στο LED για i = 1: 100 r.setDriveVelocity (0,05) %Μετακίνηση του roomba προς τα εμπρός στα 0,05 m/sy = r.getCliffSensors %Ανάκτηση και αποθήκευση τιμών αισθητήρων γκρεμού στη δομή κυψέλης "y" l = r.getLightBumpers %Ανάκτηση και αποθήκευση τιμών φωτισμού σε δομή "f" αν l.left> 100 %Ελέγξτε εάν καλύπτεται ο προφυλακτήρας αριστερού φωτός r.moveDistance (-0,05) %Μετακίνηση roomba προς τα πίσω 0,05 μέτρα r.turnAngle (20) %Περιστροφή δωματίου 20 μοίρες CCW img = r.getImage %Λήψη εικόνας από κάμερα πίτας βατόμουρου σε roomba rect = [100 0 150 150]; img = imcrop (img, rect) %περικοπή εικόνας για εστίαση στο κεντρικό κόκκινο = μέσο (μέσος όρος (img (:,,, 1))) %μέση ένταση κόκκινου πράσινου = μέσος όρος (μέσος όρος (img (:,,, 2))) %μέση πράσινη ένταση μπλε = μέση (μέση τιμή (img (:,,, 3))) %μέση ένταση μπλε αν πράσινη> κόκκινη && πράσινη> μπλε %Ελέγξτε αν το φυτό είναι στην εικόνα d = msgbox (['Η ζωή βρέθηκε! ']); %Εμφάνιση ενός πλαισίου μηνυμάτων που λέει "Η ζωή βρέθηκε!" αναμονή (δ)? end elseif l.leftΜπροστινό> 100 %Έλεγχος είναι αριστερός/ο προφυλακτήρας μπροστινού φωτός καλύπτεται r.move Απόσταση (-0.05) %Μετακίνηση δωματίου προς τα πίσω 0.05 μέτρα img = r.getImage %Λήψη εικόνας από κάμερα πίτας βατόμουρου στο roomba και αποθήκευση σε μεταβλητό 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %περικοπή εικόνας για εστίαση στο κεντρικό κόκκινο = μέσο (μέσος όρος (img (:,,, 1))) %μέση ένταση κόκκινου πράσινου = μέσος όρος (μέσος όρος (img (:,,, 2))) %μέση πράσινη ένταση μπλε = μέση (μέση τιμή (img (:,,, 3))) %μέση ένταση μπλε αν πράσινη> κόκκινη && πράσινη> μπλε %Ελέγξτε αν το φυτό είναι στην εικόνα d = msgbox (['Η ζωή βρέθηκε! ']); %Εμφάνιση ενός πλαισίου μηνυμάτων που λέει "Η ζωή βρέθηκε!" αναμονή (δ)? end elseif l.leftCenter> 100 %Ελέγξτε αν καλύπτεται ο προφυλακτήρας αριστερού/κεντρικού φωτός r.moveDistance (-0.05) %Μετακίνηση δωματίου προς τα πίσω 0.05 μέτρα img = r.getImage %Λήψη εικόνας από κάμερα πίτας βατόμουρου στο roomba και αποθήκευση σε μεταβλητό 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %περικοπή εικόνας για εστίαση στο κεντρικό κόκκινο = μέσο (μέσος όρος (img (:,,, 1))) %μέση ένταση κόκκινου πράσινου = μέσος όρος (μέσος όρος (img (:,,, 2))) %μέση πράσινη ένταση μπλε = μέση (μέση τιμή (img (:,,, 3))) %μέση ένταση μπλε αν πράσινη> κόκκινη && πράσινη> μπλε %Ελέγξτε αν το φυτό είναι στην εικόνα d = msgbox (['Η ζωή βρέθηκε! ']); %Εμφάνιση ενός πλαισίου μηνυμάτων που λέει "Η ζωή βρέθηκε!" αναμονή (δ)? end elseif l.rightCenter> 100 %Ελέγξτε αν καλύπτεται ο προφυλακτήρας δεξιού/κεντρικού φωτός r.move Απόσταση (-0,05) %Μετακίνηση δωματίου προς τα πίσω 0,05 μέτρα img = r.getImage %Λήψη εικόνας από κάμερα πίτας βατόμουρου στο roomba και αποθήκευση σε μεταβλητό 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %περικοπή εικόνας για εστίαση στο κεντρικό κόκκινο = μέσο (μέσος όρος (img (:,,, 1))) %μέση ένταση κόκκινου πράσινου = μέσος όρος (μέσος όρος (img (:,,, 2))) %μέση πράσινη ένταση μπλε = μέση (μέση τιμή (img (:,,, 3))) %μέση ένταση μπλε αν πράσινη> κόκκινη && πράσινη> μπλε %Ελέγξτε αν το φυτό είναι στην εικόνα d = msgbox (['Η ζωή βρέθηκε! ']); %Εμφάνιση ενός πλαισίου μηνυμάτων που λέει "Η ζωή βρέθηκε!" αναμονή (δ)? end elseif l.rightFront> 100 %Ελέγξτε αν καλύπτεται ο προφυλακτήρας δεξιού/μπροστινού φωτός r.move Απόσταση (-0,05) %Μετακίνηση δωματίου προς τα πίσω 0.05 μέτρα img = r.getImage %Λήψη εικόνας από κάμερα πίτας βατόμουρου στο roomba και αποθήκευση σε μεταβλητό 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %περικοπή εικόνας για εστίαση στο κεντρικό κόκκινο = μέσο (μέσος όρος (img (:,,, 1))) %μέση ένταση κόκκινου πράσινου = μέσος όρος (μέσος όρος (img (:,,, 2))) %μέση πράσινη ένταση μπλε = μέση (μέση τιμή (img (:,,, 3))) %μέση ένταση μπλε αν πράσινη> κόκκινη && πράσινη> μπλε %Ελέγξτε αν το φυτό είναι στην εικόνα d = msgbox (['Η ζωή βρέθηκε! ']); %Εμφάνιση ενός πλαισίου μηνυμάτων που λέει "Η ζωή βρέθηκε!" αναμονή (δ)? τέλος αλλού κάμερα πίτας βατόμουρου στο roomba και αποθηκεύστε σε μεταβλητή 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %περικοπή εικόνας για εστίαση στο κεντρικό κόκκινο = μέσο (μέσος όρος (img (:,,, 1))) %μέση ένταση κόκκινου πράσινου = μέσος όρος (μέσος όρος (img (:,,, 2))) %μέση πράσινη ένταση μπλε = μέση (μέση τιμή (img (:,,, 3))) %μέση ένταση μπλε αν πράσινη> κόκκινη && πράσινη> μπλε %Ελέγξτε αν το φυτό είναι στην εικόνα d = msgbox (['Η ζωή βρέθηκε! ']); %Εμφάνιση ενός πλαισίου μηνυμάτων που λέει "Η ζωή βρέθηκε!" αναμονή (δ)? τέλος αλλού βαθμοί CW elseif y.right Μπροστά <1500 %Ελέγξτε αν το δεξί/μπροστινό τμήμα του δωματίου είναι εκτός γκρεμού r.move Απόσταση (-0,1, 0,05) %Μετακινήστε την κάμπα προς τα πίσω 0,1 μέτρα με 0,05 m/s r.turnAngle (5) %Περιστροφή δωματίου 5 βαθμοί CCW elseif y. αριστερά <1000 %Ελέγξτε αν η αριστερή πλευρά της αίθουσας είναι εκτός γκρεμού r.move Απόσταση (-0,05, 0,05) %Μετακίνηση του δωματίου προς τα πίσω 0,05 μέτρα στα 0,05 m/s r.turnAngle (-10) %Περιστροφή δωματίου 10 μοίρες CW άλλα i = 0 ενώ i == 0 r.setLEDDigits (num2str ('RGH')) %Display 'Rough' on LED Display for i = 1: 1000 r.setDriveVelocity (0,05) %Ρυθμίστε την ταχύτητα οδήγησης roomba σε 0,05 m/sx = r.getBumpers %Ανάκτηση και αποθήκευση των τιμών του αισθητήρα προφυλακτήρα στη δομή "x" y = r.get CliffSensors %Ανάκτηση και αποθήκευση τιμών αισθητήρων γκρεμού στη δομή "y" εάν x.right == 1 %Ελέγξτε εάν πιέζεται ο δεξιός προφυλακτήρας r.turnAngle (10) %Περιστροφή δωματίου 10 μοίρες CCW elseif x.left == 1 %Ελέγξτε αν έχει μείνει ο προφυλακτήρας πιέζεται r.turnAngle (-10) %Περιστροφή δωματίου 10 μοίρες CW elseif x.front == 1 %Ελέγξτε αν πιέζεται ο μπροστινός προφυλακτήρας r.turnAngle (20) %Περιστρέψτε το δωμάτιοba 20 μοίρες CCW elseif x.rightWheelDrop == 1 % Ελέγξτε αν ο δεξιός τροχός έχει πέσει r.turnAngle (-20) %Περιστροφή δωματίου 20 μοίρες CW elseif x.leftWheelDrop == 1 %Έλεγχος αριστερού τροχού έχει πέσει r.turnAngle (20) %Περιστροφή δωματίου 20 μοίρες CCW elseif y.leftFront < 1500 %Ελέγξτε αν το μπροστινό αριστερό τμήμα του roomba είναι εκτός γκρεμού r.move Απόσταση (-0,05, 0,05) %Μετακινήστε το roomba προς τα πίσω 0,05 μέτρα με 0,05 m/s r.turnAngle (-5) %Περιστροφή δωματίου 5 μοίρες CW elseif y.rightFront < 1500 %Ελέγξτε αν το μπροστινό δεξί τμήμα του roomba είναι εκτός γκρεμού r.move Απόσταση (-0,05, 0,05) %Μετακινήστε το roomba προς τα πίσω 0,05 μέτρα προς τα 0,05 m/s r.turnAngle (5) %Περιστρέψτε το roomba 5 μοίρες CCW elseif y.left <1000 %Ελέγξτε αν αριστερό τμήμα o f roomba is off cliff r.moveDistance (-0.05, 0.05)%Μετακίνηση roomba προς τα πίσω 0.05 μέτρα στα 0.05 m/s r.turnAngle (-10)%Περιστροφή δωματίου 10 μοίρες CW elseif y.right0 αν Συνέχεια == 1 i = 0 %Συνέχεια ανώμαλου εδάφους αλλιώς i = 1 %Τερματισμός ανώμαλου εδάφους τέλος τέλος άλλου %Χειροκίνητη λειτουργία i = 0 r.setLEDDigits (num2str ('USER')) %Display 'USER' on LED Display d = msgbox (['Arrow Keys - Κίνηση; S - Stop Rover. ESC - Έλεγχος τελικού χρήστη. Α - Εντοπίστε πόρους ']); αναμονή (δ)? ενώ i == 0 r.showCamera %Άνοιγμα ζωντανής ροής κάμερας πίτας βατόμουρου σε ξεχωριστό παράθυρο D = getkey (1) %Πλήκτρο ανάκτησης πατημένο από τον χρήστη, αποθηκεύστε την τιμή ASCII ως μεταβλητή D εάν D == 30 %Ελέγξτε αν το βέλος "επάνω" έχει πιέστηκε r.setDriveVelocity (0.1) %Αποστολή δωματίου προς τα εμπρός με 0,2 m/s elseif D == 28 %Ελέγξτε αν πατήθηκε το βέλος "αριστερά" r.setDriveVelocity (0) %Διακοπή roomba από την κίνηση προς τα εμπρός ή προς τα πίσω r.turnAngle (15, 0,05) %Περιστροφή δωματίου 45 μοίρες CCW σε 0,05 m/s elseif D == 31 %Ελέγξτε αν πατήθηκε το βέλος "κάτω" r.setDriveVelocity (-0,1) %Μετακινήστε το roomba προς τα πίσω με 0,2 m/s elseif D == 29 % Ελέγξτε εάν πιέζεται το "δεξί" βέλος r.setDriveVelocity (0) %Διακοπή roomba από την κίνηση προς τα εμπρός ή προς τα πίσω r.turnAngle (-15, 0.05) %Περιστροφή δωματίου 45 μοίρες CW με 0.05 m/s elseif D == 27 %Ελέγξτε αν το πλήκτρο "esc" (διαφυγής) πατήθηκε i = 1 %Αλλαγή τιμής της μεταβλητής "i" για έξοδο από το βρόχο d = msgbox ("Έξοδος από" Έλεγχος χρήστη "') %Ενημερώστε τον χρήστη ότι η χειροκίνητη λειτουργία εξέρχεται αλλιώς D == 115 %Ελέγξτε αν έχει πατηθεί το πλήκτρο "s" r.setDriveVelocity (0) %Διακοπή δωματίου από πηγαίνοντας προς τα εμπρός ή προς τα πίσω elseif D == 97 %Ελέγξτε αν έχει πατηθεί "a" image = r.getImage; imwrite (εικόνα, 'image.png') W = Ταξινόμηση (εικόνα) K = λειτουργία (W) αν K == 3 d = msgbox ('Resource found') %Εμφάνιση εάν εντοπίστηκε αναμονή ορθογώνιας πηγής (d); %Περιμένετε να κλείσει ο χρήστης το πλαίσιο μηνυμάτων "d" elseif K == 0 d = msgbox ('Not Resource:(') %Εμφάνιση εάν δεν εντοπίστηκε ορθογώνιος πόρος waitfor (d); %Περιμένετε να κλείσει ο χρήστης το πλαίσιο μηνυμάτων "d" end else d = msgbox ('Not a valid key input.') %Εμφάνιση εάν ο χρήστης κλείσει το μενού "select setting" waitfor (d); %Περιμένετε να κλείσει ο χρήστης το πλαίσιο μηνυμάτων "d" τερματισμός αναμονής (d); %Περιμένετε χρήστης για να κλείσει το πλαίσιο μηνυμάτων "d" τέλος τέλος τέλος άλλως d = msgbox ("Αντίο") %Αποχαιρετά εάν οι επιλογές είναι κλειστές στο τέλος αναμονής (d);

Βήμα 3: Δοκιμή

Δοκιμές
Δοκιμές

Μόλις γραφτεί ο κωδικός σας, θα χρειαστεί να δοκιμάσετε το Roomba. Παρόλο που ο κωδικός σας μπορεί να φαίνεται σωστός, πολλές από τις τιμές σας, ειδικά για το χρώμα ή το σχήμα, θα πρέπει να αλλάξουν για να αναγνωρίσετε σωστά τα αντικείμενα που θα θέλατε να προσδιορίσει το Roomba σας.

Βήμα 4: Παρατηρήστε τις οπτικές εξόδους

Παρατηρήστε τις οπτικές εξόδους
Παρατηρήστε τις οπτικές εξόδους
Παρατηρήστε τις οπτικές εξόδους
Παρατηρήστε τις οπτικές εξόδους

Θα φανεί πολύ αν έχετε προγραμματίσει ή όχι με επιτυχία το Roomba με βάση τις οπτικές του εξόδους.

Οι έξοδοι περιλαμβάνουν:

  • Ανίχνευση σχήματος: Η ικανότητα του Roomba να διακρίνει σωστά τα σχήματα για να βρει τα σωστά ορυκτά
  • Ελιγμοί με τραχύ έδαφος: Αποφεύγει γκρεμούς ή σκοτεινές περιοχές
  • Χειροκίνητη λειτουργία: Ζωντανή ροή και δυνατότητα ελέγχου του Roomba
  • Εικόνες: Εικόνες ορυκτών
  • Life Found !: Ένα πλαίσιο κειμένου MatLab που σημαίνει ότι το φυτό σας έχει προσδιορίσει την οργανική ζωή.

Αυτό είναι το τέλος του σεμιναρίου μας, απολαύστε το νέο σας Mars Expedition Rover!

Συνιστάται: