Sadržaj:

Mars Roomba projekt UTK: 4 koraka
Mars Roomba projekt UTK: 4 koraka

Video: Mars Roomba projekt UTK: 4 koraka

Video: Mars Roomba projekt UTK: 4 koraka
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Studeni
Anonim
Mars Roomba projekt UTK
Mars Roomba projekt UTK
Mars Roomba projekt UTK
Mars Roomba projekt UTK

ODRICANJE ODGOVORNOSTI: OVO ĆE RADITI SAMO AKO JE ROOMBA POSTAVLJENA U A

VRLO POSEBAN NAČIN, OVAJ UPUTSTVO JE STVORENO I NAMJERENO KORISTITI SVEUČILIŠTE TENESIRANIH STUDENATA I FAKULTETA

Ovaj se kôd koristi za postavljanje Roombe za pokretanje lokalno napisanog i spremljenog koda u MATLAB -u. To neće funkcionirati ako ne možete nabaviti potrebne knjižnice s web stranice Sveučilišta Tennessee. Ako imate knjižnice, tada ih možete koristiti za programiranje vlastite Roombe pomoću funkcija u knjižnici. Ovaj Instructable uči vas kako instalirati knjižnice, stvoriti mapu za sav kôd te kako kodirati i koristiti program koji smo dali u nastavku.

Potrebni materijali:

· Roomba

· MATLAB

· Raspberry Pi i Pi kamera

Korak 1: Dobivanje knjižnica

Na web stranici za inženjering nalazi se skup alata/knjižnica, preuzmite je i postavite u novu mapu. Ova mapa mora sadržavati sve radne datoteke projekta jer će se sve funkcije koje koristite u programu koji napravite morati odnositi na knjižnicu. Nakon što to učinite, možete početi raditi na svojim programima

Korak 2: Pisanje programa

Postoji dosta funkcija koje se mogu koristiti u programu, tim se funkcijama može pristupiti pomoću naredbe "doc roomba". Pomoću ovih funkcija možete upravljati svojom Roombom na mnogo različitih načina. Dolje navedeni kôd koristi senzore udara, senzore svjetlosnih traka, kamere i senzore na različite načine za stvaranje marsovera. Koristili smo bump senzore za otkrivanje kada Roomba pogodi objekt, kada se to dogodi robot će se okrenuti, okrenuti se i nastaviti kretati. Prije nego što Roomba udari u objekt, svjetlosna traka će otkriti objekt i usporiti Roombu, tako da će Roomba u slučaju sudara s objektom aktivirati senzor udara biti manje oštećena/pogođena udarcem. Kamera traži vodu ili lavu na površini, ako nema pronađene tekućine, robot će nastaviti tražiti, ako je pronađeno nešto vode, robot će poslati poruku operaterima. Senzori litice dizajnirani su da zaustave robota ako se približi litici. Ako robot osjeti liticu, okrenuti će se unatrag i okrenuti se kako bi izbjegao pad.

Korak 3: Kodirajte

Kopirajte i zalijepite ovo u MATLAB datoteku koja se nalazi u istoj mapi kao i knjižnice

functionMainRoombaFile (r)

r.setDriveVelocity (0,1, 0,1)

dok je istina % Infinte while petlja za održavanje koda

dontFall = cliffCheck (r) % Dodjeljuje varijablu 'dontFall' funkciji 'cliffCheck'

if dontFall % if naredba za nastavak u kodu nakon što je 'cliffCheck' dovršena

r.setDriveVelocity (0,1, 0,1) % Održava Roombu u pokretu nakon što završi 'cliffCheck'

end % završava 'dontFall' if naredbom

bumper = bumpcheck (r) % Dodjeljuje varijablu 'bumper' funkciji 'bumpcheck'

ako bumper % if naredba da se nastavi u kodu nakon što je 'bumpcheck' dovršen

r.setDriveVelocity (0,1, 0,1) % Održava Roombu u pokretu nakon što je 'bumpcheck' dovršen

end % završava 'odbojnik' if naredbu

tekućine = LiquidCheck (r) % Dodjeljuje varijablu 'tekućine' funkciji 'LiquidCheck'

if tekućine % if naredba da se nastavi u kodu nakon što je 'LiquidCheck' dovršen

r.setDriveVelocity (0,1, 0,1) % Održava kretanje Roombe nakon što je dovršena "LiquidCheck"

end % završava izraz 'tekućine' if

lightbumper = lightcheck (r) % Dodjeljuje varijablu 'lightbumper' funkciji 'lightcheck'

pause (0,1) % Kratko pauzirajte kako biste izbjegli kontinuiranu iteraciju petlje

end % završava beskonačno while petlja

end % završava funkciju

funkcija bumper = bumpcheck (r) % Stvara funkciju 'bumpcheck'

bumpdata = r.getBumpers % Dodjeljuje sve podatke od odbojnika varijabli 'bumpdata'

branik = bumpdata.desno || bumpdata.lijevo || bumpdata.front % Stvara pohranjenu varijablu, 'odbojnik', za različite odbojnike

if bumpdata.right> 0 % If izjava koja uzrokuje različite funkcije roombe ako se odbije branik

r.stop % Zaustavlja Roombu

r.moveDistance (-0.3, 0.2) % Obrće Roombu 0.3m

r.turnAngle (90, 0,5) % Rotira Roombu za 90 stupnjeva što je brže moguće

kraj

ako je bumpdata.front> 0

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0,5) % Rotira Roombu u slučajnom intervalu između 0 i 270 stupnjeva što je brže moguće

kraj

ako je bumpdata.levo> 0

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0,5) % Rotira Roombu -90 stupnjeva što je brže moguće

kraj

kraj

function lightbumper = lightcheck (r) % Stvara funkciju 'lightcheck'

lightdata = r.getLightBumpers % Dodjeljuje sve podatke sa osjetnika udara svjetlosti varijabli "lightdata"

lightbumper = lightdata.lijevo || lightdata.desno || lightdata.rightCenter || lightdata.leftCenter % Stvara pohranjenu varijablu, "svjetlosni bumper", za različite odbojnike svjetla

if lightbumper % If naredba za pozivanje svjetlosnih podataka odozgo

if lightdata.left> 10 % If izjava da izazove različite funkcije roombe ako svjetlosni branik osjeti veće od 10 vrijednosti

r.setDriveVelocity (0,05, 0,05) % Usporava roombu za pripremu za udar

end % završava početni if izraz

ako lightdata.rightCenter> 10

r.setDriveVelocity (0,05, 0,05)

kraj

ako su svjetlosni podaci.desno> 10

r.setDriveVelocity (0,05, 0,05)

kraj

ako lightdata.leftCenter> 10

r.setDriveVelocity (0,05, 0,05)

kraj

end % završava 'lightbumper' if naredbom

end %završava funkciju lightcheck

funkcija dontFall = cliffCheck (r) % Stvara funkciju 'cliffCheck'

podaci = r.getCliffSensors; % Dodjeljuje sve podatke s senzora litice varijabilnim 'podacima'

dontFall = podaci.lijevo <1020 || podaci.lijevoPreda <1020 || podaci.desnoPred <1020 || data.right <1020 % Stvara pohranjenu varijablu, 'dontFall', za različite senzore litice

if dontFall % If izjava za pozivanje podataka senzora litice odozgo

if data.left <1010 % If izjava da izazove različite funkcije roombe ako senzor litice osjeti manje od 1010 vrijednosti

r.stop

r.moveDistance (-0.2, 0.2) % Obrće Roombu 0.2m

r.turnAngle (-90, 0,5) % Rotira Roombu -90 stupnjeva što je brže moguće

elseif data.leftFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0,5) % Rotira Roombu za 90 stupnjeva što je brže moguće

inače podaci.desnoFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0,5) % Rotira Roombu za 90 stupnjeva što je brže moguće

inače podaci.desno <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0,5) % Rotira Roombu za 90 stupnjeva što je brže moguće

kraj

kraj

kraj

funkcija tekućine = LiquidCheck (r) % Stvara funkciju 'LiquidCheck'

dok true %start beskonačna petlja za kalibraciju

img = r.getImage; % čita kameru s robota

image (img) % prikazuje sliku u prozoru sa slikom

red_mean = mean (mean (img (200, 150, 1)))% čita srednju količinu crvenih piksela

blue_mean = mean (mean (img (200, 150, 3)))% čita srednju količinu plavih piksela

tekućine = crveno_sredstvo || blue_mean % Stvara pohranjenu varijablu, 'tekućine', za različite varijable boja

if tekućine % If naredba za pozivanje slikovnih podataka odozgo

if red_mean> 170 % If izjava koja uzrokuje različite funkcije roombe ako kamera vidi srednju crvenu boju veću od 170

r.stop % zaustavlja roomba

r.setLEDCenterColor (255) % postavlja krug na crvenu boju

r.setLEDDigits (); % očisti zaslon

f = traka čekanja (0, '*DOLAZNA PORUKA*'); % stvara traku čekanja za učitavanje poruke

r.setLEDDigits ('HOT'); % postavlja LED zaslon na izlaz 'HOT'

pauza (0,5) %Kratka stanka za čitanje prikazanih informacija

r.setLEDDigits ('LAVA'); % postavlja LED zaslon na izlaz 'LAVA'

stanka (0,5)

traka čekanja (.33, f, '*DOLAZNA PORUKA*'); %stvara povećanje trake čekanja

r.setLEDDigits ('HOT');

stanka (0,5)

r.setLEDDigits ('LAVA');

stanka (0,5)

traka čekanja (.67, f, '*DOLAZNA PORUKA*'); % stvara povećanje trake čekanja

r.setLEDDigits ('HOT');

stanka (0,5)

r.setLEDDigits ('LAVA');

traka čekanja (1, f, '*DOLAZNA PORUKA*'); %dovršava traku čekanja

stanka (1)

close (f) %zatvara traku čekanja

r.setLEDDigits (); % briše LED zaslon

close all %Zatvara sve prethodne prozore

osi ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Briše prozor crtanja osi i grafikona

y = 0,5; % postavlja y-poziciju teksta u prozoru za crtanje

x = 0,06; % postavlja položaj x teksta u prozoru za crtanje

title ('FROM MARS ROOMBA', 'fontsize', 32) % Dodaje naslov u prozor za iscrtavanje

quadeqtxt = 'OPASNA LAVA'; % Postavlja varijablu 'quadeqtxt' na izlaz 0

tekst (x, y, quadeqtxt, 'tumač', 'lateks', 'veličina slova', 36); % prikazuje tekst quadeq u prozoru za crtanje

r.moveDistance (-0.2, 0.2) %preokreće roombu 0.2m

r.turnAngle (180, 0,5) %okreće roombu za 180 stupnjeva što je brže moguće

r.setLEDCenterColor (128, 128); % postavlja središnju LED diodu roombe na narančastu

zatvori sve %zatvara preostale otvorene prozore

elseif blue_mean> 175 % If izjava koja uzrokuje različite funkcije roombe ako kamera vidi srednju plavu boju veću od 175

r.stop % zaustavlja roomba

r.setLEDCenterColor (255) % postavlja krug na crvenu boju

r.setLEDDigits (); % očisti prikaz

f = traka čekanja (0, '*DOLAZNA PORUKA*'); % stvara traku čekanja za učitavanje poruke

r.setLEDDigits ('LOOK'); % postavlja LED zaslon na izlaz 'LOOK'

pauza (0,5) %Kratka stanka za čitanje prikazanih informacija

r.setLEDDigits ('WATR'); % postavlja LED zaslon na izlaz 'WATR'

stanka (0,5)

traka čekanja (.33, f, '*DOLAZNA PORUKA*'); %stvara povećanje trake čekanja

r.setLEDDigits ('LOOK');

stanka (0,5)

r.setLEDDigits ('WATR');

stanka (0,5)

traka čekanja (.67, f, '*DOLAZNA PORUKA*'); % stvara povećanje trake čekanja

r.setLEDDigits ('LOOK');

stanka (0,5)

r.setLEDDigits ('WATR');

traka čekanja (1, f, '*DOLAZNA PORUKA*'); %dovršava traku čekanja

stanka (1)

close (f) %zatvara traku čekanja

r.setLEDDigits (); % briše LED zaslon

close all %Zatvara sve prethodne prozore

osi ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Briše prozor crtanja osi i grafikona

y = 0,5; % postavlja y-poziciju teksta u prozoru za crtanje

x = 0,06; % postavlja položaj x teksta u prozoru za crtanje

title ('FROM MARS ROOMBA', 'fontsize', 32) % Dodaje naslov u prozor za iscrtavanje

quadeqtxt = 'NAĐENA VODA'; % Postavlja varijablu 'quadeqtxt' na izlaz 0

tekst (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % prikazuje tekst quadeq u prozoru za crtanje

r.moveDistance (-0.2, 0.2) %preokreće roombu 0.2m

r.turnAngle (180, 0,5) %okreće roombu za 180 stupnjeva što je brže moguće

r.setLEDCenterColor (128, 128); % postavlja roomba središnju LED diodu u narančastu

zatvori sve %zatvara preostale otvorene prozore

end %završava 'red_mean' if naredbom

end %završava izraz 'tekućine' if

end % zatvara beskonačnu while petlju

end % završava funkciju 'LiquidCheck'

Korak 4: Pokretanje koda

Nakon što ste kopirali i zalijepili kôd u MATLAB, morate se povezati s Roombom. Nakon što se Roomba spoji, morate imenovati varijablu r. Funkcije koriste varijablu r kada se odnose na Roombu, pa se Roomba mora definirati kao varijabla r. Nakon pokretanja koda, Roomba bi se trebala pokrenuti prema uputama.

Preporučeni: