Cuprins:
- Pasul 1: Obținerea bibliotecilor
- Pasul 2: Scrierea programelor
- Pasul 3: Cod
- Pasul 4: Rularea codului
Video: Proiectul Mars Roomba UTK: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
DISCLAIMER: ACESTA VA FUNCȚIONA DOAR DACĂ ROOMBA ESTE CONFIGURATĂ ÎN
O MODALITATE FOARTE SPECIFICĂ, ACEST INSTRUCTABIL A FOST CREAT PENTRU A FI UTILIZAT DE STUDENȚII ȘI FACULTATEA UNIVERSITĂȚII DE TENNESSEE
Acest cod este utilizat pentru a configura un Roomba pentru a rula codul scris și salvat local în MATLAB. Acest lucru nu va funcționa dacă nu puteți obține bibliotecile necesare de pe site-ul Universității din Tennessee. Dacă aveți biblioteci, atunci le puteți folosi pentru a vă programa propriul Roomba folosind funcțiile din bibliotecă. Acest instructable vă învață cum să instalați bibliotecile, să creați un folder pentru tot codul și cum să codificați și să utilizați programul pe care l-am furnizat mai jos.
Materiale necesare:
· Roomba
· MATLAB
· Camera Raspberry Pi și Pi
Pasul 1: Obținerea bibliotecilor
Pe site-ul de inginerie există o cutie de instrumente / bibliotecă, descărcați-o și plasați-o într-un folder nou. Acest folder trebuie să conțină toate fișierele de lucru ale proiectului, deoarece orice funcție utilizată într-un program pe care o creați va trebui să se refere la bibliotecă. După ce ați făcut acest lucru, puteți începe să lucrați la programele dvs.
Pasul 2: Scrierea programelor
Există destul de multe funcții care pot fi utilizate în program, aceste funcții pot fi accesate folosind comanda „doc roomba”. Folosind aceste funcții, vă puteți controla Roomba în multe moduri diferite. Codul dat mai jos utilizează senzorii de lovire, senzorii de bare de lumină, aparatele de fotografiat și senzorii de stâncă în diferite moduri pentru a crea un rover Mars. Am folosit senzorii de lovire pentru a detecta când Roomba lovește un obiect, când se întâmplă acest lucru, robotul se va întoarce, se va întoarce și va continua să se miște. Înainte ca Roomba să lovească un obiect, bara de lumină va detecta obiectul și va încetini Roomba, astfel încât atunci când se lovește de obiect pentru a activa senzorul de lovire, Roomba va fi mai puțin deteriorat / afectat de impact. Camera caută apă sau lavă la suprafață, dacă nu se găsește lichid, atunci robotul va continua să caute, dacă este găsită puțină apă, atunci robotul va trimite mesaje operatorilor. Senzorii de stâncă sunt proiectați pentru a opri robotul dacă se apropie de o stâncă. Dacă robotul simte o stâncă, acesta va inversa și se va întoarce pentru a evita căderea.
Pasul 3: Cod
Copiați și lipiți acest lucru într-un fișier MATLAB care se află în același folder cu bibliotecile
functionMainRoombaFile (r)
r.setDriveVelocity (0,1, 0,1)
while true% Infinte while loop pentru a menține codul în funcțiune
dontFall = cliffCheck (r)% Atribuie variabila „dontFall” funcției „cliffCheck”
if dontFall% if statement pentru a continua în cod după ce 'cliffCheck' este completă
r.setDriveVelocity (0,1, 0,1)% Menține Roomba în mișcare după finalizarea „cliffCheck”
end% termină instrucțiunea „dontFall” if
bumper = bumpcheck (r)% Atribuie variabila „bumper” funcției „bumpcheck”
dacă bara de protecție% if declarația de a continua în cod după „bumpcheck” este completă
r.setDriveVelocity (0,1, 0,1)% Menține Roomba în mișcare după finalizarea „bumpcheck”
end% termină „bumper” if statement
liquids = LiquidCheck (r)% Atribuie „lichide” variabile funcției „LiquidCheck”
dacă lichide% dacă declarația va continua în cod după ce „LiquidCheck” este completă
r.setDriveVelocity (0,1, 0,1)% Menține Roomba în mișcare după finalizarea „LiquidCheck”
end% termină „lichide” if statement
lightbumper = lightcheck (r)% Atribuie variabila 'lightbumper' funcției 'lightcheck'
pauză (0,1)% Pauză scurtă pentru a evita iterația continuă a buclei
end% se termină infinit în buclă
funcția de sfârșit% se termină
function bumper = bumpcheck (r)% Creează funcția 'bumpcheck'
bumpdata = r.getBumpers% Atribuie toate datele de la bara de protecție variabilei „bumpdata”
bumper = bumpdata.right || bumpdata.left || bumpdata.front% Creează o variabilă stocată, „bumper”, pentru diferitele bare de protecție
if bumpdata.right> 0% Dacă instrucțiunea determină diferite funcții ale roomba dacă Bumper este bumped
r.stop% Oprește Roomba
r.moveDistance (-0,3, 0,2)% inversează Roomba 0,3m
r.turnAngle (90, 0,5)% Rotește Roomba cu 90 de grade cât mai repede posibil
Sfârșit
dacă bumpdata.front> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (randi (270), 0,5)% Rotește Roomba la un interval aleatoriu între 0 și 270 grade cât mai repede posibil
Sfârșit
dacă bumpdata.left> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (-90, 0,5)% Roteste Roomba -90 grade cât mai repede posibil
Sfârșit
Sfârșit
funcție lightbumper = lightcheck (r)% Creează funcția „lightcheck”
lightdata = r.getLightBumpers% Atribuie toate datele de la senzorul de lumină la variabila „lightdata”
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter% Creează o variabilă stocată, „lightbumper”, pentru diferitele bare de protecție a luminii
if lightbumper% If statement pentru a apela datele lightbumper de sus
dacă lightdata.left> 10% Dacă declarația determină diferite funcții ale camerei, dacă bara de lumină detectează mai mult de 10 valori
r.setDriveVelocity (0,05, 0,05)% Încetinește roomba pentru a se pregăti pentru bump
end% termină inițial if statement
dacă lightdata.rightCenter> 10
r.setDriveVelocity (0,05, 0,05)
Sfârșit
dacă lightdata.right> 10
r.setDriveVelocity (0,05, 0,05)
Sfârșit
dacă lightdata.leftCenter> 10
r.setDriveVelocity (0,05, 0,05)
Sfârșit
end% termină „lightbumper” if statement
end% termină funcția lightcheck
funcția dontFall = cliffCheck (r)% Creează funcția 'cliffCheck'
date = r.getCliffSensors; % Atribuie toate datele de la senzorul de stâncă la „date” variabile
dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020% Creează o variabilă stocată, „dontFall”, pentru diferiți senzori de stâncă
if dontFall% If declarație pentru a apela datele senzorului de stâncă de sus
if data.left <1010% Dacă instrucțiunea de a determina diferite funcții ale camerei să se întâmple dacă senzorul de stâncă detectează mai puțin de 1010 valori
r.stop
r.moveDistance (-0,2, 0,2)% inversează Roomba 0,2 m
r.turnAngle (-90, 0,5)% Roteste Roomba -90 grade cât mai repede posibil
elseif data.leftFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5)% Rotește Roomba cu 90 de grade cât mai repede posibil
elseif data.rightFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5)% Rotește Roomba cu 90 de grade cât mai repede posibil
elseif data.right <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5)% Roteste Roomba cu 90 de grade cât mai repede posibil
Sfârșit
Sfârșit
Sfârșit
function liquids = LiquidCheck (r)% Creează funcția „LiquidCheck”
în timp ce% adevărat începe o buclă infinită pentru calibrare
img = r.getImage; % citește camera de pe robot
image (img)% arată imaginea într-o fereastră de figură
red_mean = medie (medie (img (200, 150, 1)))% citește cantitatea medie de pixeli roșii
blue_mean = medie (medie (img (200, 150, 3)))% citește cantitatea medie de pixeli albaștri
lichide = red_mean || blue_mean% Creează o variabilă stocată, „lichide”, pentru diferitele variabile de culoare
dacă lichide% If declarație pentru a apela datele imaginii de mai sus
if red_mean> 170% Dacă declarația determină diferite funcții ale camerei dacă camera vede o culoare roșie medie mai mare de 170
r.stop% oprește roomba
r.setLEDCenterColor (255)% setează cercul la culoare roșie
r.setLEDDigits (); % ștergeți afișajul
f = bara de așteptare (0, '* MESAJ INCOMING *'); % creează o bară de așteptare pentru un mesaj de încărcare
r.setLEDDigits („HOT”); % setează afișajul LED la ieșirea „HOT”
pauză (0,5)% Pauză scurtă pentru a citi informațiile trimise
r.setLEDDigits („LAVA”); % setează afișajul LED la ieșirea „LAVA”
pauză (0,5)
bara de așteptare (.33, f, '* MESAJ INCOMING *'); % creează o creștere în bara de așteptare
r.setLEDDigits („HOT”);
pauză (0,5)
r.setLEDDigits („LAVA”);
pauză (0,5)
bara de așteptare (.67, f, '* MESAJ INCOMING *'); % creează o creștere în bara de așteptare
r.setLEDDigits („HOT”);
pauză (0,5)
r.setLEDDigits („LAVA”);
bara de așteptare (1, f, '* MESAJ INCOMING *'); % completează bara de așteptare
pauză (1)
close (f)% închide bara de așteptare
r.setLEDDigits (); % șterge afișajul LED
închide toate% Închide toate ferestrele anterioare
axe („Color”, „none”, „XColor”, „none”, „YColor”, „none”)% Șterge fereastra grafică a axelor și a diagramei
y = 0,5; % setează poziția y a textului în fereastra de reprezentare
x = 0,06; % setează poziția x a textului în fereastra de reprezentare
title ('FROM MARS ROOMBA', 'fontsize', 32)% Adaugă un titlu în fereastra de graficare
quadeqtxt = 'DANGER LAVA'; % Setează variabila „quadeqtxt” la ieșirea 0
text (x, y, quadeqtxt, „interpret”, „latex”, „font size”, 36); % afișează textul quadeq în fereastra de reprezentare
r.moveDistance (-0,2, 0,2)% inversează camera 0,2 m
r.turnAngle (180, 0,5)% întoarce camera cu 180 de grade cât mai repede posibil
r.setLEDCenterColor (128, 128); % setează ledul centru roomba la portocaliu
închide toate% închide ferestrele rămase deschise
elseif blue_mean> 175% Dacă declarația determină diferite funcții ale camerei dacă camera vede o culoare albastră medie mai mare de 175
r.stop% oprește roomba
r.setLEDCenterColor (255)% setează cercul la culoare roșie
r.setLEDDigits (); % ștergeți afișajul
f = bara de așteptare (0, '* MESAJ INCOMING *'); % creează o bară de așteptare pentru un mesaj de încărcare
r.setLEDDigits ('LOOK'); % setează afișajul LED la ieșirea „LOOK”
pauză (0,5)% Pauză scurtă pentru a citi informațiile trimise
r.setLEDDigits („WATR”); % setează afișajul LED la ieșirea „WATR”
pauză (0,5)
bara de așteptare (.33, f, '* MESAJ INCOMING *'); % creează o creștere în bara de așteptare
r.setLEDDigits ('LOOK');
pauză (0,5)
r.setLEDDigits („WATR”);
pauză (0,5)
bara de așteptare (.67, f, '* MESAJ INCOMING *'); % creează o creștere în bara de așteptare
r.setLEDDigits ('LOOK');
pauză (0,5)
r.setLEDDigits („WATR”);
bara de așteptare (1, f, '* MESAJ INCOMING *'); % completează bara de așteptare
pauză (1)
close (f)% închide bara de așteptare
r.setLEDDigits (); % șterge afișajul LED
închide toate% Închide toate ferestrele anterioare
axe („Color”, „none”, „XColor”, „none”, „YColor”, „none”)% Șterge fereastra grafică a axelor și a diagramei
y = 0,5; % setează poziția y a textului în fereastra de reprezentare
x = 0,06; % setează poziția x a textului în fereastra de reprezentare
title ('FROM MARS ROOMBA', 'fontsize', 32)% Adaugă un titlu în fereastra de graficare
quadeqtxt = 'APĂ GĂSITĂ'; % Setează variabila „quadeqtxt” la ieșirea 0
text (x, y, quadeqtxt, „interpret”, „latex”, „font size”, 36); % afișează textul quadeq în fereastra de reprezentare
r.moveDistance (-0,2, 0,2)% inversează camera 0,2 m
r.turnAngle (180, 0,5)% întoarce camera cu 180 de grade cât mai repede posibil
r.setLEDCenterColor (128, 128); % setează ledul centru roomba la portocaliu
închide toate% închide ferestrele rămase deschise
end% termină „red_mean” if statement
end% termină „lichide” if statement
end% se închide infinit în buclă
funcția de sfârșit% ends „LiquidCheck”
Pasul 4: Rularea codului
După ce ați copiat și lipit codul în MATLAB, trebuie să vă conectați la Roomba. Odată ce Roomba este conectat, trebuie să denumiți variabila r. Funcțiile folosesc variabila r atunci când se referă la Roomba, deci Roomba trebuie să fie definită ca variabila r. După rularea codului, Roomba ar trebui să ruleze conform instrucțiunilor.
Recomandat:
Proiectul Lightshowpi: 4 pași
Proiectul Lightshowpi: Bună ziua tuturor! Acesta este ghidul meu oficial despre cum să creați un spectacol de lumini folosind lightshowpi începând din octombrie 2020
Proiectul Creative Switch de Christopher Serafin: 4 pași
Proiect Creative Switch de Christopher Serafin: Salutări! Pentru acest proiect de comutare creativă, am decis să încerc să adaug lumini LED la o geantă de umăr, în acest caz o husă de transport Nintendo 3DS. Pungile de umăr obișnuite ar putea fi un pic plictisitoare, dar cu unele lumini LED, cu siguranță poate lumina orice geantă
Cum să adăugați un afișaj cu cerneală electronică la proiectul dvs.: 12 pași (cu imagini)
Cum să adăugați un afișaj cu cerneală electronică la proiectul dvs.: o mulțime de proiecte implică monitorizarea unui anumit tip de date, cum ar fi datele de mediu, folosind adesea un Arduino pentru control. În cazul meu, am vrut să monitorizez nivelul sării din dedurizatorul meu de apă. Poate doriți să accesați datele prin rețeaua dvs. de domiciliu
Proiectul 4 - Harta unui electronic: 9 pași
Proiectul 4 - Harta unui electronic: Acest proiect se concentrează pe jucăria Raptor New Bright F-150 RC pe care am găsit-o în Goodwill. În acest proiect, voi analiza ce se întâmplă în interiorul jucăriei și voi arăta cum am dezasamblat fiecare parte a jucăriei. De asemenea, trebuie remarcat faptul că această jucărie a fost greșită
Proiectul Roomba MATLAB: 5 pași
Proiectul Roomba MATLAB: Planul actual pe care NASA îl are pentru roverul Marte este ca acesta să fie un colector de date și să se plimbe prin Marte, colectând probe de sol pentru a le aduce înapoi pe Pământ, astfel încât oamenii de știință să poată vedea dacă au existat forme de viață anterioare pe planeta. Adiţional