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

Mars Roomba Project UTK: 4 Βήματα
Mars Roomba Project UTK: 4 Βήματα

Βίντεο: Mars Roomba Project UTK: 4 Βήματα

Βίντεο: Mars Roomba Project UTK: 4 Βήματα
Βίντεο: Мой новый 3D принтер Elegoo Mars 4 9K 2024, Ιούλιος
Anonim
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

ΑΠΟΠΟΙΗΣΗ ΑΚΡΙΒΗΣΗΣ: ΑΥΤΟ ΘΑ ΛΕΙΤΟΥΡΓΕΙ ΜΟΝΟ ΕΑΝ ΤΟ ΔΩΜΑΤΙΟ ΡΥΘΜΙΣΕΤΑΙ ΣΕ

ΠΟΛΥ ΣΥΓΚΕΚΡΙΜΕΝΟΣ ΤΡΟΠΟΣ, ΑΥΤΟ ΤΟ ΟΔΗΓΙΟ ΔΗΜΙΟΥΡΓΙΑ ΔΗΜΙΟΥΡΓΗΘΗΚΕ ΚΑΙ ΠΡΟΟΡΙΖΕΤΑΙ ΝΑ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΑΠΟ ΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΩΝ ΜΑΘΗΤΩΝ ΚΑΙ ΤΟΥ ΦΑΚΟΥΛΕΤΙΟΥ

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

Απαιτούμενα υλικά:

· Roomba

· MATLAB

· Κάμερα Raspberry Pi και Pi

Βήμα 1: Λήψη των Βιβλιοθηκών

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

Βήμα 2: Σύνταξη προγραμμάτων

Υπάρχουν αρκετές λειτουργίες που μπορούν να χρησιμοποιηθούν στο πρόγραμμα, στις οποίες μπορείτε να έχετε πρόσβαση χρησιμοποιώντας τις εντολές "doc roomba". Χρησιμοποιώντας αυτές τις λειτουργίες, μπορείτε να ελέγξετε το Roomba σας με πολλούς διαφορετικούς τρόπους. Ο παρακάτω κώδικας χρησιμοποιεί αισθητήρες χτυπήματος, αισθητήρες φωτός, κάμερα και αισθητήρες γκρεμών με διαφορετικούς τρόπους για να δημιουργήσει ένα mars rover. Χρησιμοποιήσαμε τους αισθητήρες χτυπήματος για να ανιχνεύσουμε πότε το Roomba χτυπά ένα αντικείμενο, όταν συμβεί αυτό το ρομπότ θα αντιστραφεί, θα γυρίσει και θα συνεχίσει να κινείται. Πριν το Roomba χτυπήσει ένα αντικείμενο, η φωτεινή μπάρα θα ανιχνεύσει το αντικείμενο και θα επιβραδύνει το Roomba έτσι ώστε όταν χτυπήσει στο αντικείμενο για να ενεργοποιήσει τον αισθητήρα πρόσκρουσης, το Roomba θα είναι λιγότερο κατεστραμμένο/επηρεασμένο από την πρόσκρουση. Η κάμερα αναζητά νερό ή λάβα στην επιφάνεια, αν δεν βρεθεί υγρό τότε το ρομπότ θα συνεχίσει να ψάχνει, αν βρεθεί λίγο νερό τότε το ρομπότ θα στείλει μήνυμα στους χειριστές. Οι αισθητήρες γκρεμού έχουν σχεδιαστεί για να σταματούν το ρομπότ εάν πλησιάζει σε έναν γκρεμό. Εάν το ρομπότ αισθανθεί έναν γκρεμό θα γυρίσει προς τα πίσω και θα γυρίσει για να μην πέσει.

Βήμα 3: Κωδικός

Αντιγράψτε και επικολλήστε αυτό σε ένα αρχείο MATLAB που βρίσκεται στον ίδιο φάκελο με τις βιβλιοθήκες

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

ενώ αληθινό % Infinte while loop για να συνεχίσει να λειτουργεί ο κώδικας

dontFall = cliffCheck (r) % Εκχωρεί τη μεταβλητή 'dontFall' στη συνάρτηση 'cliffCheck'

if dontFall % if η δήλωση να προχωρήσει στον κωδικό μετά την ολοκλήρωση του 'cliffCheck'

r.setDriveVelocity (0,1, 0,1) % Κρατά το Roomba σε κίνηση μετά την ολοκλήρωση του 'cliffCheck'

τέλος % τελειώνει 'dontFall' if statement

bumper = bumpcheck (r) % Εκχωρεί τη μεταβλητή 'bumper' στη συνάρτηση 'bumpcheck'

εάν προφυλακτήρας % if η δήλωση να προχωρήσει στον κώδικα μετά την ολοκλήρωση του "bumpcheck"

r.setDriveVelocity (0,1, 0,1) % Κρατά το Roomba σε κίνηση μετά την ολοκλήρωση του "bumpcheck"

τέλος % λήγει «προφυλακτήρας» αν η δήλωση

υγρά = LiquidCheck (r) % Εκχωρεί μεταβλητή «υγρά» στη συνάρτηση «LiquidCheck»

εάν υγρά % if η δήλωση να προχωρήσει στον κωδικό μετά την ολοκλήρωση του "LiquidCheck"

r.setDriveVelocity (0,1, 0,1) % Κρατά το Roomba σε κίνηση μετά την ολοκλήρωση του "LiquidCheck"

τέλος % τελειώνει «υγρά» αν η δήλωση

lightbumper = lightcheck (r) % Εκχωρεί τη μεταβλητή "lightbumper" στη λειτουργία "lightcheck"

παύση (0,1) % Παύση σύντομα για να αποφευχθεί η συνεχής επανάληψη του βρόχου

end % τελειώνει άπειρο ενώ ο βρόχος

end % τέλος λειτουργίας

λειτουργία bumper = bumpcheck (r) % Δημιουργεί τη λειτουργία "bumpcheck"

bumpdata = r.getBumpers % Εκχωρεί όλα τα δεδομένα από τον προφυλακτήρα στη μεταβλητή «bumpdata»

προφυλακτήρας = bumpdata.right || bumpdata.left || bumpdata.front % Δημιουργεί μια αποθηκευμένη μεταβλητή, "bumper", για τους διαφορετικούς προφυλακτήρες

εάν bumpdata.right> 0 % Εάν η δήλωση προκαλεί διαφορετικές λειτουργίες του roomba εάν συμβεί το Bumper

r.stop % Σταματά το Roomba

r.moveDistance (-0,3, 0,2) % Αντιστρέφει Roomba 0,3μ

r.turnAngle (90, 0,5) % Περιστρέφει το Roomba κατά 90 μοίρες όσο το δυνατόν γρηγορότερα

τέλος

εάν bumpdata.front> 0

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (randi (270), 0,5) % Περιστρέφει το Roomba σε τυχαίο διάστημα μεταξύ 0 και 270 μοίρες όσο το δυνατόν γρηγορότερα

τέλος

αν bumpdata.left> 0

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (-90, 0.5) % Περιστρέφει το Roomba -90 μοίρες όσο το δυνατόν γρηγορότερα

τέλος

τέλος

λειτουργία lightbumper = lightcheck (r) % Δημιουργεί τη λειτουργία "lightcheck"

lightdata = r.getLightBumpers % Αντιστοιχίζει όλα τα δεδομένα από τον αισθητήρα φωτεινού χτυπήματος σε μεταβλητή «lightdata»

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Δημιουργεί μια αποθηκευμένη μεταβλητή, "lightbumper", για τους διαφορετικούς προφυλακτήρες φωτός

if lightbumper % If statement για να καλέσετε τα δεδομένα του lightbumper από πάνω

εάν lightdata.left> 10 % Εάν η δήλωση προκαλεί διαφορετικές λειτουργίες του roomba εάν ο προφυλακτήρας φωτός αισθανθεί μεγαλύτερες από 10 τιμές

r.setDriveVelocity (0,05, 0,05) % Επιβραδύνει το roomba για να προετοιμαστεί για το χτύπημα

end % λήγει την αρχική αν δήλωση

εάν lightdata.rightCenter> 10

r.setDriveVelocity (0,05, 0,05)

τέλος

αν lightdata.right> 10

r.setDriveVelocity (0,05, 0,05)

τέλος

εάν lightdata.leftCenter> 10

r.setDriveVelocity (0,05, 0,05)

τέλος

τέλος % λήγει "lightbumper" if statement

end %end λειτουργία ελέγχου lightcheck

συνάρτηση dontFall = cliffCheck (r) % Δημιουργεί τη συνάρτηση "cliffCheck"

data = r.getCliffSensors; % Αναθέτει όλα τα δεδομένα από τον αισθητήρα βράχου σε μεταβλητά «δεδομένα»

dontFall = data.left <1020 || data.leftΜπροστινό <1020 || data.rightFront <1020 || data.right <1020 % Δημιουργεί μια αποθηκευμένη μεταβλητή, "dontFall", για τους διαφορετικούς αισθητήρες βράχου

if dontFall % If statement για να καλέσετε τα δεδομένα του αισθητήρα γκρεμού από πάνω

if data.left <1010 % Εάν η δήλωση προκαλεί διαφορετικές λειτουργίες του roomba εάν ο αισθητήρας γκρεμού ανιχνεύσει λιγότερες από 1010 τιμές

r.stop

r.moveDistance (-0,2, 0,2) % Αντιστρέφει Roomba 0,2μ

r.turnAngle (-90, 0.5) % Περιστρέφει το Roomba -90 μοίρες όσο το δυνατόν γρηγορότερα

elseif data.leftΜπροστινό <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Περιστρέφει το Roomba κατά 90 μοίρες όσο το δυνατόν γρηγορότερα

elseif data.rightFront <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Περιστρέφει το Roomba κατά 90 μοίρες όσο το δυνατόν γρηγορότερα

elseif data.right <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Περιστρέφει το Roomba κατά 90 μοίρες όσο το δυνατόν γρηγορότερα

τέλος

τέλος

τέλος

λειτουργία υγρών = LiquidCheck (r) % Δημιουργεί τη λειτουργία "LiquidCheck"

ενώ το true %ξεκινά άπειρο βρόχο για βαθμονόμηση

img = r.getImage; % διαβάζει την κάμερα του ρομπότ

Η εικόνα (img) % εμφανίζει την εικόνα σε ένα παράθυρο σχήματος

red_mean = μέσο (μέσος όρος (img (200, 150, 1)))% διαβάζει τη μέση ποσότητα κόκκινων εικονοστοιχείων

blue_mean = μέσος όρος (μέσος όρος (img (200, 150, 3)))% διαβάζει τη μέση ποσότητα μπλε εικονοστοιχείων

υγρά = red_mean || blue_mean % Δημιουργεί μια αποθηκευμένη μεταβλητή, «υγρά», για τις διαφορετικές μεταβλητές χρώματος

εάν υγρά % If statement για να καλέσετε τα δεδομένα της εικόνας από πάνω

εάν red_mean> 170 % Εάν η δήλωση προκαλεί διαφορετικές λειτουργίες του roomba εάν η κάμερα δει ένα μέσο κόκκινο χρώμα μεγαλύτερο από 170

r.stop % σταματά το roomba

r.setLEDCenterColor (255) % ορίζει τον κύκλο σε κόκκινο χρώμα

r.setLEDDigits (); % καθαρίστε την οθόνη

f = γραμμή αναμονής (0, '*ΕΙΣΟΔΗΜΑ ΜΗΝΥΜΑ*'); % δημιουργεί μια γραμμή αναμονής για ένα μήνυμα φόρτωσης

r.setLEDDigits ("HOT"); % ρυθμίζει την οθόνη LED στην έξοδο "HOT"

παύση (0,5) %Σύντομη παύση για την ανάγνωση των πληροφοριών που παραβλήθηκαν

r.setLEDDigits («LAVA»); % ρυθμίζει την οθόνη LED στην έξοδο "LAVA"

παύση (0,5)

γραμμή αναμονής (.33, f, '*ΕΙΣΟΔΗΜΑ ΜΗΝΥΜΑ*'); %δημιουργεί αύξηση στη γραμμή αναμονής

r.setLEDDigits ("HOT");

παύση (0,5)

r.setLEDDigits («LAVA»);

παύση (0,5)

γραμμή αναμονής (.67, f, '*ΕΙΣΟΔΗΜΑ ΜΗΝΥΜΑ*'); % δημιουργεί αύξηση στη γραμμή αναμονής

r.setLEDDigits ("HOT");

παύση (0,5)

r.setLEDDigits («LAVA»);

μπάρα αναμονής (1, f, '*ΕΙΣΟΔΗΜΑ ΜΗΝΥΜΑ*'); %ολοκληρώνει τη γραμμή αναμονής

παύση (1)

κλείσιμο (f) %κλείνει τη γραμμή αναμονής

r.setLEDDigits (); % καθαρίζει την οθόνη LED

κλείσιμο όλων %Κλείνει όλα τα προηγούμενα παράθυρα

άξονες ("Χρώμα", "κανένα", "XColor", "κανένα", "YColor", "κανένα") % Διαγράφει το παράθυρο γραφήματος των αξόνων και του γραφήματος

y = 0,5; Το % ορίζει τη θέση y του κειμένου στο παράθυρο σχεδίασης

χ = 0,06; Το % ορίζει τη θέση x του κειμένου στο παράθυρο σχεδίασης

τίτλος ("FROM MARS ROOMBA", "fontsize", 32) % Προσθέτει έναν τίτλο στο παράθυρο σχεδίασης

quadeqtxt = 'ΚΙΝΔΥΝΟΣ ΛΑΒΑ'; % Ορίζει τη μεταβλητή 'quadeqtxt' στην έξοδο 0

κείμενο (x, y, quadeqtxt, "διερμηνέας", "latex", "fontsize", 36); % εμφανίζει το τετραγωνικό κείμενο στο παράθυρο σχεδίασης

r.moveDistance (-0,2, 0,2) %αντιστρέφει το roomba 0,2m

r.turnAngle (180, 0,5) %γυρίζει την αίθουσα δωματίου 180 μοίρες όσο το δυνατόν γρηγορότερα

r.setLEDCenterColor (128, 128); % ορίζει το LED του κέντρου roomba σε πορτοκαλί

κλείσιμο όλων %κλείνει τα υπόλοιπα ανοιχτά παράθυρα

elseif blue_mean> 175 % Εάν η δήλωση προκαλεί διαφορετικές λειτουργίες του roomba εάν η κάμερα δει ένα μέσο μπλε χρώμα μεγαλύτερο από 175

r.stop % σταματά το roomba

r.setLEDCenterColor (255) % ορίζει τον κύκλο σε κόκκινο χρώμα

r.setLEDDigits (); % καθαρίστε την οθόνη

f = γραμμή αναμονής (0, '*ΕΙΣΟΔΗΜΑ ΜΗΝΥΜΑ*'); % δημιουργεί μια γραμμή αναμονής για ένα μήνυμα φόρτωσης

r.setLEDDigits ('LOOK'); % ρυθμίζει την οθόνη LED στην έξοδο "LOOK"

παύση (0,5) %Σύντομη παύση για την ανάγνωση των πληροφοριών που παραβλήθηκαν

r.setLEDDigits ('WATR'); % ρυθμίζει την οθόνη LED στην έξοδο 'WATR'

παύση (0,5)

γραμμή αναμονής (.33, f, '*ΕΙΣΟΔΗΜΑ ΜΗΝΥΜΑ*'); %δημιουργεί αύξηση στη γραμμή αναμονής

r.setLEDDigits ('LOOK');

παύση (0,5)

r.setLEDDigits ('WATR');

παύση (0,5)

γραμμή αναμονής (.67, f, '*ΕΙΣΟΔΗΜΑ ΜΗΝΥΜΑ*'); % δημιουργεί αύξηση στη γραμμή αναμονής

r.setLEDDigits ('LOOK');

παύση (0,5)

r.setLEDDigits ('WATR');

μπάρα αναμονής (1, f, '*ΕΙΣΟΔΗΜΑ ΜΗΝΥΜΑ*'); %ολοκληρώνει τη γραμμή αναμονής

παύση (1)

κλείσιμο (f) %κλείνει τη γραμμή αναμονής

r.setLEDDigits (); % καθαρίζει την οθόνη LED

κλείσιμο όλων %Κλείνει όλα τα προηγούμενα παράθυρα

άξονες ("Χρώμα", "κανένα", "XColor", "κανένα", "YColor", "κανένα") % Διαγράφει το παράθυρο γραφήματος των αξόνων και του γραφήματος

y = 0,5; Το % ορίζει τη θέση y του κειμένου στο παράθυρο σχεδίασης

χ = 0,06; Το % ορίζει τη θέση x του κειμένου στο παράθυρο σχεδίασης

τίτλος ('FROM MARS ROOMBA', 'fontsize', 32) % Προσθέτει έναν τίτλο στο παράθυρο σχεδίασης

quadeqtxt = 'ΒΡΗΚΕ ΝΕΡΟ'; % Ορίζει τη μεταβλητή 'quadeqtxt' στην έξοδο 0

κείμενο (x, y, quadeqtxt, "διερμηνέας", "latex", "fontsize", 36); % εμφανίζει το τετραγωνικό κείμενο στο παράθυρο σχεδίασης

r.moveDistance (-0,2, 0,2) %αντιστρέφει το roomba 0,2m

r.turnAngle (180, 0,5) %γυρίζει την αίθουσα δωματίου 180 μοίρες όσο το δυνατόν γρηγορότερα

r.setLEDCenterColor (128, 128); % ορίζει το LED του κέντρου roomba σε πορτοκαλί

κλείσιμο όλων %κλείνει τα υπόλοιπα ανοιχτά παράθυρα

τέλος %τελειώνει 'red_mean' if statement

τέλος %τελειώνει «υγρά» αν η δήλωση

end % κλείνει άπειρο ενώ ο βρόχος

τέλος % λήγει τη λειτουργία "LiquidCheck"

Βήμα 4: Εκτέλεση του κώδικα

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

Συνιστάται: