Sadržaj:

Mars Roomba projekat UTK: 4 koraka
Mars Roomba projekat UTK: 4 koraka

Video: Mars Roomba projekat UTK: 4 koraka

Video: Mars Roomba projekat UTK: 4 koraka
Video: КОНЕЦ МУЧЕНИЯМ. Трава больше не проблема! 2024, Juli
Anonim
Mars Roomba projekat UTK
Mars Roomba projekat UTK
Mars Roomba projekat UTK
Mars Roomba projekat UTK

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

VEOMA POSEBAN NAČIN, OVAJ UPUTSTVO JE STVORENO I NAMJERENO KORISTITI UNIVERZITET TENESIRANIH STUDENATA I FAKULTETA

Ovaj kôd se koristi za postavljanje Roombe za pokretanje lokalno napisanog i spremljenog koda u MATLAB -u. Ovo neće funkcionirati ako ne možete nabaviti potrebne biblioteke s web stranice Sveučilišta Tennessee. Ako imate biblioteke, onda ih možete koristiti za programiranje vlastite Roombe pomoću funkcija u biblioteci. Ovaj Instructable uči vas kako instalirati biblioteke, 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 biblioteka

Na web stranici za inženjering nalazi se paket alata/biblioteka, preuzmite ga i postavite u novu mapu. Ova mapa mora sadržavati sve radne datoteke projekta jer će se bilo koja funkcija korištena u programu koji napravite morati odnositi na biblioteku. 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 funkcijama se može pristupiti pomoću naredbe "doc roomba". Pomoću ovih funkcija možete kontrolirati svoju Roombu na mnogo različitih načina. Dolje navedeni kôd koristi senzore udara, senzore svjetlosne trake, kamere i senzore na različite načine za stvaranje marsovera. Koristili smo senzore udara za otkrivanje kada Roomba udari u 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 prilikom udara u objekt 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 pretraživati, ako je pronađeno nešto vode, robot će poslati poruku operaterima. Senzori litice su dizajnirani 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 biblioteke

functionMainRoombaFile (r)

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

while true % Infinte while petlja za održavanje koda

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

if dontFall % if naredba da se nastavi 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'

if 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' završen

end % završava 'odbojnik' if naredbu

tečnosti = LiquidCheck (r) % Dodeljuje promenljivu 'tečnosti' funkciji 'LiquidCheck'

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

r.setDriveVelocity (0,1, 0,1) % Održava Roombu u pokretu nakon završetka 'LiquidChecka'

end % završava izraz 'tečnosti' 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) % Kreira funkciju 'bumpcheck'

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

branik = bumpdata.desno || bumpdata.left || bumpdata.front % Kreira pohranjenu varijablu, 'branik', za različite odbojnike

if bumpdata.right> 0 % If naredba da izazove različite funkcije roombe ako se odbije branik

r.stop % Zaustavlja Roomba

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

r.turnAngle (90, 0.5) % Rotira Roombu za 90 stepeni š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 stepeni što je brže moguće

kraj

ako je bumpdata.left> 0

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0.5) % Rotira Roombu -90 stepeni što je brže moguće

kraj

kraj

funkcija lightbumper = lightcheck (r) % Kreira funkciju 'lightcheck'

lightdata = r.getLightBumpers % Dodjeljuje sve podatke sa senzora svjetlosne neravnine varijabilnim 'lightdata'

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Kreira pohranjenu varijablu, 'lightbumper', za različite svjetlosne odbojnike

if lightbumper % If naredba za pozivanje podataka lightbumpera odozgo

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

r.setDriveVelocity (0.05, 0.05) % Usporava roombu kako bi se pripremio za nalet

end % završava početni if izraz

ako lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

kraj

if lightdata.right> 10

r.setDriveVelocity (0.05, 0.05)

kraj

ako je lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

kraj

end % završava 'lightbumper' if naredbu

end %završava funkciju lightcheck

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

data = r.getCliffSensors; % Dodjeljuje sve podatke sa senzora litice varijabilnim 'podacima'

dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Kreira 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) % Okreće Roomba 0.2m

r.turnAngle (-90, 0.5) % Rotira Roombu -90 stepeni š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 stepeni što je brže moguće

elseif data.rightFront <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Rotira Roombu za 90 stepeni što je brže moguće

elseif data.right <1010

r.stop

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Rotira Roombu za 90 stepeni što je brže moguće

kraj

kraj

kraj

function tequids = LiquidCheck (r) % Kreira funkciju 'LiquidCheck'

dok true %pokreće beskonačnu petlju za kalibraciju

img = r.getImage; % čita kameru sa 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

tečnosti = crveno_sredstvo || blue_mean % Kreira uskladištenu promenljivu, 'tečnosti', za različite promenljive boje

if tečnosti % If naredba za pozivanje slikovnih podataka odozgo

if red_mean> 170 % If naredba da izazove 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 (); % obriši prikaz

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 pauza za čitanje prikazanih informacija

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

pauza (0,5)

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

r.setLEDDigits ('HOT');

pauza (0,5)

r.setLEDDigits ('LAVA');

pauza (0,5)

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

r.setLEDDigits ('HOT');

pauza (0,5)

r.setLEDDigits ('LAVA');

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

pauza (1)

close (f) %zatvara traku čekanja

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

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, '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 stepeni što je brže moguće

r.setLEDCenterColor (128, 128); % postavlja roomba središnju LED lampicu u narandžastu

zatvori sve %zatvara preostale otvorene prozore

elseif blue_mean> 175 % If naredba da izazove 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 (); % obriši prikaz

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

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

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

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

pauza (0,5)

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

r.setLEDDigits ('LOOK');

pauza (0,5)

r.setLEDDigits ('WATR');

pauza (0,5)

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

r.setLEDDigits ('LOOK');

pauza (0,5)

r.setLEDDigits ('WATR');

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

pauza (1)

close (f) %zatvara traku čekanja

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

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 stepeni što je brže moguće

r.setLEDCenterColor (128, 128); % postavlja roomba središnju LED lampicu u narandžastu

zatvori sve %zatvara preostale otvorene prozore

end %završava 'red_mean' if naredbom

end %završava izraz 'tečnosti' 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. Kada se Roomba poveže, 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 trebala raditi prema uputama.

Preporučuje se: