Innehållsförteckning:

Mars Roomba Project UTK: 4 steg
Mars Roomba Project UTK: 4 steg

Video: Mars Roomba Project UTK: 4 steg

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

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: