Cuprins:

Proiectul Mars Roomba UTK: 4 pași
Proiectul Mars Roomba UTK: 4 pași

Video: Proiectul Mars Roomba UTK: 4 pași

Video: Proiectul Mars Roomba UTK: 4 pași
Video: L-am adus acasă. Ciobanesc german pe nume Dom 2024, Iulie
Anonim
Proiectul Mars Roomba UTK
Proiectul Mars Roomba UTK
Proiectul Mars Roomba UTK
Proiectul Mars Roomba UTK

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: