Indholdsfortegnelse:
Video: Mars Roomba Project UTK: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
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:
Gør din Roomba til en Mars Rover: 5 trin
Gør din Roomba til en Mars Rover:
Robotprojekt UTK 2017: 3 trin
Robot Project UTK 2017: Mission: Vores team af ingeniører er blevet ansat af Froogle, et nonprofit-fundament for open source-teknologiudvikling, til at udvikle en innovativ Human Assisting Mars Rover.-Out teams " rover " er en roomba, som vi kodede for at udføre en serie af
Mars Rover ved hjælp af Raspberry Pi: 5 trin
Mars Rover Brug af Raspberry Pi: Kære alle store lærere, jeg er altid nysgerrig efter at vide om mars rover, der har 6 hjul, der kan gå hele overfladen af mars og udforske ting fra jorden. Jeg vil også undersøge tingene ved at sidde på min bærbare computer. Så nu synes jeg det er det rigtige tidspunkt at klare det og
Mars Roomba: 6 trin
Mars Roomba: Denne instruktør guider dig i retning af betjening af en Raspberry Pi -styret Roomba vakuumbot. Det operativsystem, vi vil bruge, er via MATLAB
UTK EF 230 MarsRoomba Project Efterår 2018: 5 trin
UTK EF 230 MarsRoomba -projekt Efterår 2018: I øjeblikket bruges Mars -rovere til at indsamle data på overfladen af Mars ved hjælp af forskellige metoder til den endelige ende med at lære mere om planetens potentiale for mikrobielt liv. Rovers bruger først og fremmest værktøjer til fotografering og jordanalyse til datak