Inhoudsopgave:
- Stap 1: De bibliotheken verkrijgen
- Stap 2: De programma's schrijven
- Stap 3: Coderen
- Stap 4: De code uitvoeren
Video: Mars Roomba Project UTK - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
DISCLAIMER: DIT WERKT ALLEEN ALS DE ROOMBA IS INGESTELD IN A
ZEER SPECIFIEKE MANIER, DIT INSTRUCTABLE IS GEMAAKT VOOR EN BEDOELD OM TE WORDEN GEBRUIKT DOOR UNIVERSITEIT VAN TENNESSEE STUDENTEN EN FACULTEIT
Deze code wordt gebruikt om een Roomba in te stellen om lokaal geschreven en opgeslagen code in MATLAB uit te voeren. Dit werkt niet als u de benodigde bibliotheken niet van de website van de Universiteit van Tennessee kunt krijgen. Als u over de bibliotheken beschikt, kunt u deze gebruiken om uw eigen Roomba te programmeren met behulp van de functies in de bibliotheek. Deze Instructable leert je hoe je de bibliotheken installeert, een map voor alle code maakt en hoe je het programma codeert en gebruikt dat we hieronder hebben verstrekt.
Benodigde materialen:
· Kamerba
· MATLAB
· Raspberry Pi en Pi-camera
Stap 1: De bibliotheken verkrijgen
Op de engineering website is een toolbox/bibliotheek aanwezig, download deze en plaats deze in een nieuwe map. Deze map moet alle projectwerkbestanden bevatten, aangezien elke functie die in een programma dat u maakt, naar de bibliotheek moet verwijzen. Nadat je dit hebt gedaan, kun je aan je programma's gaan werken
Stap 2: De programma's schrijven
Er zijn nogal wat functies die in het programma kunnen worden gebruikt, deze functies zijn toegankelijk met het commando "doc roomba". Met deze functies kunt u uw Roomba op veel verschillende manieren bedienen. De onderstaande code gebruikt de stootsensoren, lichtbalksensoren, camera en klifsensoren op verschillende manieren om een marsrover te maken. We hebben de stootsensoren gebruikt om te detecteren wanneer de Roomba een object raakt. Wanneer dit gebeurt, zal de robot achteruitrijden, zich omdraaien en blijven bewegen. Voordat de Roomba een object raakt, zal de lichtbalk het object detecteren en de Roomba vertragen, zodat wanneer hij tegen het object botst om de stootsensor te activeren, de Roomba minder wordt beschadigd/beïnvloed door de impact. De camera zoekt naar water of lava op het oppervlak, als er geen vloeistof wordt gevonden, gaat de robot verder met zoeken, als er wat water wordt gevonden, zal de robot de operators een bericht sturen. De klifsensoren zijn ontworpen om de robot te stoppen als deze een klif nadert. Als de robot een klif detecteert, keert hij om en draait hij zich om om te voorkomen dat hij valt.
Stap 3: Coderen
Kopieer en plak dit in een MATLAB-bestand dat zich in dezelfde map als de bibliotheken bevindt
functieHoofdkamerbaFile(r)
r.setDriveVelocity(0.1, 0.1)
while true % Oneindige while-lus om de code actief te houden
dontFall = cliffCheck(r) % Wijst variabele 'dontFall' toe aan de functie 'cliffCheck'
if dontFall % if statement om verder te gaan in code nadat 'cliffCheck' is voltooid
r.setDriveVelocity(0.1, 0.1) % Houdt Roomba in beweging nadat 'cliffCheck' is voltooid
end % beëindigt 'dontFall' if-statement
bumper=bumpcheck(r) % Wijst variabele 'bumper' toe aan de functie 'bumpcheck'
if bumper % if statement om verder te gaan in code nadat 'bumpcheck' is voltooid
r.setDriveVelocity(0.1, 0.1) % Houdt Roomba in beweging nadat de 'bumpcheck' is voltooid
end % eindigt 'bumper' if statement
liquids = LiquidCheck(r) % Wijst variabele 'liquids' toe aan de functie 'LiquidCheck'
if liquids % if statement om verder te gaan in code nadat 'LiquidCheck' is voltooid
r.setDriveVelocity(0.1, 0.1) % Houdt Roomba in beweging nadat 'LiquidCheck' is voltooid
end % beëindigt 'liquids' if statement
lightbumper=lightcheck(r) % Wijst variabele 'lightbumper' toe aan de functie 'lightcheck'
pauze(0.1) % Pauzeer kort om continue lus-iteratie te voorkomen
end % eindigt oneindig while loop
einde % beëindigt functie
functie bumper=bumpcheck(r) % Creëert 'bumpcheck'-functie
bumpdata= r.getBumpers % Wijst alle gegevens van de bumper toe aan variabele 'bumpdata'
bumper = bumpdata.right || bumpdata.left || bumpdata.front % Creëert een opgeslagen variabele, 'bumper', voor de verschillende bumpers
if bumpdata.right>0 % If-instructie om ervoor te zorgen dat verschillende functies van de roomba worden uitgevoerd als er tegen de bumper wordt gestoten
r.stop % Stopt Roomba
r.moveDistance(-0.3, 0.2) % Keert Roomba 0.3m. om
r.turnAngle(90, 0,5) % Draait Roomba zo snel mogelijk 90 graden
einde
als bumpdata.front>0
r.stop
r.moveDistance(-0.3, 0.2)
r.turnAngle(randi(270), 0,5) % Draait Roomba zo snel mogelijk met een willekeurig interval tussen 0 en 270 graden
einde
if bumpdata.left>0
r.stop
r.moveDistance(-0.3, 0.2)
r.turnAngle(-90, 0.5) % Draait Roomba -90 graden zo snel mogelijk
einde
einde
functie lightbumper=lightcheck(r) % Creëert 'lightcheck'-functie
lightdata= r.getLightBumpers % Wijst alle gegevens van de lichtstootsensor toe aan variabele 'lightdata'
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Creëert een opgeslagen variabele, 'lightbumper', voor de verschillende lichtbumpers
if lightbumper % If-statement om de lightbumper-gegevens van boven aan te roepen
if lightdata.left>10 % If-instructie om ervoor te zorgen dat verschillende functies van de roomba worden uitgevoerd als de lichtbumper meer dan 10 waarden waarneemt
r.setDriveVelocity(0.05, 0.05) % Vertraagt roomba om zich voor te bereiden op stoten
end % beëindigt initiële if-instructie
als lightdata.rightCenter>10
r.setDriveVelocity(0.05; 0.05)
einde
if lightdata.right>10
r.setDriveVelocity(0.05; 0.05)
einde
if lightdata.leftCenter>10
r.setDriveVelocity(0.05; 0.05)
einde
end % beëindigt 'lightbumper' if statement
einde %beëindigt lichtcontrolefunctie
functie dontFall = cliffCheck(r) % Creëert 'cliffCheck' functie
data = r.getCliffSensors; % Wijst alle data van de cliff-sensor toe aan variabele 'data'
dontFall = data.left<1020 || data.leftFront<1020 || data.rightFront<1020 || data.right<1020 % Creëert een opgeslagen variabele, 'dontFall', voor de verschillende klifsensoren
if dontFall % If-instructie om de cliff-sensorgegevens van boven op te roepen
if data.left < 1010 % If-statement om verschillende functies van de roomba te laten plaatsvinden als de cliff-sensor minder dan 1010 waarden waarneemt
r.stop
r.moveDistance(-0.2, 0.2) % Keert Roomba 0.2m. om
r.turnAngle(-90, 0.5) % Draait Roomba -90 graden zo snel mogelijk
elseif data.leftFront < 1010
r.stop
r.moveDistance(-0.3, 0.2)
r.turnAngle(90, 0,5) % Draait Roomba zo snel mogelijk 90 graden
elseif data.rightFront < 1010
r.stop
r.moveDistance(-0.3, 0.2)
r.turnAngle(90, 0,5) % Draait Roomba zo snel mogelijk 90 graden
elseif data.right < 1010
r.stop
r.moveDistance(-0.3, 0.2)
r.turnAngle(90, 0,5) % Draait Roomba zo snel mogelijk 90 graden
einde
einde
einde
functie vloeistoffen = LiquidCheck(r) % Creëert 'LiquidCheck' functie
while true %start oneindige lus voor kalibreren
img = r.getImage; % leest de camera van de robot af
image(img) % toont de afbeelding in een figuurvenster
red_mean = mean(mean(img(200, 150, 1)))% leest het gemiddelde aantal rode pixels
blue_mean = mean(mean(img(200, 150, 3)))% leest het gemiddelde aantal blauwe pixels
vloeistoffen = red_mean || blue_mean % Creëert een opgeslagen variabele, 'liquids', voor de verschillende kleurvariabelen
if liquids % If-instructie om de afbeeldingsgegevens van boven op te roepen
if red_mean>170 % If-instructie om ervoor te zorgen dat verschillende functies van de roomba worden uitgevoerd als de camera een gemiddelde rode kleur van meer dan 170 ziet
r.stop % stopt roomba
r.setLEDCenterColor(255) % zet cirkel op kleur rood
r.setLEDDigits(); % wis het scherm
f = wachtbalk (0, '*INKOMEND BERICHT*'); % maakt een wachtbalk voor een laadbericht
r.setLEDDigits('HOT'); % stelt LED-display in op uitgang 'HOT'
pauze(0.5) %Korte Pauze om weergegeven informatie te lezen
r.setLEDDigits('LAVA'); % stelt LED-display in op uitgang 'LAVA'
pauze(0.5)
wachtbalk(.33, f, '*INKOMEND BERICHT*'); %creëert een verhoging in de wachtbalk
r.setLEDDigits('HOT');
pauze(0.5)
r.setLEDDigits('LAVA');
pauze(0.5)
wachtbalk(.67, f, '*INKOMEND BERICHT*'); % creëert een toename in de wachtbalk
r.setLEDDigits('HOT');
pauze(0.5)
r.setLEDDigits('LAVA');
wachtbalk (1, f, '*INKOMEND BERICHT*'); %voltooit de wachtbalk
pauze(1)
close(f) %sluit de wachtbalk
r.setLEDDigits(); % wist het LED-display
sluit alles %Sluit alle vorige vensters
axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Wist het plotvenster van de assen en het diagram
y=0,5; % stelt de y-positie van de tekst in het plotvenster in
x=0,06; % stelt de x-positie van de tekst in het plotvenster in
title('FROM MARS ROOMBA', 'fontsize', 32) % Voegt een titel toe aan het plotvenster
quadeqtxt = 'GEVAAR LAVA'; % Stelt de variabele 'quadeqtxt' in op uitvoer 0
text(x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % geeft de quadeq-tekst weer in het plotvenster
r.moveDistance(-0.2, 0.2) % keert de roomba 0.2m. om
r.turnAngle(180, 0,5) %draait de roomba zo snel mogelijk 180 graden
r.setLEDCenterColor(128, 128); % stelt de roomba center LED in op oranje
sluit alle %sluit resterende open vensters
elseif blue_mean>175 % If-instructie om ervoor te zorgen dat verschillende functies van de roomba worden uitgevoerd als de camera een gemiddelde blauwe kleur van meer dan 175 ziet
r.stop % stopt roomba
r.setLEDCenterColor(255) % zet cirkel op kleur rood
r.setLEDDigits(); % wis het scherm
f = wachtbalk (0, '*INKOMEND BERICHT*'); % maakt een wachtbalk voor een laadbericht
r.setLEDDigits('LOOK'); % stelt LED-display in op uitgang 'LOOK'
pauze(0.5) %Korte Pauze om weergegeven informatie te lezen
r.setLEDDigits('WATR'); % stelt LED-display in op uitgang 'WATR'
pauze(0.5)
wachtbalk(.33, f, '*INKOMEND BERICHT*'); %creëert een verhoging in de wachtbalk
r.setLEDDigits('LOOK');
pauze(0.5)
r.setLEDDigits('WATR');
pauze(0.5)
wachtbalk(.67, f, '*INKOMEND BERICHT*'); % creëert een toename in de wachtbalk
r.setLEDDigits('LOOK');
pauze(0.5)
r.setLEDDigits('WATR');
wachtbalk (1, f, '*INKOMEND BERICHT*'); %voltooit de wachtbalk
pauze(1)
close(f) %sluit de wachtbalk
r.setLEDDigits(); % wist het LED-display
sluit alles %Sluit alle vorige vensters
axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Wist het plotvenster van de assen en het diagram
y=0,5; % stelt de y-positie van de tekst in het plotvenster in
x=0,06; % stelt de x-positie van de tekst in het plotvenster in
title('FROM MARS ROOMBA', 'fontsize', 32) % Voegt een titel toe aan het plotvenster
quadeqtxt = 'GEVONDEN WATER'; % Stelt de variabele 'quadeqtxt' in op uitvoer 0
text(x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % geeft de quadeq-tekst weer in het plotvenster
r.moveDistance(-0.2, 0.2) % keert de roomba 0.2m. om
r.turnAngle(180, 0,5) %draait de roomba zo snel mogelijk 180 graden
r.setLEDCenterColor(128, 128); % stelt de roomba center LED in op oranje
sluit alle %sluit resterende open vensters
end %ends 'red_mean' if-statement
end %ends 'liquids' if statement
end % sluit oneindig terwijl lus
einde % beëindigt functie 'LiquidCheck'
Stap 4: De code uitvoeren
Nadat u de code in MATLAB hebt gekopieerd en geplakt, moet u verbinding maken met de Roomba. Zodra de Roomba is aangesloten, moet u de variabele r een naam geven. De functies gebruiken de variabele r bij het verwijzen naar de Roomba, dus de Roomba moet worden gedefinieerd als de variabele r. Na het uitvoeren van de code zou de Roomba moeten werken volgens de instructies.
Aanbevolen:
Uw Roomba in een Mars Rover veranderen: 5 stappen
Uw Roomba in een Mars Rover veranderen:
Mars Roomba: 6 stappen
Mars Roomba: deze Instructable zal u begeleiden in de richting van het bedienen van een Raspberry Pi-gestuurde Roomba-vacuümbot. Het besturingssysteem dat we zullen gebruiken is via MATLAB
Roomba MATLAB-project: 5 stappen
Roomba MATLAB-project: het huidige plan dat NASA heeft voor de Mars-rover is dat het een gegevensverzamelaar wordt en rond Mars gaat zwerven, waarbij monsters van de grond worden verzameld om terug naar de aarde te brengen, zodat wetenschappers kunnen zien of er eerdere levensvormen op aarde waren. de planeet. Aanvullend
UTK EF 230 MarsRoomba-project herfst 2018: 5 stappen
UTK EF 230 MarsRoomba-project herfst 2018: Momenteel worden Marsrovers gebruikt om op verschillende manieren gegevens over het oppervlak van Mars te verzamelen, om uiteindelijk meer te weten te komen over het potentieel van de planeet voor microbieel leven. Rovers gebruiken voornamelijk fotografie- en bodemanalysetools voor datac
Roomba-project: 5 stappen (met afbeeldingen)
Roomba-project: deze instructable is gemaakt om te voldoen aan de projectvereiste van de Makecourse aan de Universiteit van Zuid-Florida (www.makecourse.com). Deze instructable omvat alle noodzakelijke stappen en componenten die nodig zijn om mijn Roomba-project samen te