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

Μετατρέποντας το Roomba σας σε Mars Rover: 5 Βήματα
Μετατρέποντας το Roomba σας σε Mars Rover: 5 Βήματα

Βίντεο: Μετατρέποντας το Roomba σας σε Mars Rover: 5 Βήματα

Βίντεο: Μετατρέποντας το Roomba σας σε Mars Rover: 5 Βήματα
Βίντεο: Έλεγχος 360 συνεχής Servo με διακόπτες με κουμπιά και Arduino 2024, Νοέμβριος
Anonim
Μετατρέποντας το Roomba σας σε Mars Rover
Μετατρέποντας το Roomba σας σε Mars Rover

Βήμα 1: Συγκεντρώστε τα υλικά σας

Για να ολοκληρώσετε αυτό το έργο, θα χρειαστεί να συγκεντρώσετε τα ακόλουθα υλικά:

1 Roomba Robot

1 κιτ Raspberry Pi

1 Βιντεοκάμερα

Πρόσβαση στο MATLAB

Βήμα 2: Κατεβάστε τις Εργαλειοθήκες Roomba για το MATLAB

Κατεβάστε τις Εργαλειοθήκες Roomba για το MATLAB
Κατεβάστε τις Εργαλειοθήκες Roomba για το MATLAB
Κατεβάστε τις Εργαλειοθήκες Roomba για το MATLAB
Κατεβάστε τις Εργαλειοθήκες Roomba για το MATLAB

Εκτελέστε τον ακόλουθο κώδικα για να εγκαταστήσετε τις απαραίτητες εργαλειοθήκες για την ολοκλήρωση αυτού του έργου.

λειτουργία 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 (προτροπή,…

dlgΤίτλος,…

«Ναι», «Όχι», «Ναι»)

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

% λαμβάνετε τη λίστα των αρχείων που υπάρχουν

υπάρχοντα_αρχεία = αρχεία (cellfun (@exist, αρχεία)> 0);

if ~ isempty (υπάρχοντα_αρχεία)

% βεβαιωθείτε ότι είναι πραγματικά εντάξει η αντικατάστασή τους

prompt = {'Αντικαθιστάτε αυτά τα αρχεία:'

''

strjoin (υπάρχοντα_αρχεία, '')

''

'ΟΚ για αντικατάσταση;'

};

μπιπ?

yn = questdlg (προτροπή,…

dlgΤίτλος,…

«Ναι», «Όχι», «Ναι»)

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

τέλος

% λήψη των αρχείων

cnt = 0;

για i = 1: μήκος (αρχεία)

f = αρχεία {i};

disp (['Λήψη' f]);

προσπαθήστε

url = [διακομιστής f];

websave (f, url, options)? % προστέθηκαν επιλογές για αποφυγή σφαλμάτων ασφαλείας

cnt = cnt + 1;

σύλληψη

disp (['Σφάλμα κατά τη λήψη' f]);

ομοίωμα = [f '.html'];

εάν υπάρχει (εικονικό, 'αρχείο') == 2

διαγραφή (ομοίωμα)

τέλος

τέλος

τέλος

αν cnt == μήκος (αρχεία)

msg = 'Επιτυχής εγκατάσταση';

waitfor (msgbox (msg, dlgTitle));

αλλού

msg = 'Σφάλμα εγκατάστασης - δείτε το παράθυρο εντολών για λεπτομέρειες';

waitfor (errordlg (msg, dlgTitle));

τέλος

τέλος %roombaInstall

Βήμα 3: Συνδεθείτε στο Roomba σας

Τώρα ήρθε η ώρα να συνδεθείτε στο Roomba σας χρησιμοποιώντας WiFi. Χρησιμοποιώντας 2 δάχτυλα, πατήστε ταυτόχρονα τα κουμπιά Dock και Spot για να ενεργοποιήσετε ή να επαναφέρετε το Roomba. Στη συνέχεια, εκτελέστε τον κωδικό r = roomba (# του Roomba σας) στο παράθυρο εντολών του MATLAB για να συνδεθείτε στο ρομπότ σας. Μόλις εκτελέσετε αυτήν την εντολή, το Roomba θα πρέπει να είναι έτοιμο να ξεκινήσει.

Βήμα 4: Επιλέξτε πώς θέλετε να ελέγχετε το Roomba σας

Επιλέξτε πώς θέλετε να ελέγχετε το Roomba σας
Επιλέξτε πώς θέλετε να ελέγχετε το Roomba σας
Επιλέξτε πώς θέλετε να ελέγχετε το Roomba σας
Επιλέξτε πώς θέλετε να ελέγχετε το Roomba σας

Υπάρχουν δύο τρόποι με τους οποίους μπορείτε να ελέγξετε το Roomba: αυτόνομα ή χρησιμοποιώντας smartphone ως χειριστήριο.

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

Για να χρησιμοποιήσετε ένα smartphone, πρέπει πρώτα να συνδέσετε το smartphone σας με τον υπολογιστή σας ακολουθώντας τα παρακάτω βήματα.

ΣΗΜΕΙΩΣΗ: Ο υπολογιστής και το smartphone σας πρέπει να βρίσκονται στο ίδιο δίκτυο WiFi για να συνδεθούν σωστά!

1. Κατεβάστε την εφαρμογή MATLAB από το κατάστημα εφαρμογών στη συσκευή σας.

2. Πληκτρολογήστε "connector on" στο παράθυρο εντολών και ορίστε έναν κωδικό πρόσβασης που θα πρέπει να εισαχθεί και στις δύο συσκευές.

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

4. Στο παράθυρο εντολών στον υπολογιστή σας, πληκτρολογήστε τον κωδικό m = mobiledev και αυτό θα πρέπει να προετοιμάσει το smartphone σας ως χειριστήριο για το Roomba σας.

5. Ο υπολογιστής και το smartphone σας θα πρέπει να είναι έτοιμα για χρήση τώρα.

Βήμα 5: Οδηγήστε το Roomba σας

Τώρα που έχετε όλα τα απαραίτητα εργαλεία για να δημιουργήσετε το Mars Rover σας, είστε έτοιμοι να δημιουργήσετε τον δικό σας κώδικα. Έχουμε επισυνάψει έναν παράδειγμα κώδικα παρακάτω τόσο για την αυτόνομη οδήγηση όσο και για την οδήγηση με smartphone.

Αυτόνομη οδήγηση

συνάρτηση Explore_modified (r)

%ορίσματα εισόδου: 1 αντικείμενο roomba, r

%ορίσματα εξόδου: κανένα

%περιγραφή:

Η συνάρτηση %χρησιμοποιεί έναν άπειρο βρόχο για να επιτρέψει την αυτόνομη

%εξερεύνηση του περιβάλλοντος χώρου του bot.

%

Το %funciton παρέχει επίσης οδηγίες στο roomba για το τι πρέπει να κάνετε μέσα

%τις ακόλουθες καταστάσεις: Οι τροχοί χάνουν την επαφή με το έδαφος, an

%αντικείμενο ανιχνεύεται μπροστά ή σε κάθε πλευρά του bot, και α

%ξαφνική πτώση εντοπίζεται μπροστά ή προς τις δύο πλευρές του bot.

%

Οι %τυπικές οδηγίες περιλαμβάνουν εντολές κίνησης που προορίζονται για μεγιστοποίηση

%εξερεύνηση ή αποφυγή εντοπισμένου κινδύνου και εντολές επικοινωνίας

%πληροφορίες σχετικά με τις ανακαλύψεις των bots (εικόνες), τη θέση (γράφημα), %και κατάσταση (προειδοποίηση σε κατάσταση σύνδεσης) με το χρήστη μέσω matlab και/ή email. Αρκετά

Προστίθενται %ηχητικές εντολές για απόλαυση.

%δυνατότητες ρύθμισης email

mail = '[email protected]';

κωδικός πρόσβασης = 'EF230Roomba';

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

setpref ("Διαδίκτυο", "E_mail", αλληλογραφία);

setpref ('Internet', 'SMTP_Username', mail)?

setpref («Διαδίκτυο», «SMTP_Password», κωδικός πρόσβασης)

props = java.lang. System.getProperties;

props.setProperty ('mail.smtp.starttls.enable', 'true');

props.setProperty ('mail.smtp.auth', 'true');

props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory');

props.setProperty ('mail.smtp.socketFactory.port', '465');

% r = roomba (19)

r.beep ('G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2 ^^, G1 ^^, E1 ^^, C2 ^^, C2 ^^, C1 ^^, C1 ^^, D1 ^^, C1 ^^, D2 ^^, E4 ^^, G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2 ^^, G1 ^^, E1 ^^, C2 ^^, C2 ^^, C2 ^^, Ε1 ^^, Ε1 ^^, Ε1 ^^, D1 ^^, C4 ^^ ');

v =.1;

reflect_datum = 2700; %καθορισμένη τιμή αναφοράς αισθητήρων βράχου

lightBumper_datum = 200; %set τιμή αναφοράς αισθητήρων προφυλακτήρα

pos = [0, 0]; %μεταβλητή για αποθήκευση θέσης με αρχικοποιημένο το δεδομένο

γωνία = 0; %καθορισμένη γωνία αναφοράς

netangle = 0; %μετατόπιση καθαρής γωνίας

i = 2; %iterator για προσθήκη γραμμών στη μεταβλητή αποθήκευσης θέσης

dist = 0;

r.setDriveVelocity (v, v); %start roomba προχωρώντας μπροστά

ενώ ισχύει

Cliff = r.getCliffSensors;

Bump = r.getBumpers;

Light = r.getLightBumpers;

RandAngle = randi ([20, 60], 1); %δημιουργεί 1 τυχαία γωνία μεταξύ 20 και 60 μοιρών. Χρησιμοποιείται για να αποτρέψει το bot να κολλήσει σε έναν βρόχο

%Τι πρέπει να κάνετε εάν ένας ή περισσότεροι τροχοί χάσουν επαφή με το έδαφος:

%διακοπή κίνησης, αποστολή προειδοποιητικού email με εικόνα του περιβάλλοντος χώρου, %και ρωτήστε τον χρήστη εάν θα συνεχίσει ή περιμένει βοήθεια

εάν Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1

r.stop

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

r.beep ('F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^ ')

img = r.getImage;

imwrite (img, 'stuck.png');

%--------------------------

imfile = 'stuck.png';

θέση = savepos (pos);

%---------------------------

sendmail (mail, 'HELP!', 'I am strandled on a cliff!', {imfile, position})

list = {'Continue', 'Stop'};

idx = μενού ("Τι πρέπει να κάνω;", λίστα);

αν idx == 2

Διακοπή

τέλος

%Τι πρέπει να κάνετε εάν εντοπιστεί ένα αντικείμενο μπροστά από το bot:

%διακοπή, κίνηση πίσω, λήψη φωτογραφίας, ειδοποίηση χρήστης για ανακάλυψη

%μέσω ηλεκτρονικού ταχυδρομείου, στρίψτε 90 μοίρες και συνεχίστε την εξερεύνηση

elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1

r.stop;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

r.beep ('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')

img = r.getImage;

imwrite (img, 'FrontBump.png')

%--------------------------

imfile = 'FrontBump.png';

θέση = savepos (pos);

%---------------------------

sendmail (mail, 'Alert!', 'I found something!', {imfile, position})

γωνία = 90;

netangle = netangle+angle?

r.turnAngle (γωνία);

r.setDriveVelocity (v, v);

%Τι να κάνετε αν εντοπιστεί αντικείμενο στα αριστερά του bot:

%διακοπή, στροφή προς το αντικείμενο, δημιουργία αντιγράφων ασφαλείας, λήψη φωτογραφιών, ειδοποίηση

%χρήστης της ανακάλυψης μέσω ηλεκτρονικού ταχυδρομείου, γυρίστε 90 μοίρες και συνεχίστε την εξερεύνηση

elseif Light.leftFront> lightBumper_datum || Light.left> lightBumper_datum || Bump.left == 1

r.stop;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

γωνία = 30;

netangle = netangle+angle?

r.turnAngle (γωνία);

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

r.beep ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')

img = r.getImage;

imwrite (img, 'LeftBump.png')

%--------------------------

imfile = 'LeftBump.png';

θέση = savepos (pos);

%---------------------------

sendmail (mail, 'Alert!', 'I found something!', {imfile, position})

γωνία = -90;

netangle = netangle+angle?

r.turnAngle (γωνία);

r.setDriveVelocity (v, v);

%Τι πρέπει να κάνετε εάν εντοπιστεί αντικείμενο στα δεξιά του bot:

%διακοπή, στροφή προς το αντικείμενο, δημιουργία αντιγράφων ασφαλείας, λήψη φωτογραφιών, ειδοποίηση

%χρήστης της ανακάλυψης μέσω ηλεκτρονικού ταχυδρομείου, γυρίστε 90 μοίρες και συνεχίστε την εξερεύνηση

elseif Light.rightFront> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1

r.stop;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

γωνία = -30;

netangle = netangle+angle?

r.turnAngle (γωνία);

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

παύση (1,5).

r.beep ('C1^, C1^, C2^, D2^, D2^, C8^')

img = r.getImage;

imwrite (img, 'RightBump.png')

%--------------------------

imfile = 'RightBump.png';

θέση = savepos (pos);

%---------------------------

sendmail (mail, 'Alert!', 'I found something!', {imfile, position});

γωνία = 90;

netangle = netangle+angle?

r.turnAngle (γωνία);

r.setDriveVelocity (v, v);

%Τι πρέπει να κάνετε εάν εντοπιστεί γκρεμός στα αριστερά του bot:

%στάση, κίνηση προς τα πίσω, στρίψτε δεξιά, συνεχίστε την εξερεύνηση

elseif Cliff.left <reflect_datum || Cliff.leftFront <reflect_datum

r.stop;

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

r.moveDistance (-. 125);

dist = r.getDistance;

pos (i, 1) = pos (i-1, 1) + dist * sind (netangle) · %get x συντεταγμένη

pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle) · %get y συντεταγμένη

i = i+1;

γωνία = -RandAngle;

netangle = netangle+angle?

r.turnAngle (γωνία);

r.setDriveVelocity (v, v);

%Τι πρέπει να κάνετε εάν εντοπιστεί γκρεμός στα δεξιά του bot:

%στάση, κίνηση προς τα πίσω, στροφή αριστερά, συνέχιση της εξερεύνησης

elseif Cliff.right <reflect_datum || Cliff.rightFront <reflect_datum

r.stop;

dist = r.getDistance;

pos (i, 1) = dist * sind (γωνία); %get x συντεταγμένη

pos (i, 2) = dist * cosd (γωνία); %get y συντεταγμένη

i = i+1;

r.moveDistance (-. 125);

γωνία = RandAngle;

netangle = netangle+angle?

r.turnAngle (γωνία);

r.setDriveVelocity (v, v);

τέλος

τέλος

Smartphone Controller

Επιλογές = {'Αυτόνομος', 'Χειροκίνητος έλεγχος'}

Προτροπή = μενού ("Πώς θα θέλατε να ελέγχετε το rover;", Επιλογές)

m = mobiledev

r = roomba (19)

εάν Προτροπή == 1

Εξερευνητής)

αλλού

ενώ ισχύει

παύση (.5)

PhoneData = m. Προσανατολισμός;

Azi = PhoneData (1);

Pitch = PhoneData (2);

Side = PhoneData (3);

αν Πλευρά> 130 || Πλευρά <-130 %εάν το τηλέφωνο είναι αναποδογυρισμένο σταματήστε το roomba και βγάλετε τον βρόχο

r.stop

r.beep ('C, C, C, C')

Διακοπή

elseif Side> 25 && Side <40 %εάν το τηλέφωνο γυρίσει πλάγια μεταξύ 25 και 40 βαθμών στρίψτε αριστερά 5 βαθμούς

r.turnAngle (-5);

elseif Πλευρά> 40 %εάν το τηλέφωνο γυρίσει πλάγια πάνω από 40 βαθμούς στρίψτε αριστερά 45 βαθμούς

r.turnAngle (-45)

elseif Side -40 %εάν το τηλέφωνο είναι στραμμένο πλάγια μεταξύ -25 και -40 βαθμών στρίψτε δεξιά 5 βαθμούς

r.turnAngle (5);

elseif Πλευρά <-40 %εάν το τηλέφωνο γυρίσει πλάγια λιγότερο από -40 βαθμούς στρίψτε αριστερά 45 βαθμούς

r.turnAngle (45)

τέλος

%Εάν το τηλέφωνο κρατιέται κοντά στην κατακόρυφο, τραβήξτε μια εικόνα και σχεδιάστε την

εάν Pitch <-60 && εικόνα <= 9

r.πιπ

img = r.getImage;

υποσχέδιο (3, 3, εικόνα)

imshow (img)

τέλος

%κινούνται εμπρός και πίσω με βάση τον μπροστινό και τον πίσω προσανατολισμό

εάν Pitch> 15 && Pitch <35 %εάν το βήμα μεταξύ 15 και 35 βαθμών κινείται προς τα εμπρός σε μικρή απόσταση

%λαμβάνουν δεδομένα ελαφρού προφυλακτήρα πριν από τη μετακίνηση

litBump = r.getLightBumpers;

εάν litBump.leftΜπροστινό> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %εάν κάτι βρίσκεται μπροστά από την αίθουσα και θα χτυπήσει αν προχωρήσει, κάντε θόρυβο και εμφανίστε το μήνυμα

r.beep ('C ^^, F#^, C ^^, F#^')

αλλιώς %κίνηση

r.moveDistance (.03);

%Λάβετε δεδομένα προφυλακτήρα μετά τη μετακίνηση

Bump = r.getBumpers;

αν Bump.right == 1 || Bump.left == 1 || Bump.front == 1

r.beep ('A, C, E')

r.moveDistance (-. 01)

τέλος

%λαμβάνουν δεδομένα αισθητήρα βράχου

Cliff = r.getCliffSensors;

αν Cliff.left> 1500 || Cliff.leftΜπροστινό> 1500 || Cliff.rightΜπροστινό> 1500 || Cliff.right> 1500 %εάν κάτι ενεργοποιεί τον αισθητήρα γκρεμού αντιμετωπίστε το ως λάβα και δημιουργήστε αντίγραφα ασφαλείας

r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')

r.moveDistance (-. 031)

τέλος

τέλος

elseif Βήμα> 35 %αν το βήμα μεγαλύτερου των 35 βαθμών κινείται προς τα εμπρός σε μεγαλύτερη απόσταση

%λαμβάνουν δεδομένα ελαφρού προφυλακτήρα πριν από τη μετακίνηση

litBump = r.getLightBumpers;

εάν litBump.leftΜπροστινό> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %εάν κάτι βρίσκεται μπροστά από την αίθουσα και θα χτυπήσει αν προχωρήσει, κάντε θόρυβο και εμφανίστε το μήνυμα

r.beep ('C ^^, F#^, C ^^, F#^')

αλλιώς %κίνηση

r.moveDistance (.3)

%Λάβετε δεδομένα προφυλακτήρα μετά τη μετακίνηση

Bump = r.getBumpers;

αν Bump.right == 1 || Bump.left == 1 || Bump.front == 1 %εάν χτυπήσετε κάτι κάντε θόρυβο, εμφανίστε το μήνυμα και δημιουργήστε αντίγραφα ασφαλείας

r.beep ('A, C, E')

r.moveDistance (-. 01)

τέλος

%λαμβάνουν δεδομένα αισθητήρα βράχου μετά τη μετακίνηση

Cliff = r.getCliffSensors;

αν Cliff.left> 1500 || Cliff.leftΜπροστινό> 1500 || Cliff.rightΜπροστινό> 1500 || Cliff.right> 1500 %αν κάτι ενεργοποιήσει τον αισθητήρα γκρεμού αντιμετωπίστε το ως λάβα και δημιουργήστε αντίγραφα ασφαλείας

r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')

r.moveDistance (-. 31)

τέλος

τέλος

elseif Pitch -35 %εάν το βήμα μεταξύ -15 και -35 βαθμού μετακινηθείτε πίσω σε μικρή απόσταση

r.moveDistance (-. 03);

%λαμβάνουν δεδομένα αισθητήρα βράχου μετά τη μετακίνηση

Cliff = r.getCliffSensors;

αν Cliff.left> 1500 || Cliff.leftΜπροστινό> 1500 || Cliff.rightΜπροστινό> 1500 || Cliff.right> 1500 %αν κάτι ενεργοποιήσει τον αισθητήρα γκρεμού αντιμετωπίστε το ως λάβα και δημιουργήστε αντίγραφα ασφαλείας

r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')

r.moveDistance (.04)

τέλος

elseif Pitch -60 %εάν το βήμα μεταξύ -35 και -60 βαθμών μετακινηθεί προς τα πίσω σε μεγαλύτερη απόσταση

r.moveDistance (-. 3)

%λαμβάνουν δεδομένα αισθητήρα βράχου μετά τη μετακίνηση

Cliff = r.getCliffSensors;

αν Cliff.left> 1500 || Cliff.leftΜπροστινό> 1500 || Cliff.rightΜπροστινό> 1500 || Cliff.right> 1500 %εάν κάτι ενεργοποιεί τον αισθητήρα γκρεμού αντιμετωπίστε το ως λάβα και δημιουργήστε αντίγραφα ασφαλείας

r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')

r.moveDistance (.31)

τέλος

τέλος

τέλος

τέλος

Συνιστάται: