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

Roomba Explorer: 4 βήματα
Roomba Explorer: 4 βήματα

Βίντεο: Roomba Explorer: 4 βήματα

Βίντεο: Roomba Explorer: 4 βήματα
Βίντεο: Is iRobot really superior??? #shorts #short #youtubeshorts 2024, Νοέμβριος
Anonim
Roomba Explorer
Roomba Explorer

Χρησιμοποιώντας το MATLAB και το iRobot's Create2 Robot, αυτό το έργο θα εξερευνήσει διάφορες περιοχές μιας άγνωστης τοποθεσίας. Χρησιμοποιήσαμε τους αισθητήρες στο Robot για να βοηθήσουμε στον ελιγμό ενός επικίνδυνου εδάφους. Λαμβάνοντας φωτογραφίες και βίντεο από ένα Raspberry Pi που επισυνάπτεται, μπορέσαμε να προσδιορίσουμε τα εμπόδια που θα αντιμετωπίσει το Robot και θα ταξινομηθούν.

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

Για αυτό το έργο, θα χρειαστείτε

-ένας υπολογιστής

-η νεότερη έκδοση του MATLAB (το MATLAB R2018b χρησιμοποιήθηκε για αυτό το έργο)

- roombaInstall εργαλειοθήκη

-iRobot's Create2 Robot

-Raspberry Pi με κάμερα

Βήμα 1: Αρχικοποίηση και αισθητήρες

Αρχικοποίηση και αισθητήρες
Αρχικοποίηση και αισθητήρες

Πριν ξεκινήσουμε οποιονδήποτε προγραμματισμό, κατεβάσαμε την εργαλειοθήκη roombaInstall, η οποία επέτρεπε την πρόσβαση σε διαφορετικά στοιχεία του Robot.

Αρχικά, δημιουργήσαμε ένα GUI για να προετοιμάσουμε οποιοδήποτε ρομπότ. Για να το κάνετε αυτό, πρέπει να πληκτρολογήσετε τον αριθμό του Ρομπότ ως είσοδο. Αυτό θα επιτρέψει την πρόσβαση για την εκτέλεση του προγράμματός μας στο Ρομπότ. Δουλέψαμε για να οδηγήσουμε το Ρομπότ σε πολλούς εδάφους που θα συναντούσε. Εφαρμόσαμε τους αισθητήρες Cliff, τους αισθητήρες χτυπήματος φωτός και τους αισθητήρες φυσικού χτυπήματος, χρησιμοποιώντας τις εξόδους τους για να ταξιδέψουμε το ρομπότ για να αλλάξουμε ταχύτητα και κατεύθυνση. Όταν κάποιος από τους έξι αισθητήρες χτυπήματος φωτός ανιχνεύει ένα αντικείμενο, η τιμή που παράγουν θα μειωθεί, με αποτέλεσμα η ταχύτητα του ρομπότ να μειωθεί για να αποφευχθεί σύγκρουση πλήρους ταχύτητας. Όταν το Ρομπότ τελικά συγκρουστεί με ένα εμπόδιο, οι αισθητήρες Physical Bump θα αναφέρουν μια τιμή μεγαλύτερη από το μηδέν. εξαιτίας αυτού, το Robot θα σταματήσει, οπότε δεν θα υπάρξουν περαιτέρω συγκρούσεις και περισσότερες λειτουργίες μπορούν να τεθούν σε δράση. Για τους αισθητήρες Cliff, θα διαβάσουν τη φωτεινότητα της περιοχής γύρω τους. Εάν η τιμή είναι μεγαλύτερη από 2800, καθορίσαμε ότι το Ρομπότ θα ήταν σε σταθερό έδαφος και ασφαλές. Αλλά, εάν η τιμή είναι μικρότερη από 800, οι αισθητήρες Cliff θα ανιχνεύσουν έναν γκρεμό, σταματώντας αμέσως για να μην πέσουν. Οποιαδήποτε τιμή ενδιάμεσα καθορίστηκε ότι αντιπροσωπεύει το νερό και θα προκαλέσει το Ρομπότ να σταματήσει τη δράση του. Χρησιμοποιώντας τους παραπάνω αισθητήρες, η ταχύτητα του Ρομπότ αλλάζει επιτρέποντάς μας να προσδιορίσουμε καλύτερα εάν υπάρχει κάποιος κίνδυνος.

Παρακάτω είναι ο κωδικός (από το MATLAB R2018b)

%% Αρχικοποίηση

dlgPrompts = {'Αριθμός Roomba'};

dlgTitle = 'Επιλέξτε το Roomba σας';

dlgDefaults = {''};

opts. Resize = 'on';

dlgout = inputdlg (dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Δημιουργία παραθύρου που ζητά από τον χρήστη να εισαγάγει τον αριθμό του δωματίου του

n = str2double (dlgout {1});

r = roomba (n); % Αρχικοποιεί τον καθορισμένο από τον χρήστη Roomba %% Προσδιορισμός ταχύτητας από αισθητήρες Light Bump ενώ ισχύει s = r.getLightBumpers; % λαμβάνουν αισθητήρες χτυπήματος φωτός

lbumpout_1 = extractfield (s, 'left'); % λαμβάνει τις αριθμητικές τιμές των αισθητήρων και τους καθιστά πιο εύχρηστους lbumpout_2 = extractfield (s, 'leftFront');

lbumpout_3 = extractfield (s, 'leftCenter');

lbumpout_4 = extractfield (s, 'rightCenter');

lbumpout_5 = extractfield (s, 'rightFront');

lbumpout_6 = extractfield (s, 'right');

lbout = [lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % μετατρέπει τιμές σε πίνακα

sLbump = ταξινόμηση (lbout); Μπορεί να εξαχθεί %μήτρα ταξινομήσεων στη χαμηλότερη τιμή

lowLbump = sLbump (1); ταχύτητα =.05+(lowLbump)*. 005 %χρησιμοποιώντας τη χαμηλότερη τιμή, η οποία αντιπροσωπεύει στενά εμπόδια, για τον προσδιορισμό της ταχύτητας, υψηλότερη ταχύτητα όταν δεν ανιχνεύεται τίποτα

r.setDriveVelocity (ταχύτητα, ταχύτητα)

τέλος

% Φυσικοί προφυλακτήρες

b = r.getBumpers; %Έξοδος αληθής, ψευδής

bsen_1 = extractfield (β, «αριστερά»)

bsen_2 = extractfield (β, «δεξιά»)

bsen_3 = extractfield (β, «μπροστά»)

bsen_4 = extractfield (b, 'leftWheelDrop')

bsen_5 = extractfield (b, 'rightWheelDrop')

χτυπήματα = [bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump = άθροισμα (αλήτες)

αν tbump> 0 r.setDriveVelocity (0, 0)

τέλος

% Αισθητήρες Cliff

c = r.getCliffSensors %% 2800 ασφαλές, αλλιώς νερό

csen_1 = extractfield (γ, «αριστερά»)

csen_2 = extractfield (γ, «δεξιά»)

csen_3 = extractfield (γ, «αριστερά μπροστά»)

csen_4 = extractfield (c, 'rightFront')

γκρεμοί = [csen_1, csen_2, csen_3, csen_4]

ordcliff = ταξινόμηση (γκρεμοί)

εάν ordcliff (1) <2750

r.setDriveVelocity (0, 0)

αν γκρεμός <800

disp 'cliff'

αλλού

διαρροή «νερού»

τέλος

r. TurnAngle (45)

τέλος

Βήμα 2: Λήψη δεδομένων

Αφού ενεργοποιηθούν οι αισθητήρες φυσικού χτυπήματος, το Robot θα εφαρμόσει το Raspberry Pi στο σκάφος του για να τραβήξει μια φωτογραφία του εμποδίου. Αφού τραβήξετε μια φωτογραφία, χρησιμοποιώντας αναγνώριση κειμένου εάν υπάρχει κείμενο στην εικόνα, το Ρομπότ θα καθορίσει ποιο είναι το εμπόδιο και τι λέει το εμπόδιο.

img = r.getImage; imshow (img);

imwrite (img, 'imgfromcamera.jpg')

φωτογραφία = imread ('imgfromcamera.jpg')

ocrResults = ocr (φωτογραφία)

αναγνωρισμένοText = ocrResults. Text;

εικόνα;

κείμενο απεικόνισης (φωτογραφία) (220, 0, αναγνωρισμένοκείμενο, 'BackgroundColor', [1 1 1]);

Βήμα 3: Τελική αποστολή

Όταν το Ρομπότ καθορίσει ότι το εμπόδιο είναι το ΣΠΙΤΙ, θα ολοκληρώσει την αποστολή του και θα μείνει σπίτι. Μετά την ολοκλήρωση της αποστολής, το Ρομπότ θα στείλει μια ειδοποίηση μέσω ηλεκτρονικού ταχυδρομείου ότι επέστρεψε στο σπίτι και θα στείλει τις εικόνες που πήρε κατά τη διάρκεια του ταξιδιού του.

% Αποστολή e-mail

setpref ("Διαδίκτυο", "SMTP_Server", "smtp.gmail.com");

setpref ("Διαδίκτυο", "E_mail", "[email protected]"); % λογαριασμός αλληλογραφίας προς αποστολή από το setpref ('Διαδίκτυο', 'SMTP_Username', 'εισαγωγή email αποστολέα'). % username setpref ονόματος αποστολέα («Διαδίκτυο», «SMTP_Password», «εισαγωγή κωδικού αποστολέα»). % Κωδικός πρόσβασης αποστολέων

props = 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 λήψης", "Roomba", "Roomba επέστρεψε στο σπίτι !!", "imgfromcamera.jpg") % λογαριασμός αλληλογραφίας για αποστολή

Το ρομπότ τελειώνει.

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

συμπέρασμα
συμπέρασμα

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

*Υπενθύμιση: Μην ξεχνάτε ότι η εργαλειοθήκη roombaInstall χρειάζεται για να αλληλεπιδρά το MATLAB με το Robot και το ενσωματωμένο Raspberry Pi.

Συνιστάται: