Innholdsfortegnelse:
Video: Mars Roomba Project UTK: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
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:
Gjør Roomba til en Mars Rover: 5 trinn
Gjør Roomba til en Mars Rover:
Robot Project UTK 2017: 3 trinn
Robot Project UTK 2017: Mission: Teamet vårt av ingeniører har blitt ansatt av Froogle, et ideelt fundament for teknologiutvikling med åpen kildekode, for å utvikle en innovativ Human Assisting Mars Rover.-Out-team " rover " er en roomba som vi kodet for å utføre en serie
Mars Rover som bruker Raspberry Pi: 5 trinn
Mars Rover ved hjelp av Raspberry Pi: Kjære alle store lærere, jeg er alltid nysgjerrig på å vite om mars rover, med 6 hjul som kan gå over hele Mars og utforske ting fra jorden. Jeg vil også utforske ting ved å sitte på den bærbare datamaskinen min. Så nå synes jeg det er på tide å gjøre det og
Mars Roomba: 6 trinn
Mars Roomba: Denne instruksjonsguiden vil guide deg i instruksjonene for bruk av en Raspberry Pi -kontrollert Roomba vakuumbot. Operativsystemet vi skal bruke er via MATLAB
UTK EF 230 MarsRoomba Project høsten 2018: 5 trinn
UTK EF 230 MarsRoomba -prosjekt høst 2018: For tiden brukes Mars -rovere til å samle data på overflaten av Mars gjennom forskjellige metoder, for å få den siste enden på å lære mer om planetens potensial for mikrobielt liv. Rovers bruker hovedsakelig verktøy for fotografering og jordanalyse for datakunnskap