Πίνακας περιεχομένων:
- Βήμα 1: Λήψη των Βιβλιοθηκών
- Βήμα 2: Σύνταξη προγραμμάτων
- Βήμα 3: Κωδικός
- Βήμα 4: Εκτέλεση του κώδικα
Βίντεο: Mars Roomba Project UTK: 4 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
ΑΠΟΠΟΙΗΣΗ ΑΚΡΙΒΗΣΗΣ: ΑΥΤΟ ΘΑ ΛΕΙΤΟΥΡΓΕΙ ΜΟΝΟ ΕΑΝ ΤΟ ΔΩΜΑΤΙΟ ΡΥΘΜΙΣΕΤΑΙ ΣΕ
ΠΟΛΥ ΣΥΓΚΕΚΡΙΜΕΝΟΣ ΤΡΟΠΟΣ, ΑΥΤΟ ΤΟ ΟΔΗΓΙΟ ΔΗΜΙΟΥΡΓΙΑ ΔΗΜΙΟΥΡΓΗΘΗΚΕ ΚΑΙ ΠΡΟΟΡΙΖΕΤΑΙ ΝΑ ΧΡΗΣΙΜΟΠΟΙΕΙΤΑΙ ΑΠΟ ΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΩΝ ΜΑΘΗΤΩΝ ΚΑΙ ΤΟΥ ΦΑΚΟΥΛΕΤΙΟΥ
Αυτός ο κωδικός χρησιμοποιείται για τη ρύθμιση ενός 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 θα πρέπει να εκτελείται σύμφωνα με τις οδηγίες.
Συνιστάται:
Μετατρέποντας το Roomba σας σε Mars Rover: 5 Βήματα
Μετατρέποντας το Roomba σας σε Mars Rover:
Robot Project UTK 2017: 3 Βήματα
Robot Project UTK 2017: Αποστολή: Η ομάδα μηχανικών μας έχει προσληφθεί από το Froogle, ένα μη κερδοσκοπικό ίδρυμα για την ανάπτυξη τεχνολογίας ανοιχτού κώδικα, για να αναπτύξει μια καινοτόμο ομάδα Human Assisting Mars Rover.-Out ομάδες " rover " είναι ένα roomba που κωδικοποιήσαμε για να εκτελέσουμε μια σειρά
Mars Roomba: 6 βήματα
Mars Roomba: Αυτό το Instructable θα σας καθοδηγήσει στις οδηγίες χρήσης ενός Botp κενού Roomba που ελέγχεται με Raspberry Pi. Το λειτουργικό σύστημα που θα χρησιμοποιήσουμε είναι μέσω MATLAB
Roomba-Assistant Assisting Roomba: 4 Βήματα
Roomba-Assisting Roomba: Αυτό το έργο γίνεται χρησιμοποιώντας το Raspberry Pi 3 στο iRobot Create Version 2. Το MATLAB χρησιμοποιείται για να προγραμματίσει το ρομπότ να ακολουθεί συγκεκριμένες οδηγίες χρησιμοποιώντας τους αισθητήρες και την κάμερα. Οι αισθητήρες και οι κάμερες χρησιμοποιούνται για την εκτέλεση συγκεκριμένων
UTK EF 230 MarsRoomba Project Fall 2018: 5 Βήματα
UTK EF 230 MarsRoomba Project Φθινόπωρο 2018: Επί του παρόντος, τα ροβόλια του Άρη χρησιμοποιούνται για τη συλλογή δεδομένων στην επιφάνεια του Άρη μέσω διαφόρων μεθόδων, με σκοπό να μάθουν περισσότερα για τις δυνατότητες του πλανήτη για μικροβιακή ζωή. Τα Rover χρησιμοποιούν κυρίως εργαλεία φωτογραφίας και ανάλυσης εδάφους για δεδομένα