Indholdsfortegnelse:

Mars Roomba Project UTK: 4 trin
Mars Roomba Project UTK: 4 trin

Video: Mars Roomba Project UTK: 4 trin

Video: Mars Roomba Project UTK: 4 trin
Video: Домино Робот с Мировым Рекордом (100k домино за 24 часа) 2024, Juli
Anonim
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

ANSVARSFRASKRIVELSE: DETTE KENDER KUN, HVIS ROOMBAEN ER SET OP I A

MEGET SPECIFIK MÅDE, DENNE INSTRUKTABEL VAR SKABT TIL OG TIL AT BRUGES AF UNIVERSITETET I TENNESSEE -STUDENTER OG FAKULTET

Denne kode bruges til at oprette en Roomba til at køre lokalt skrevet og gemt kode i MATLAB. Dette fungerer ikke, hvis du ikke kan få de nødvendige biblioteker fra University of Tennessee -webstedet. Hvis du har bibliotekerne, kan du bruge dem til at programmere din egen Roomba ved hjælp af funktionerne i biblioteket. Denne instruktionsbog lærer dig, hvordan du installerer bibliotekerne, opretter en mappe til al koden, og hvordan du koder og bruger det program, vi har givet nedenfor.

Nødvendige materialer:

· Roomba

· MATLAB

· Hindbær Pi og Pi kamera

Trin 1: Få bibliotekerne

På ingeniørwebstedet er der en værktøjskasse/bibliotek, download den og placer den i en ny mappe. Denne mappe skal indeholde alle projektarbejdsfiler, da enhver funktion, der bruges i et program, du laver, skal referere til biblioteket. Når du har gjort dette, kan du begynde at arbejde på dine programmer

Trin 2: Skrivning af programmerne

Der er en del funktioner, der kan bruges i programmet, disse funktioner kan tilgås ved hjælp af kommandoen "doc roomba". Ved hjælp af disse funktioner kan du styre din Roomba på mange forskellige måder. Nedenstående kode anvender bump -sensorer, lysstangssensorer, kamera og klippesensorer på forskellige måder til at oprette en mars rover. Vi brugte stødsensorerne til at registrere, hvornår Roomba rammer et objekt, når dette sker, vil robotten bakke, vende om og fortsætte med at bevæge sig. Inden Roomba rammer et objekt, vil lysbjælken registrere objektet og bremse Roomba, så når det støder ind i objektet for at aktivere stødsensoren, bliver Roomba mindre beskadiget/påvirket af stødet. Kameraet søger efter vand eller lava på overfladen, hvis der ikke findes væske, vil robotten fortsætte med at søge, hvis der er fundet noget vand, sender robotten besked til operatørerne. Klintsensorerne er designet til at stoppe robotten, hvis den nærmer sig en klippe. Hvis robotten fornemmer en klippe, vil den vende og vende for at undgå at falde.

Trin 3: Kode

Kopier og indsæt dette i en MATLAB -fil, der er placeret i den samme mappe som bibliotekerne

functionMainRoombaFile (r)

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

mens true % Infinte while loop for at holde koden kørende

dontFall = cliffCheck (r) % Tildeler variabel 'dontFall' til funktionen 'cliffCheck'

hvis dontFall % hvis erklæring om at fortsætte i kode efter 'cliffCheck' er fuldført

r.setDriveVelocity (0,1, 0,1) % Holder Roomba i bevægelse efter 'cliffCheck' er fuldført

slut % ender 'dontFall' if -sætning

bumper = bumpcheck (r) % Tildel variabel 'bumper' til funktionen 'bumpcheck'

hvis bumper % hvis erklæring skal fortsætte i kode efter 'bumpcheck' er fuldført

r.setDriveVelocity (0.1, 0.1) % Holder Roomba i bevægelse, efter at 'bumpcheck' er fuldført

slut % ender 'bumper' if -sætning

liquids = LiquidCheck (r) % Tildeler variabel 'væsker' til funktionen 'LiquidCheck'

hvis væsker %, hvis erklæringen skal fortsætte i kode, efter at 'LiquidCheck' er fuldført

r.setDriveVelocity (0,1, 0,1) % Holder Roomba i bevægelse, efter at 'LiquidCheck' er fuldført

slut % slutter 'væsker' hvis erklæring

lightbumper = lightcheck (r) % Tildeler variablen 'lightbumper' til funktionen 'lightcheck'

pause (0,1) % Kort pause for at undgå kontinuerlig loop -iteration

slut % ender uendeligt mens loop

slut % slutter funktion

function bumper = bumpcheck (r) % Opretter 'bumpcheck' funktion

bumpdata = r.getBumpers % Tildeler alle data fra kofangeren til variablen 'bumpdata'

kofanger = bumpdata.right || bumpdata. venstre || bumpdata.front % Opretter en lagret variabel, 'bumper', til de forskellige kofangere

if bumpdata.right> 0 % If statement for at få forskellige funktioner i roomba til at ske, hvis kofanger stødes

r.stop % Stopper Roomba

r.moveDistance (-0,3, 0,2) % vender Roomba 0,3 m

r.turnAngle (90, 0,5) % Roter Roomba 90 grader så hurtigt som muligt

ende

hvis bumpdata.front> 0

r. stop

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

r.turnAngle (randi (270), 0,5) % Roterer Roomba med et tilfældigt interval mellem 0 og 270 grader så hurtigt som muligt

ende

hvis bumpdata. venstre> 0

r. stop

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

r.turnAngle (-90, 0,5) % Roter Roomba -90 grader så hurtigt som muligt

ende

ende

function lightbumper = lightcheck (r) % Opretter 'lightcheck' funktion

lightdata = r.getLightBumpers % Tildeler alle data fra lysstødsensoren til variablen 'lysdata'

lightbumper = lightdata. venstre || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Opretter en lagret variabel, 'lightbumper', til de forskellige lysbumpere

if lightbumper % If statement for at kalde lightbumper data ovenfra

if lightdata.left> 10 % If statement for at få forskellige funktioner i roomba til at ske, hvis lysstødfangeren registrerer større end 10 værdier

r.setDriveVelocity (0,05, 0,05) % Sænker roomba for at forberede sig på bump

slut % slutter initial if -sætning

hvis lightdata.rightCenter> 10

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

ende

hvis lightdata.right> 10

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

ende

hvis lightdata.leftCenter> 10

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

ende

slut % ender 'lightbumper' if -sætning

slut %afslutter lightcheck -funktionen

function dontFall = cliffCheck (r) % Opretter funktionen 'cliffCheck'

data = r.getCliffSensors; % Tildeler alle data fra klippesensoren til variable 'data'

dontFall = data. venstre <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Opretter en lagret variabel, 'dontFall', til de forskellige klippesensorer

hvis dontFall % If -erklæring for at kalde klintsensordataene ovenfra

hvis data. venstre <1010 % If -sætning for at få forskellige funktioner i roomba til at ske, hvis cliff -sensoren registrerer mindre end 1010 værdier

r. stop

r.moveDistance (-0,2, 0,2) % vender Roomba 0,2 m

r.turnAngle (-90, 0,5) % Roter Roomba -90 grader så hurtigt som muligt

elseif data.leftFront <1010

r. stop

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

r.turnAngle (90, 0,5) % Roter Roomba 90 grader så hurtigt som muligt

elseif data.rightFront <1010

r. stop

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

r.turnAngle (90, 0,5) % Roter Roomba 90 grader så hurtigt som muligt

elseif data.right <1010

r. stop

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

r.turnAngle (90, 0,5) % Roter Roomba 90 grader så hurtigt som muligt

ende

ende

ende

funktionsvæsker = LiquidCheck (r) % Opretter funktionen 'LiquidCheck'

mens ægte %starter uendelig loop til kalibrering

img = r.getImage; % læser kameraet af robotten

billede (img) % viser billedet i et figurvindue

red_mean = gennemsnit (middelværdi (img (200, 150, 1)))% læser den gennemsnitlige mængde af røde pixels

blue_mean = mean (mean (img (200, 150, 3)))% læser den gennemsnitlige mængde af blå pixels

væsker = rød_mean || blue_mean % Opretter en lagret variabel, 'væsker', til de forskellige farvevariabler

hvis væsker % If -erklæring for at kalde billeddata ovenfra

if red_mean> 170 % If statement for at få forskellige funktioner i roomba til at ske, hvis kameraet ser en gennemsnitlig rød farve på mere end 170

r.stop % stopper roomba

r.setLEDCenterColor (255) % sætter cirklen til farve rød

r.setLEDDigits (); % rydde displayet

f = ventelinje (0, '*INKOMMENDE MEDDELELSE*'); % opretter en ventelinje til en indlæsningsmeddelelse

r.setLEDDigits ('HOT'); % indstiller LED -displayet til at udsende 'HOT'

pause (0,5) %Kort pause for at læse information, der videregives

r.setLEDDigits ('LAVA'); % indstiller LED -display til output 'LAVA'

pause (0,5)

waitbar (.33, f, '*INCOMING MESSAGE*'); %skaber en stigning i ventelinjen

r.setLEDDigits ('HOT');

pause (0,5)

r.setLEDDigits ('LAVA');

pause (0,5)

waitbar (.67, f, '*INCOMING MESSAGE*'); % skaber en stigning i ventelinjen

r.setLEDDigits ('HOT');

pause (0,5)

r.setLEDDigits ('LAVA');

ventelinje (1, f, '*INKOMMENDE MEDDELELSE*'); %fuldfører ventelinjen

pause (1)

Luk (f) %lukker ventelinjen

r.setLEDDigits (); % rydder LED -displayet

luk alle %Lukker alle tidligere vinduer

akser ('Farve', 'ingen', 'XColor', 'ingen', 'YColor', 'ingen') % Sletter plottet vindue for akserne og diagrammet

y = 0,5; % indstiller tekstens y-position i plotningsvinduet

x = 0,06; % angiver tekstens x-position i plotningsvinduet

title ('FROM MARS ROOMBA', 'fontsize', 32) % Føjer en titel til plotningsvinduet

quadeqtxt = 'FARE LAVA'; % Indstiller variablen 'quadeqtxt' til output 0

tekst (x, y, quadeqtxt, 'tolk', 'latex', 'skrifttype', 36); % viser quadeq -teksten i plotningsvinduet

r.moveDistance (-0,2, 0,2) %vender roomba 0,2 m

r.turnAngle (180, 0,5) %drejer roomba 180 grader så hurtigt som muligt

r.setLEDCenterColor (128, 128); % indstiller roomba center LED til orange

luk alle %lukker resterende åbne vinduer

elseif blue_mean> 175 % If statement for at få forskellige funktioner i roomba til at ske, hvis kameraet ser en gennemsnitlig blå farve på større end 175

r.stop % stopper roomba

r.setLEDCenterColor (255) % sætter cirklen til farve rød

r.setLEDDigits (); % rydder displayet

f = ventelinje (0, '*INKOMMENDE MEDDELELSE*'); % opretter en ventelinje til en indlæsningsmeddelelse

r.setLEDDigits ('LOOK'); % indstiller LED -displayet til at udsende 'LOOK'

pause (0,5) %Kort pause for at læse information, der videregives

r.setLEDDigits ('WATR'); % indstiller LED -display til output 'WATR'

pause (0,5)

waitbar (.33, f, '*INCOMING MESSAGE*'); %skaber en stigning i ventelinjen

r.setLEDDigits ('LOOK');

pause (0,5)

r.setLEDDigits ('WATR');

pause (0,5)

waitbar (.67, f, '*INCOMING MESSAGE*'); % skaber en stigning i ventelinjen

r.setLEDDigits ('LOOK');

pause (0,5)

r.setLEDDigits ('WATR');

ventelinje (1, f, '*INKOMMENDE MEDDELELSE*'); %fuldfører ventelinjen

pause (1)

Luk (f) %lukker ventelinjen

r.setLEDDigits (); % rydder LED -displayet

luk alle %Lukker alle tidligere vinduer

akser ('Farve', 'ingen', 'XColor', 'ingen', 'YColor', 'ingen') % Sletter plottet vindue for akserne og diagrammet

y = 0,5; % indstiller tekstens y-position i plotningsvinduet

x = 0,06; % angiver tekstens x-position i plotningsvinduet

title ('FROM MARS ROOMBA', 'fontsize', 32) % Føjer en titel til plotningsvinduet

quadeqtxt = 'FUNDET VAND'; % Indstiller variablen 'quadeqtxt' til output 0

tekst (x, y, quadeqtxt, 'tolk', 'latex', 'skrifttype', 36); % viser quadeq -teksten i plotningsvinduet

r.moveDistance (-0,2, 0,2) %vender roomba 0,2 m

r.turnAngle (180, 0,5) %drejer roomba 180 grader så hurtigt som muligt

r.setLEDCenterColor (128, 128); % indstiller roomba center LED til orange

luk alle %lukker resterende åbne vinduer

slut %ender 'red_mean' if -sætning

slut %slutter 'væsker' hvis erklæring

slut % lukker uendelig mens loop

slut % ender funktion 'LiquidCheck'

Trin 4: Kørsel af koden

Når du har kopieret og indsat koden i MATLAB, skal du oprette forbindelse til Roomba. Når Roomba er forbundet, skal du navngive variablen r. Funktionerne bruger variablen r, når der henvises til Roomba, så Roomba skal defineres som variablen r. Efter at have kørt koden skal Roomba køre som instrueret.

Anbefalede: