Tartalomjegyzék:

Mars Roomba Project UTK: 4 lépés
Mars Roomba Project UTK: 4 lépés

Videó: Mars Roomba Project UTK: 4 lépés

Videó: Mars Roomba Project UTK: 4 lépés
Videó: Ави Леб: Сознание, UAP, Жак Валле 2024, November
Anonim
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

NYILATKOZAT: EZ CSAK MŰKÖDIK, HA A ROOMBA BE van állítva

NAGYON KÜLÖNLEGES ÚT, EZT AZ INSTRUKCIÓT A TENNESSEE TANULÓK ÉS A KAR EGYETEME LÉTREHOZTA, ÉS HASZNÁLATRA SZÁMOLTÁK

Ezzel a kóddal egy Roomba állítható be a MATLAB -ban helyben írt és mentett kód futtatásához. Ez nem működik, ha nem tudja beszerezni a szükséges könyvtárakat a Tennessee Egyetem webhelyéről. Ha rendelkezik könyvtárakkal, akkor ezek segítségével programozhatja saját Roomba programját a könyvtár funkciói segítségével. Ez az útmutató leírja, hogyan kell telepíteni a könyvtárakat, létrehozni egy mappát az összes kódhoz, és hogyan kell kódolni és használni az alább megadott programot.

Szükséges anyagok:

· Roomba

· MATLAB

· Raspberry Pi és Pi kamera

1. lépés: A könyvtárak beszerzése

A mérnöki webhelyen található egy eszköztár/könyvtár, töltse le és helyezze egy új mappába. Ennek a mappának tartalmaznia kell az összes projektmunkafájlt, mivel az Ön által készített programban használt bármely funkciónak hivatkoznia kell a könyvtárra. Miután ezt megtette, elkezdheti a programok kidolgozását

2. lépés: A programok írása

A programban jó néhány funkció használható, ezek a funkciók a "doc roomba" paranccsal érhetők el. Ezekkel a funkciókkal sokféleképpen vezérelheti Roomba -ját. Az alábbi kód különböző módon használja az ütésérzékelőket, a fénysáv érzékelőket, a kamerát és a sziklaérzékelőket egy marsjáró létrehozásához. Az ütésérzékelők segítségével észleltük, amikor a Roomba eltalál egy tárgyat, amikor ez megtörténik, a robot tolat, megfordul, és tovább mozog. Mielőtt a Roomba ütközik egy tárgyhoz, a fénysáv észleli az objektumot, és lelassítja a Roomba -t, hogy amikor a tárgyba ütközik, hogy aktiválja az ütésérzékelőt, a Roomba kevésbé sérüljön/legyen hatással az ütésre. A kamera vizet vagy lávát keres a felszínen, ha nem talál folyadékot, akkor a robot folytatja a keresést, ha talál vizet, akkor a robot üzenetet küld a kezelőknek. A sziklaérzékelőket úgy tervezték, hogy megállítsák a robotot, ha egy szikla felé közeledik. Ha a robot sziklát érzékel, megfordul, és megfordul, hogy elkerülje az esést.

3. lépés: Kód

Másolja és illessze be ezt a MATLAB fájlba, amely ugyanabban a mappában található, mint a könyvtárak

functionMainRoombaFile (r)

r.setDriveVelocity (0,1, 0,1)

míg igaz % Infinte while ciklus a kód futásához

dontFall = cliffCheck (r) % A "dontFall" változót a "cliffCheck" függvényhez rendeli

if dontFall % if utasítás, hogy folytassa a kódot a 'cliffCheck' befejezése után

r.setDriveVelocity (0,1, 0,1) % A Roomba mozgását tartja a „cliffCheck” befejezése után

end % befejezi a 'dontFall' if utasítást

lökhárító = bumpcheck (r) % Hozzárendeli a "lökhárító" változót a "bumpcheck" függvényhez

if lökhárító %, ha a „bumpcheck” befejezése után a kódban folytatandó utasítás

r.setDriveVelocity (0,1, 0,1) % A Roomba mozgását a „bumpcheck” befejezése után tartja

end % befejezi a "lökhárító" if utasítást

folyadékok = LiquidCheck (r) % Hozzárendeli a "folyadékok" változót a "LiquidCheck" függvényhez

ha folyadékok %, ha a „LiquidCheck” befejezése utáni kódkód folytatása

r.setDriveVelocity (0,1, 0,1) % A Roomba mozgását a „LiquidCheck” befejezése után tartja

end % befejezi a 'folyadékok' if utasítást

lightbumper = lightcheck (r) % A „lightbumper” változót hozzárendeli a „lightcheck” funkcióhoz

szünet (0,1) % Rövid szünet, hogy elkerüljük a folyamatos ciklus iterációt

end % végtelen ciklus vége

end % end függvény

function bumper = bumpcheck (r) % Létrehozza a "bumpcheck" függvényt

bumpdata = r.getBumpers % A lökhárító összes adatát a "bumpdata" változóhoz rendeli

lökhárító = bumpdata.right || bumpdata.left || bumpdata.front % Létrehoz egy változót, "lökhárítót" a különböző ütközőkhöz

if bumpdata.right> 0 % Ha az állítás a roomba különböző funkcióit okozza, ha a lökhárító ütközik

r.stop % Megáll a Roomba

r.moveDistance (-0,3, 0,2) % A Roomba 0,3 m tolatása

r.turnAngle (90, 0,5) % A Roomba -t a lehető leggyorsabban 90 fokkal elforgatja

vége

ha bumpdata.front> 0

r.megáll

r.moveDistance (-0,3, 0,2)

r.turnAngle (randi (270), 0,5) % A Roomba -t a lehető leggyorsabban elforgatja 0 és 270 fok közötti véletlenszerű időközönként

vége

ha bumpdata.bal> 0

r.megáll

r.moveDistance (-0,3, 0,2)

r.turnAngle (-90, 0,5) % A Roomba -90 fokkal a lehető leggyorsabban forog

vége

vége

funkció lightbumper = lightcheck (r) % Létrehozza a 'lightcheck' funkciót

lightdata = r.getLightBumpers % A fényütés -érzékelő összes adatát a „lightdata” változóhoz rendeli

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Létrehoz egy változót, a "lightbumper" -t a különböző lökhárítókhoz

ha lightbumper % If utasítás a lightbumper adatok felülről történő hívásához

if lightdata.left> 10 % Ha a kijelentés a roomba különböző funkcióinak bekövetkezését okozza, ha a lökhárító 10 értéknél nagyobb értékeket érzékel

r.setDriveVelocity (0,05, 0,05) % Lassítja a Roomba -t, hogy felkészüljön az ütközésre

end % befejezi a kezdeti if utasítást

ha lightdata.rightCenter> 10

r.setDriveVelocity (0,05, 0,05)

vége

ha lightdata.jobb> 10

r.setDriveVelocity (0,05, 0,05)

vége

ha a lightdata.leftCenter> 10

r.setDriveVelocity (0,05, 0,05)

vége

end % befejezi a 'lightbumper' if utasítást

end %befejezi a lightcheck funkciót

függvény dontFall = cliffCheck (r) % Létrehozza a "cliffCheck" függvényt

adatok = r.getCliffSensors; % A sziklaérzékelő összes adatát a „data” változóhoz rendeli

dontFall = adatok.bal <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Létrehoz egy "dontFall" tárolt változót a különböző sziklaérzékelőkhöz

if dontFall % If utasítás a sziklaérzékelő adatainak felülről történő meghívásához

if data.left <1010 % Ha az állítás a roomba különböző funkcióinak bekövetkezését okozza, ha a sziklaérzékelő 1010 -nél kisebb értékeket érzékel

r.megáll

r.moveDistance (-0,2, 0,2) % A Roomba 0,2 m tolatása

r.turnAngle (-90, 0,5) % A Roomba -90 fokkal a lehető leggyorsabban forog

elseif data.leftFront <1010

r.megáll

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % A Roomba -t a lehető leggyorsabban 90 fokkal elforgatja

elseif data.rightFront <1010

r.megáll

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % A Roomba -t a lehető leggyorsabban 90 fokkal elforgatja

elseif adatok.jog <1010

r.megáll

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % A Roomba -t a lehető leggyorsabban 90 fokkal elforgatja

vége

vége

vége

function folyadékok = LiquidCheck (r) % Létrehozza a 'LiquidCheck' függvényt

míg az igaz %végtelen ciklust indít a kalibráláshoz

img = r.getImage; % leolvassa a kamerát a robotról

image (img) % ábraablakban mutatja a képet

red_mean = átlag (átlag (img (200, 150, 1))))% a piros pixelek átlagos mennyiségét olvassa

blue_mean = átlag (átlag (img (200, 150, 3))))% a kék képpontok átlagos mennyiségét olvassa

folyadékok = red_mean || blue_mean % Létrehoz egy tárolt változót, "folyadékokat" a különböző színváltozókhoz

ha folyadékok % If utasítás a képadatok felülről történő meghívásához

if red_mean> 170 % Ha az állítás a roomba különböző funkcióinak bekövetkezését okozza, ha a fényképezőgép 170 -nél nagyobb átlagos vörös színt lát

r.stop % leállítja a Roomba -t

r.setLEDCenterColor (255) % pirosra állítja a kört

r.setLEDDigits (); % törölje a kijelzőt

f = waitbar (0, '*BEJÖVŐ ÜZENET*'); % létrehoz egy várakozó sávot a betöltő üzenethez

r.setLEDDigits ('HOT'); % a LED kijelzőt "HOT" kimenetre állítja

szünet (0,5) %Rövid szüneteltetés az elutasított információk olvasásához

r.setLEDDigits ('LAVA'); % beállítja a LED kijelzőt a „LAVA” kimenetre

szünet (0,5)

waitbar (.33, f, '*BEJÖVŐ ÜZENET*'); %növeli a várakozási sávot

r.setLEDDigits ('HOT');

szünet (0,5)

r.setLEDDigits ('LAVA');

szünet (0,5)

waitbar (.67, f, '*BEJÖVŐ ÜZENET*'); % növeli a várakozási sávot

r.setLEDDigits ('HOT');

szünet (0,5)

r.setLEDDigits ('LAVA');

waitbar (1, f, '*BEJÖVŐ ÜZENET*'); %befejezi a várakozási sort

szünet (1)

close (f) %bezárja a várakozó sávot

r.setLEDDigits (); % törli a LED kijelzőt

összes bezárása %Bezár minden korábbi ablakot

axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Törli a tengelyek és diagram diagramablakát

y = 0,5; % a szöveg y-pozícióját állítja be a nyomtatási ablakban

x = 0,06; A % a szöveg x-pozícióját állítja be a nyomtatási ablakban

title ('FROM MARS ROOMBA', 'fontsize', 32) % Címet ad a rajzolóablakhoz

quadeqtxt = 'VESZÉLY LÁVA'; % A 'quadeqtxt' változót 0 kimenetre állítja

szöveg (x, y, quadeqtxt, 'tolmács', 'latex', 'fontsize', 36); % megjeleníti a quadeq szöveget az ábrázolási ablakban

r.moveDistance (-0,2, 0,2) %megfordítja a roomba 0,2 m-t

r.turnAngle (180, 0,5) %a lehető leggyorsabban 180 fokkal elforgatja a szobát

r.setLEDCenterColor (128, 128); A % narancssárgára állítja a Roomba középső LED -ét

az összes bezárása %bezárja a nyitott ablakokat

elseif blue_mean> 175 % Ha ez az állítás a roomba különböző funkcióinak bekövetkezését okozza, ha a fényképezőgép 175 -nél nagyobb átlagos kék színt lát

r.stop % leállítja a Roomba -t

r.setLEDCenterColor (255) % pirosra állítja a kört

r.setLEDDigits (); % törölje a kijelzőt

f = waitbar (0, '*BEJÖVŐ ÜZENET*'); % létrehoz egy várakozó sávot a betöltő üzenethez

r.setLEDDigits ('LOOK'); % beállítja a LED kijelzőt a "LOOK" kimenetre

szünet (0,5) %Rövid szüneteltetés az elutasított információk olvasásához

r.setLEDDigits ('WATR'); % beállítja a LED kijelzőt a „WATR” kimenetre

szünet (0,5)

waitbar (.33, f, '*BEJÖVŐ ÜZENET*'); %növeli a várakozási sávot

r.setLEDDigits ('LOOK');

szünet (0,5)

r.setLEDDigits ('WATR');

szünet (0,5)

waitbar (.67, f, '*BEJÖVŐ ÜZENET*'); % növeli a várakozási sávot

r.setLEDDigits ('LOOK');

szünet (0,5)

r.setLEDDigits ('WATR');

waitbar (1, f, '*BEJÖVŐ ÜZENET*'); %befejezi a várakozási sort

szünet (1)

close (f) %bezárja a várakozó sávot

r.setLEDDigits (); % törli a LED kijelzőt

összes bezárása %Bezárja az összes korábbi ablakot

axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Törli a tengelyek és diagram diagramablakát

y = 0,5; % a szöveg y-pozícióját állítja be a nyomtatási ablakban

x = 0,06; A % a szöveg x-pozícióját állítja be a nyomtatási ablakban

title ('FROM MARS ROOMBA', 'fontsize', 32) % Címet ad a rajzolóablakhoz

quadeqtxt = 'TALÁLT VÍZ'; % A 'quadeqtxt' változót 0 kimenetre állítja

szöveg (x, y, quadeqtxt, 'tolmács', 'latex', 'fontsize', 36); % megjeleníti a quadeq szöveget az ábrázolási ablakban

r.moveDistance (-0,2, 0,2) %visszafordítja a roomba 0,2 m-t

r.turnAngle (180, 0,5) %a lehető leggyorsabban 180 fokkal elforgatja a szobát

r.setLEDCenterColor (128, 128); % narancssárgára állítja a roomba középső LED -ét

az összes bezárása %bezárja a nyitott ablakokat

end %befejezi a "red_mean" if utasítást

end %befejezi a 'folyadékok' if utasítást

end % végtelenül bezárja a ciklust

end % end funkció "LiquidCheck"

4. lépés: A kód futtatása

Miután lemásolta és beillesztette a kódot a MATLAB -ba, csatlakoznia kell a Roomba -hoz. A Roomba csatlakoztatása után el kell neveznie az r változót. A függvények az r változót használják, amikor a Roomba -ra hivatkoznak, ezért a Roomba -t r változóként kell definiálni. A kód futtatása után a Roomba az utasításoknak megfelelően fut.

Ajánlott: