Innehållsförteckning:
Video: Mars Roomba Project UTK: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
ANSVARSFRISKRIVNING: DETTA FUNGERAR ENDAST OM ROOMBA INSTALLERAS I A
MYCKET SÄRSKILT SÄTT, DETTA INSTRUKTABEL SKAPAS FÖR OCH AVSIKTAS ATT ANVÄNDAS AV UNIVERSITETET I TENNESSEE -STUDENTER OCH FAKULTET
Denna kod används för att konfigurera en Roomba för att köra lokalt skriven och sparad kod i MATLAB. Detta fungerar inte om du inte kan hämta nödvändiga bibliotek från University of Tennessee webbplats. Om du har biblioteken kan du programmera din egen Roomba med hjälp av funktionerna i biblioteket. Denna instruktionsbok lär dig hur du installerar biblioteken, skapar en mapp för all kod och hur du kodar och använder programmet som vi har tillhandahållit nedan.
Nödvändigt material:
· Roomba
· MATLAB
· Raspberry Pi och Pi -kamera
Steg 1: Skaffa biblioteken
På teknikwebbplatsen finns en verktygslåda/bibliotek, ladda ner den och lägg den i en ny mapp. Den här mappen måste innehålla alla projektarbetsfiler, eftersom alla funktioner som används i ett program du gör måste referera till biblioteket. När du har gjort detta kan du börja arbeta med dina program
Steg 2: Skriva program
Det finns en hel del funktioner som kan användas i programmet, dessa funktioner kan nås med kommandot "doc roomba". Med hjälp av dessa funktioner kan du styra din Roomba på många olika sätt. Koden som anges nedan använder stötsensorer, ljusstångssensorer, kamera och klippsensorer på olika sätt för att skapa en mars rover. Vi använde stötsensorerna för att upptäcka när Roomba träffar ett föremål, när detta händer kommer roboten att backa, vända och fortsätta att röra sig. Innan Roomba träffar ett objekt kommer ljusfältet att upptäcka objektet och sakta ner Roomba så att när det stöter på objektet för att aktivera stötsensorn kommer Roomba att bli mindre skadad/påverkad av påverkan. Kameran söker efter vatten eller lava på ytan, om det inte finns någon vätska kommer roboten att fortsätta att söka, om det finns lite vatten kommer roboten att meddela operatörerna. Klippsensorerna är utformade för att stoppa roboten om den närmar sig en klippa. Om roboten känner av en klippa kommer den att vända och vända för att undvika att falla.
Steg 3: Kod
Kopiera och klistra in detta i en MATLAB -fil som finns i samma mapp som biblioteken
functionMainRoombaFile (r)
r.setDriveVelocity (0,1, 0,1)
medan true % Infinte while loop för att hålla koden igång
dontFall = cliffCheck (r) % Tilldelar variabeln 'dontFall' till funktionen 'cliffCheck'
if dontFall % if sats för att fortsätta i kod efter att 'cliffCheck' är klar
r.setDriveVelocity (0,1, 0,1) % Håller Roomba i rörelse efter att 'cliffCheck' är klar
end % slutar 'dontFall' if -uttalande
bumper = bumpcheck (r) % Tilldelar variabeln "bumper" till funktionen "bumpcheck"
if bumper % if statement to continue in code after 'bumpcheck' is complete
r.setDriveVelocity (0,1, 0,1) % Håller Roomba i rörelse efter att "bumpcheck" är klar
slut % slutar "bumper" if -sats
liquids = LiquidCheck (r) % Tilldelar variabeln 'liquids' till funktionen 'LiquidCheck'
om vätskor % om uttalandet ska fortsätta i koden efter att 'LiquidCheck' är klar
r.setDriveVelocity (0,1, 0,1) % Håller Roomba i rörelse efter att 'LiquidCheck' är klar
slut % avslutar 'vätskor' om uttalande
lightbumper = lightcheck (r) % Tilldelar funktionen 'lightcheck' variabel 'lightbumper'
pause (0.1) % Pausa kort för att undvika kontinuerlig loop -iteration
slutet % slutar oändligt medan loop
slut % slutar funktion
function bumper = bumpcheck (r) % Skapar funktionen "bumpcheck"
bumpdata = r.getBumpers % Tilldelar all data från stötfångaren till variabeln "bumpdata"
stötfångare = bumpdata.right || bumpdata.vänster || bumpdata.front % Skapar en lagrad variabel, "stötfångare", för de olika stötfångarna
if bumpdata.right> 0 % If statement för att få olika funktioner i roomba att ske om stötfångare stöter på
r.stop % Stoppar Roomba
r.moveDistance (-0,3, 0,2) % vänder Roomba 0,3 m
r.turnAngle (90, 0,5) % Roterar Roomba 90 grader så snabbt som möjligt
slutet
om bumpdata.front> 0
r. stopp
r.moveDistance (-0,3, 0,2)
r.turnAngle (randi (270), 0,5) % Roterar Roomba med ett slumpmässigt intervall mellan 0 och 270 grader så snabbt som möjligt
slutet
om bumpdata.vänster> 0
r. stopp
r.moveDistance (-0,3, 0,2)
r.turnAngle (-90, 0,5) % Roterar Roomba -90 grader så snabbt som möjligt
slutet
slutet
function lightbumper = lightcheck (r) % Skapar funktionen 'lightcheck'
lightdata = r.getLightBumpers % Tilldelar all data från ljussensorn till variabeln 'lightdata'
lightbumper = lightdata.vänster || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Skapar en lagrad variabel, 'lightbumper', för de olika ljusstötfångarna
if lightbumper % If -uttalande för att anropa lightbumper -data ovanifrån
om ljusdata.vänster> 10 % Om uttalande orsakar att olika funktioner i roomba ska ske om ljusstötfångaren känner av mer än 10 värden
r.setDriveVelocity (0,05, 0,05) % Saktar ner roomba för att förbereda sig för bump
slut % avslutar initial if -sats
om lightdata.rightCenter> 10
r.setDriveVelocity (0,05, 0,05)
slutet
om lightdata.right> 10
r.setDriveVelocity (0,05, 0,05)
slutet
om lightdata.leftCenter> 10
r.setDriveVelocity (0,05, 0,05)
slutet
slutet % slutar 'lightbumper' if -sats
slut %slutar lightcheck -funktionen
function dontFall = cliffCheck (r) % Skapar funktionen 'cliffCheck'
data = r.getCliffSensors; % Tilldelar all data från klippsensorn till variabel 'data'
dontFall = data.vänster <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Skapar en lagrad variabel, 'dontFall', för de olika klippsensorerna
if dontFall % If -uttalande för att anropa klippsensordata från ovan
if data.vänster <1010 % If uttalande för att orsaka olika funktioner i roomba att hända om klippsensorn känner av mindre än 1010 värden
r. stopp
r.moveDistance (-0,2, 0,2) % vänder Roomba 0,2 m
r.turnAngle (-90, 0,5) % Roterar Roomba -90 grader så snabbt som möjligt
elseif data.leftFront <1010
r. stopp
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Roterar Roomba 90 grader så snabbt som möjligt
elseif data.rightFront <1010
r. stopp
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Roterar Roomba 90 grader så snabbt som möjligt
elseif data.right <1010
r. stopp
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Roterar Roomba 90 grader så snabbt som möjligt
slutet
slutet
slutet
function liquids = LiquidCheck (r) % Skapar funktionen 'LiquidCheck'
medan true %startar oändlig loop för kalibrering
img = r.getImage; % läser av kameran från roboten
bild (img) % visar bilden i ett figurfönster
red_mean = medelvärde (medelvärde (img (200, 150, 1)))% läser den genomsnittliga mängden röda pixlar
blue_mean = medelvärde (medelvärde (img (200, 150, 3)))% läser den genomsnittliga mängden blå pixlar
vätskor = red_mean || blue_mean % Skapar en lagrad variabel, 'vätskor', för de olika färgvariablerna
om vätskor % If -uttalande för att ringa bilddata uppifrån
if red_mean> 170 % If statement för att få olika funktioner i roomba att hända om kameran ser en genomsnittlig röd färg på mer än 170
r.stop % stoppar roomba
r.setLEDCenterColor (255) % ställer in cirkeln till röd färg
r.setLEDDigits (); % rensa displayen
f = väntelista (0, "*INKOMMANDE MEDDELANDE*"); % skapar en väntelista för ett laddningsmeddelande
r.setLEDDigits ('HOT'); % ställer in LED -displayen för att mata ut "HOT"
paus (0,5) %Kort paus för att läsa informationen
r.setLEDDigits ('LAVA'); % ställer in LED -display för att mata ut 'LAVA'
paus (0,5)
waitbar (.33, f, "*INKOMMANDE MEDDELANDE*"); %skapar en ökning av väntelistan
r.setLEDDigits ('HOT');
paus (0,5)
r.setLEDDigits ('LAVA');
paus (0,5)
waitbar (.67, f, "*INKOMMANDE MEDDELANDE*"); % skapar en ökning av väntelistan
r.setLEDDigits ('HOT');
paus (0,5)
r.setLEDDigits ('LAVA');
väntelista (1, f, "*INKOMMANDE MEDDELANDE*"); %slutför väntelistan
paus (1)
close (f) %stänger väntelisten
r.setLEDDigits (); % rensar LED -displayen
stäng alla %Stänger alla föregående fönster
axlar ('Färg', 'ingen', 'XColor', 'ingen', 'YColor', 'ingen') % Rensar plottfönstret för axlarna och diagrammet
y = 0,5; % anger y-positionen för texten i plottningsfönstret
x = 0,06; % anger x-positionen för texten i plottningsfönstret
title ('FROM MARS ROOMBA', 'fontsize', 32) % Lägger till en titel i plottningsfönstret
quadeqtxt = 'FARA LAVA'; % Ställer in variabeln 'quadeqtxt' till utgång 0
text (x, y, quadeqtxt, 'tolk', 'latex', 'fontstorlek', 36); % visar quadeq -texten i plottningsfönstret
r.moveDistance (-0,2, 0,2) %vänder roomba 0,2 m
r.turnAngle (180, 0,5) %vrider roomba 180 grader så snabbt som möjligt
r.setLEDCenterColor (128, 128); % sätter roomba center LED till orange
stäng alla %stänger återstående öppna fönster
elseif blue_mean> 175 % If statement för att få olika funktioner i roomba att hända om kameran ser en medelblå färg som är större än 175
r.stop % stoppar roomba
r.setLEDCenterColor (255) % ställer in cirkeln till färg röd
r.setLEDDigits (); % rensa displayen
f = väntelista (0, "*INKOMMANDE MEDDELANDE*"); % skapar en väntelista för ett laddningsmeddelande
r.setLEDDigits ('LOOK'); % ställer in LED -skärmen för utmatning 'LOOK'
paus (0,5) %Kort paus för att läsa information
r.setLEDDigits ('WATR'); % ställer in LED -displayen för att mata ut 'WATR'
paus (0,5)
waitbar (.33, f, "*INKOMMANDE MEDDELANDE*"); %skapar en ökning av väntelistan
r.setLEDDigits ('LOOK');
paus (0,5)
r.setLEDDigits ('WATR');
paus (0,5)
waitbar (.67, f, "*INKOMMANDE MEDDELANDE*"); % skapar en ökning av väntelistan
r.setLEDDigits ('LOOK');
paus (0,5)
r.setLEDDigits ('WATR');
väntelista (1, f, "*INKOMMANDE MEDDELANDE*"); %slutför väntelistan
paus (1)
close (f) %stänger väntelisten
r.setLEDDigits (); % rensar LED -displayen
stäng alla %Stänger alla föregående fönster
axlar ('Färg', 'ingen', 'XColor', 'ingen', 'YColor', 'ingen') % Rensar plottfönstret för axlarna och diagrammet
y = 0,5; % anger textens y-position i plottningsfönstret
x = 0,06; % anger x-positionen för texten i plottningsfönstret
title ('FROM MARS ROOMBA', 'fontsize', 32) % Lägger till en titel i plottningsfönstret
quadeqtxt = 'HITTAT VATTEN'; % Ställer in variabeln 'quadeqtxt' till utgång 0
text (x, y, quadeqtxt, 'tolk', 'latex', 'fontstorlek', 36); % visar quadeq -texten i plottningsfönstret
r.moveDistance (-0,2, 0,2) %vänder roomba 0,2 m
r.turnAngle (180, 0,5) %vrider roomba 180 grader så snabbt som möjligt
r.setLEDCenterColor (128, 128); % sätter roomba center LED till orange
stäng alla %stänger återstående öppna fönster
slutet %slutar 'red_mean' if -sats
slut %avslutar 'vätskor' if -uttalande
slutet % stänger oändligt medan loop
slut % slutar funktionen 'LiquidCheck'
Steg 4: Kör koden
När du har kopierat och klistrat in koden i MATLAB måste du ansluta till Roomba. När Roomba är ansluten måste du namnge variabeln r. Funktionerna använder variabeln r när de hänvisar till Roomba, så Roomba måste definieras som variabeln r. Efter körning av koden ska Roomba köras enligt instruktionerna.
Rekommenderad:
Förvandla din Roomba till en Mars Rover: 5 steg
Förvandla din Roomba till en Mars Rover:
Robotprojekt UTK 2017: 3 steg
Robot Project UTK 2017: Mission: Vårt team av ingenjörer har anställts av Froogle, en ideell stiftelse för teknikutveckling med öppen källkod, för att utveckla en innovativ Human Assisting Mars Rover.-Out-team " rover " är en roomba som vi kodade för att köra en serie
Mars Rover med Raspberry Pi: 5 steg
Mars Rover Använda Raspberry Pi: Kära alla stora lärare, jag är alltid nyfiken på att veta om mars rover, med 6 hjul som kan gå överallt på Mars och utforska saker från jorden. Jag vill också utforska saken genom att sitta på min bärbara dator. Så nu tycker jag att det är rätt tid att göra det och
Mars Roomba: 6 steg
Mars Roomba: Denna instruktionsguide kommer att vägleda dig i riktningarna för att använda en Raspberry Pi -kontrollerad Roomba -vakuumbot. Operativsystemet vi kommer att använda är via MATLAB
UTK EF 230 MarsRoomba Project hösten 2018: 5 steg
UTK EF 230 MarsRoomba -projekt hösten 2018: För närvarande används Mars -rovers för att samla in data på Mars yta genom olika metoder för att i slutändan lära sig mer om planetens potential för mikrobiellt liv. Rovers använder främst fotograferings- och markanalysverktyg för data