Kazalo:

Mars Roomba Project UTK: 4 koraki
Mars Roomba Project UTK: 4 koraki

Video: Mars Roomba Project UTK: 4 koraki

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

IZJAVA O ODGOVORNOSTI: TO bo delovalo SAMO, ČE JE ROOMBA NASTAVLJENA V A.

ZELO POSEBEN NAČIN, KI JE TO NAVODILO USTVARIL IN NAMENUJAL UPORABLJATI UNIVERZA TENESIRANIH ŠTUDENTOV IN FAKULTETE

Ta koda se uporablja za nastavitev Roombe za izvajanje lokalno napisane in shranjene kode v MATLAB -u. To ne bo delovalo, če ne morete dobiti potrebnih knjižnic s spletnega mesta Univerze v Tennesseeju. Če imate knjižnice, jih lahko uporabite za programiranje lastne Roombe z uporabo funkcij v knjižnici. Ta Instructable vas uči, kako namestiti knjižnice, ustvariti mapo za vso kodo ter kako kodirati in uporabljati program, ki smo ga predstavili spodaj.

Potrebni materiali:

· Roomba

· MATLAB

· Raspberry Pi in Pi kamera

Korak: Pridobite knjižnice

Na inženirskem spletnem mestu je na voljo zbirka orodij/knjižnica, jo naložite in postavite v novo mapo. Ta mapa mora vsebovati vse delovne datoteke projekta, saj se mora vsaka funkcija v programu, ki ga ustvarite, sklicevati na knjižnico. Ko to storite, lahko začnete delati na svojih programih

2. korak: Pisanje programov

V programu je mogoče uporabiti kar nekaj funkcij, do teh funkcij lahko dostopate z ukazom "doc roomba". S temi funkcijami lahko upravljate svojo Roombo na veliko različnih načinov. Spodnja koda na različne načine uporablja senzorje udarcev, senzorje svetlobnih palic, kamero in pečine na različne načine za ustvarjanje mars roverja. S senzorji udarcev smo zaznali, kdaj Roomba zadene predmet, ko se to zgodi, se bo robot obrnil, obrnil in se še naprej premikal. Preden Roomba zadene predmet, bo svetlobna vrstica zaznala objekt in upočasnila Roombo, tako da bo Roomba pri udarcu v objekt za aktiviranje senzorja udarcev manj poškodovana/prizadeta. Kamera išče vodo ali lavo na površini, če ni najdene tekočine, bo robot nadaljeval iskanje, če je nekaj vode, bo robot sporočil operaterjem. Tipala pečine so zasnovana tako, da ustavijo robota, če se približa pečini. Če robot zazna skalo, se bo obrnil in se obrnil, da ne bi padel.

3. korak: Koda

To kopirajte in prilepite v datoteko MATLAB, ki se nahaja v isti mapi kot knjižnice

functionMainRoombaFile (r)

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

medtem ko true % Infinte while zanka za ohranitev delovanja kode

dontFall = cliffCheck (r) % Funkciji 'cliffCheck' dodeli spremenljivko 'dontFall'

if dontFall % if stavek za nadaljevanje v kodi po 'cliffCheck' je dokončan

r.setDriveVelocity (0,1, 0,1) % Ohrani Roombo, da se premika po končanem "cliffCheck"

end % konča 'dontFall' if stavek

odbijač = bumpcheck (r) % Funkciji 'bumpcheck' dodeli spremenljivko 'odbijač'

če odbijač % if stavek za nadaljevanje v kodi po zaključku 'bumpcheck'

r.setDriveVelocity (0,1, 0,1) % Ohrani Roombo, da se premika po zaključku "bumpcheck"

end % konča "odbijač" if stavek

tekočine = LiquidCheck (r) % Funkciji "LiquidCheck" dodeli spremenljivko "tekočine"

if tekočine % if stavek za nadaljevanje kode po zaključku 'LiquidCheck'

r.setDriveVelocity (0,1, 0,1) % Ohrani Roombo v gibanju po končanem "LiquidCheck"

end % konča izraz "tekočine" if

lightbumper = lightcheck (r) % Funkciji 'lightcheck' dodeli spremenljivko 'lightbumper'

pause (0,1) % Kratek premor, da se izognete ponavljanju neprekinjene zanke

end % konča neskončno zanko while

end % konča funkcijo

function bumper = bumpcheck (r) % Ustvari funkcijo 'bumpcheck'

bumpdata = r.getBumpers % Dodeli vse podatke od odbijača spremenljivki 'bumpdata'

odbijač = bumpdata.right || bumpdata.left || bumpdata.front % Ustvari shranjeno spremenljivko, 'odbijač', za različne odbijače

če bumpdata.right> 0 % Če izjava povzroči različne funkcije roombe, če se odbija odbijač

r.stop % Ustavi Roombo

r.moveDistance (-0,3, 0,2) % Obrne Roombo 0,3 m

r.turnAngle (90, 0,5) % Rotira Roombo za 90 stopinj čim hitreje

konec

če je bumpdata.front> 0

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (randi (270), 0,5) % Čim hitreje vrti Roombo v naključnem intervalu med 0 in 270 stopinjami

konec

če je bumpdata.left> 0

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (-90, 0,5) % Rotira Roombo -90 stopinj čim hitreje

konec

konec

function lightbumper = lightcheck (r) % Ustvari funkcijo 'lightcheck'

lightdata = r.getLightBumpers % Dodeli vse podatke iz senzorja svetlobnih udarcev spremenljivki 'lightdata'

lightbumper = lightdata.levo || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Ustvari shranjeno spremenljivko, 'lightbumper', za različne svetlobne odbijače

if lightbumper % If stavek za klicanje podatkov lightbumperja od zgoraj

če lightdata.left> 10 % Če izjava povzroči različne funkcije roombe, če odbijač zazna več kot 10 vrednosti

r.setDriveVelocity (0,05, 0,05) % Upočasni roombo pri pripravi na udarce

end % konča začetni stavek if

če lightdata.rightCenter> 10

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

konec

if lightdata.right> 10

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

konec

če je lightdata.leftCenter> 10

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

konec

end % konča 'lightbumper' if stavek

end %konča funkcijo lightcheck

function dontFall = cliffCheck (r) % Ustvari funkcijo 'cliffCheck'

data = r.getCliffSensors; % Dodeli vse podatke s senzorja pečine spremenljivim "podatkom"

dontFall = podatki.levo <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Ustvari shranjeno spremenljivko 'dontFall' za različne senzorje pečine

if dontFall % If izjava, da pokličete podatke senzorja pečine od zgoraj

if data.left <1010 % Če izjava povzroči različne funkcije roombe, če senzor pečine zazna manj kot 1010 vrednosti

r.stop

r.moveDistance (-0,2, 0,2) % Obrne Roombo 0,2 m

r.turnAngle (-90, 0,5) % Rotira Roombo -90 stopinj čim hitreje

elseif data.leftFront <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Rotira Roombo za 90 stopinj čim hitreje

elseif data.rightFront <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Rotira Roombo za 90 stopinj čim hitreje

elseif data.right <1010

r.stop

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Rotira Roombo za 90 stopinj čim hitreje

konec

konec

konec

function tekočine = LiquidCheck (r) % Ustvari funkcijo 'LiquidCheck'

medtem ko true %začne neskončno zanko za umerjanje

img = r.getImage; % bere kamero z robota

image (img) % prikazuje sliko v oknu s sliko

red_mean = mean (mean (img (200, 150, 1)))% bere povprečno količino rdečih slikovnih pik

blue_mean = mean (mean (img (200, 150, 3)))% bere povprečno količino modrih slikovnih pik

tekočine = rdeče_pomeni || blue_mean % Ustvari shranjeno spremenljivko "tekočine" za različne barvne spremenljivke

if tekočine % If stavek za klic slikovnih podatkov od zgoraj

if red_mean> 170 % If izjava, ki povzroči različne funkcije roombe, če kamera vidi srednjo rdečo barvo večjo od 170

r.stop % ustavi roombo

r.setLEDCenterColor (255) % nastavi krog na rdečo barvo

r.setLEDDigits (); % počisti zaslon

f = čakalna vrstica (0, '*PRIHODLJIVO SPOROČILO*'); % ustvari čakalno vrstico za nalaganje sporočila

r.setLEDDigits ('HOT'); % nastavi LED zaslon na izhod 'HOT'

premor (0,5) %Kratek premor za branje prikazanih informacij

r.setLEDDigits ('LAVA'); % nastavi LED zaslon na izhod 'LAVA'

premor (0,5)

čakalna vrstica (.33, f, '*PRIHODLJIVO SPOROČILO*'); %ustvari povečanje čakalne vrstice

r.setLEDDigits ('HOT');

premor (0,5)

r.setLEDDigits ('LAVA');

premor (0,5)

čakalna vrstica (.67, f, '*PRIHODLJIVO SPOROČILO*'); % ustvari povečanje čakalne vrstice

r.setLEDDigits ('HOT');

premor (0,5)

r.setLEDDigits ('LAVA');

čakalna vrstica (1, f, '*PRIHODLJIVO SPOROČILO*'); %dokonča čakalno vrstico

premor (1)

close (f) %zapre čakalno vrstico

r.setLEDDigits (); % počisti LED zaslon

close all %Zapre vsa prejšnja okna

osi ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Počisti okno ploskve osi in grafikona

y = 0,5; % nastavi y-položaj besedila v oknu za risanje

x = 0,06; % nastavi x-položaj besedila v oknu za risanje

title ('FROM MARS ROOMBA', 'fontsize', 32) % Doda naslov v okno za risanje

quadeqtxt = 'NEVARNA LAVA'; % Nastavi spremenljivko 'quadeqtxt' na izhod 0

besedilo (x, y, quadeqtxt, 'tolmač', 'lateks', 'velikost pisave', 36); % prikaže besedilo quadeq v oknu za risanje

r.moveDistance (-0,2, 0,2) %obrne roombo 0,2 m

r.turnAngle (180, 0,5) %obrne roombo za 180 stopinj čim hitreje

r.setLEDCenterColor (128, 128); % nastavi roomba center LED na oranžno

zaprite vse %zapre preostala odprta okna

elseif blue_mean> 175 % Če izjava povzroči različne funkcije roombe, če kamera vidi srednjo modro barvo večjo od 175

r.stop % ustavi roombo

r.setLEDCenterColor (255) % nastavi krog v rdečo barvo

r.setLEDDigits (); % počisti zaslon

f = čakalna vrstica (0, '*PRIHODLJIVO SPOROČILO*'); % ustvari čakalno vrstico za nalaganje sporočila

r.setLEDDigits ('LOOK'); % nastavi LED zaslon na izhod 'LOOK'

premor (0,5) %Kratek premor za branje prikazanih informacij

r.setLEDDigits ('WATR'); % nastavi LED zaslon na izhod 'WATR'

premor (0,5)

čakalna vrstica (.33, f, '*PRIHODLJIVO SPOROČILO*'); %ustvari povečanje čakalne vrstice

r.setLEDDigits ('LOOK');

premor (0,5)

r.setLEDDigits ('WATR');

premor (0,5)

čakalna vrstica (.67, f, '*PRIHODLJIVO SPOROČILO*'); % ustvari povečanje čakalne vrstice

r.setLEDDigits ('LOOK');

premor (0,5)

r.setLEDDigits ('WATR');

čakalna vrstica (1, f, '*PRIHODLJIVO SPOROČILO*'); %dokonča čakalno vrstico

premor (1)

close (f) %zapre čakalno vrstico

r.setLEDDigits (); % počisti LED zaslon

close all %Zapre vsa prejšnja okna

osi ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Počisti okno ploskve osi in grafikona

y = 0,5; % nastavi y-položaj besedila v oknu za risanje

x = 0,06; % nastavi x-položaj besedila v oknu za risanje

title ('FROM MARS ROOMBA', 'fontsize', 32) % Doda naslov v okno za risanje

quadeqtxt = 'NAJDENA VODA'; % Nastavi spremenljivko 'quadeqtxt' na izhod 0

besedilo (x, y, quadeqtxt, 'tolmač', 'lateks', 'velikost pisave', 36); % prikaže besedilo quadeq v oknu za risanje

r.moveDistance (-0,2, 0,2) %obrne roombo 0,2 m

r.turnAngle (180, 0,5) %obrne roombo za 180 stopinj čim hitreje

r.setLEDCenterColor (128, 128); % nastavi roomba center LED na oranžno

zaprite vse %zapre preostala odprta okna

end %konča 'red_mean' if stavek

end %konča izraz "tekočine" if

end % zapre neskončno zanko while

end % konca funkcija "LiquidCheck"

4. korak: Zaženite kodo

Ko ste kodo kopirali in prilepili v MATLAB, se morate povezati z Roombo. Ko je Roomba povezana, morate poimenovati spremenljivko r. Funkcije uporabljajo spremenljivko r pri sklicevanju na Roombo, zato je treba Roombo definirati kot spremenljivko r. Po zagonu kode mora Roomba delovati po navodilih.

Priporočena: