Innholdsfortegnelse:

Mars Roomba Project UTK: 4 trinn
Mars Roomba Project UTK: 4 trinn

Video: Mars Roomba Project UTK: 4 trinn

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

ANSVARSFRASKRIVELSE: DETTE KOMMER KUN Å GJØRE HVIS ROOMBAEN ER SETT I A

VELDIG SPESIKKE MÅTE, DENNE INSTRUKSERBARE VAR SKAPT FOR OG MÅ TAKES BRUKT AV UNIVERSITETET I TENNESSEE -STUDENTER OG FAKULTET

Denne koden brukes til å sette opp en Roomba for å kjøre lokalt skrevet og lagret kode i MATLAB. Dette vil ikke fungere hvis du ikke får tak i de nødvendige bibliotekene fra University of Tennessee nettsted. Hvis du har bibliotekene, kan du bruke dem til å programmere din egen Roomba ved hjelp av funksjonene i biblioteket. Denne instruksjonsboken lærer deg hvordan du installerer bibliotekene, lager en mappe for all koden, og hvordan du koder og bruker programmet vi har gitt nedenfor.

Nødvendige materialer:

· Roomba

· MATLAB

· Bringebær Pi og Pi kamera

Trinn 1: Få bibliotekene

På ingeniørnettstedet finnes det en verktøykasse/bibliotek, last den ned og legg den i en ny mappe. Denne mappen må inneholde alle prosjektarbeidsfiler, for enhver funksjon som brukes i et program du lager, må referere til biblioteket. Etter at du har gjort dette kan du begynne å jobbe med programmene dine

Trinn 2: Skrive programmene

Det er ganske mange funksjoner som kan brukes i programmet. Disse funksjonene kan nås ved å bruke kommandoen "doc roomba". Ved å bruke disse funksjonene kan du kontrollere Roomba på mange forskjellige måter. Koden nedenfor bruker støtsensorene, lysstangssensorene, kameraet og klippesensorene på forskjellige måter for å lage en mars rover. Vi brukte støtsensorene til å oppdage når Roomba treffer et objekt, når dette skjer, vil roboten reversere, snu og fortsette å bevege seg. Før Roomba treffer et objekt, vil lysbjelken oppdage objektet og bremse Roomba slik at når det støter på objektet for å aktivere støtsensoren, blir Roomba mindre skadet/påvirket av støtet. Kameraet søker etter vann eller lava på overflaten, hvis det ikke er funnet væske, vil roboten fortsette å søke, hvis det er noe vann, vil roboten sende melding til operatørene. Cliffsensorene er designet for å stoppe roboten hvis den nærmer seg en klippe. Hvis roboten føler en klippe, vil den snu og snu for å unngå å falle.

Trinn 3: Kode

Kopier og lim dette inn i en MATLAB -fil som ligger i samme mappe som bibliotekene

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

mens true % Infinte while loop for å holde koden i gang

dontFall = cliffCheck (r) % Tilordner variabelen 'dontFall' til funksjonen 'cliffCheck'

if dontFall % if statement to continue in code after 'cliffCheck' is complete

r.setDriveVelocity (0.1, 0.1) % Holder Roomba i bevegelse etter at 'cliffCheck' er fullført

end % ender 'dontFall' if -setning

bumper = bumpcheck (r) % Tilordner variabelen 'bumper' til funksjonen 'bumpcheck'

if bumper % if statement to continue in code after 'bumpcheck' is complete

r.setDriveVelocity (0.1, 0.1) % Holder Roomba i bevegelse etter at "bumpcheck" er fullført

end % ender 'bumper' if -setning

liquids = LiquidCheck (r) % Tilordner variabelen 'væsker' til funksjonen 'LiquidCheck'

hvis væsker % hvis uttalelsen skal fortsette i koden etter at 'LiquidCheck' er fullført

r.setDriveVelocity (0.1, 0.1) % Holder Roomba i bevegelse etter at 'LiquidCheck' er fullført

ende % ender med 'væsker' hvis uttalelse

lightbumper = lightcheck (r) % Tilordner variabelen 'lightbumper' til funksjonen 'lightcheck'

pause (0,1) % Kort pause for å unngå kontinuerlig loop -iterasjon

slutten % ender uendelig mens loop

slutt % ender funksjon

function bumper = bumpcheck (r) % Oppretter 'bumpcheck' funksjon

bumpdata = r.getBumpers % Tilordner alle data fra støtfangeren til variabelen 'bumpdata'

støtfanger = bumpdata.right || bumpdata. venstre || bumpdata.front % Oppretter en lagret variabel, 'bumper', for de forskjellige støtfangerne

if bumpdata.right> 0 % If statement for å få forskjellige funksjoner i roomba til å skje hvis Støtfanger støtes

r.stop % Stopper Roomba

r.moveDistance (-0.3, 0.2) % reverserer Roomba 0.3m

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

slutt

hvis bumpdata.front> 0

r. stopp

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

r.turnAngle (randi (270), 0,5) % Roter Roomba med et tilfeldig intervall mellom 0 og 270 grader så raskt som mulig

slutt

hvis bumpdata. venstre> 0

r. stopp

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

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

slutt

slutt

function lightbumper = lightcheck (r) % Oppretter 'lightcheck' funksjon

lightdata = r.getLightBumpers % Tilordner alle data fra lysstøtsensoren til variabelen 'lysdata'

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Oppretter en lagret variabel, 'lightbumper', for de forskjellige lysstøtfangerne

if lightbumper % If -uttalelse for å kalle lightbumper -dataene ovenfra

if lightdata.left> 10 % If statement for å få forskjellige funksjoner i roomba til å skje hvis lysstøtfangeren registrerer større enn 10 verdier

r.setDriveVelocity (0,05, 0,05) % Bremser roomba for å forberede seg på støt

ende % avslutter initial if -setning

hvis lightdata.rightCenter> 10

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

slutt

hvis lightdata.right> 10

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

slutt

hvis lightdata.leftCenter> 10

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

slutt

end % ender 'lightbumper' if -setning

slutten %avslutter lightcheck -funksjonen

function dontFall = cliffCheck (r) % Oppretter 'cliffCheck' funksjon

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

dontFall = data. venstre <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Oppretter en lagret variabel, 'dontFall', for de forskjellige klippesensorene

if dontFall % If -uttalelse for å kalle kliffsensordataene ovenfra

if data. venstre <1010 % If statement for å få forskjellige funksjoner i roomba til å skje hvis cliffsensoren registrerer mindre enn 1010 verdier

r. stopp

r.moveDistance (-0.2, 0.2) % reverserer Roomba 0.2m

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

elseif data.leftFront <1010

r. stopp

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

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

elseif data.rightFront <1010

r. stopp

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

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

elseif data.right <1010

r. stopp

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

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

slutt

slutt

slutt

funksjonsvæsker = LiquidCheck (r) % Oppretter 'LiquidCheck' -funksjonen

mens sann %starter uendelig sløyfe for kalibrering

img = r.getImage; % leser kameraet av roboten

image (img) % viser bildet i et figurvindu

red_mean = mean (mean (img (200, 150, 1)))% leser gjennomsnittlig mengde røde piksler

blue_mean = mean (mean (img (200, 150, 3)))% leser gjennomsnittlig mengde blå piksler

væsker = rød_middel || blue_mean % Oppretter en lagret variabel, 'væsker', for de forskjellige fargevariablene

hvis væsker % If -setning for å ringe bildedataene ovenfra

if red_mean> 170 % If statement for å få forskjellige funksjoner i roomba til å skje hvis kameraet ser en gjennomsnittlig rød farge på større enn 170

r.stop % stopper roomba

r.setLEDCenterColor (255) % setter sirkelen til rød farge

r.setLEDDigits (); % tøm skjermen

f = ventelinje (0, '*INKOMMENDE MELDING*'); % oppretter en ventelinje for en lastemelding

r.setLEDDigits ('HOT'); % setter LED -displayet til å sende ut 'HOT'

pause (0,5) %Kort pause for å lese informasjon som er sendt

r.setLEDDigits ('LAVA'); % setter LED -skjermen til utgang 'LAVA'

pause (0,5)

ventelinje (.33, f, '*INKOMMENDE MELDING*'); %skaper en økning i ventelinjen

r.setLEDDigits ('HOT');

pause (0,5)

r.setLEDDigits ('LAVA');

pause (0,5)

ventelinje (.67, f, '*INKOMMENDE MELDING*'); % skaper en økning i ventelinjen

r.setLEDDigits ('HOT');

pause (0,5)

r.setLEDDigits ('LAVA');

ventelinje (1, f, '*INKOMMENDE MELDING*'); %fullfører ventelinjen

pause (1)

lukk (f) %lukker ventelinjen

r.setLEDDigits (); % tømmer LED -displayet

lukk alle %Lukker alle tidligere vinduer

akser ('Farge', 'ingen', 'XColor', 'ingen', 'YColor', 'ingen') % Sletter plottvinduet for aksene og diagrammet

y = 0,5; % angir y-posisjonen til teksten i plottingsvinduet

x = 0,06; % angir x-posisjonen til teksten i plottingsvinduet

title ('FROM MARS ROOMBA', 'fontsize', 32) % Legger til en tittel i plottingsvinduet

quadeqtxt = 'FARE LAVA'; % Angir variabelen 'quadeqtxt' til utgang 0

tekst (x, y, quadeqtxt, 'tolk', 'latex', 'skriftstørrelse', 36); % viser quadeq -teksten i plottingsvinduet

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

r.turnAngle (180, 0,5) %snur roomba 180 grader så raskt som mulig

r.setLEDCenterColor (128, 128); % setter roomba senter -LED til oransje

lukk alle %lukker gjenværende åpne vinduer

elseif blue_mean> 175 % If statement for å få forskjellige funksjoner i roomba til å skje hvis kameraet ser en gjennomsnittlig blå farge på større enn 175

r.stop % stopper roomba

r.setLEDCenterColor (255) % setter sirkelen til rød farge

r.setLEDDigits (); % tøm skjermen

f = ventelinje (0, '*INKOMMENDE MELDING*'); % oppretter en ventelinje for en lastemelding

r.setLEDDigits ('LOOK'); % setter LED -skjermen til utgang 'LOOK'

pause (0,5) %Kort pause for å lese informasjon som er sendt

r.setLEDDigits ('WATR'); % setter LED -skjermen til utgang 'WATR'

pause (0,5)

ventelinje (.33, f, '*INKOMMENDE MELDING*'); %skaper en økning i ventelinjen

r.setLEDDigits ('LOOK');

pause (0,5)

r.setLEDDigits ('WATR');

pause (0,5)

ventelinje (.67, f, '*INKOMMENDE MELDING*'); % skaper en økning i ventelinjen

r.setLEDDigits ('LOOK');

pause (0,5)

r.setLEDDigits ('WATR');

ventelinje (1, f, '*INKOMMENDE MELDING*'); %fullfører ventelinjen

pause (1)

lukk (f) %lukker ventelinjen

r.setLEDDigits (); % tømmer LED -displayet

lukk alle %Lukker alle tidligere vinduer

akser ('Farge', 'ingen', 'XColor', 'ingen', 'YColor', 'ingen') % Sletter plottvinduet for aksene og diagrammet

y = 0,5; % angir y-posisjonen til teksten i plottingsvinduet

x = 0,06; % angir x-posisjonen til teksten i plottingsvinduet

title ('FROM MARS ROOMBA', 'fontsize', 32) % Legger til en tittel i plottingsvinduet

quadeqtxt = 'FUNNT VANN'; % Angir variabelen 'quadeqtxt' til utgang 0

tekst (x, y, quadeqtxt, 'tolk', 'latex', 'skriftstørrelse', 36); % viser quadeq -teksten i plottingsvinduet

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

r.turnAngle (180, 0,5) %snur roomba 180 grader så raskt som mulig

r.setLEDCenterColor (128, 128); % setter roomba senter -LED til oransje

lukk alle %lukker gjenværende åpne vinduer

slutten %ender 'red_mean' if -setning

slutt %ender med 'væsker' hvis uttalelse

end % lukker uendelig mens loop

slutt % slutter funksjonen 'LiquidCheck'

Trinn 4: Kjøre koden

Etter at du har kopiert og limt inn koden i MATLAB må du koble til Roomba. Når Roomba er koblet til må du navngi variabelen r. Funksjonene bruker variabelen r når det refereres til Roomba, så Roomba må defineres som variabelen r. Etter kjøring av koden skal Roomba kjøre som beskrevet.

Anbefalt: