Tartalomjegyzék:
- 1. lépés: A könyvtárak beszerzése
- 2. lépés: A programok írása
- 3. lépés: Kód
- 4. lépés: A kód futtatása
Videó: Mars Roomba Project UTK: 4 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
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:
A Roomba átalakítása Mars Roverré: 5 lépés
A Roomba átalakítása Mars Roverré:
Robotprojekt UTK 2017: 3 lépés
Robotprojekt UTK 2017: Küldetés: Mérnökeink csapatát a Froogle, a nyílt forráskódú technológiafejlesztés nonprofit alapítványa bérelte fel egy innovatív Human Assisting Mars Rover.-Out csapat " rover " egy roomba, amelyet egy sorozat végrehajtásához kódoltunk
Mars Rover a Raspberry Pi használatával: 5 lépés
Mars Rover a Raspberry Pi használatával: Kedves Nagy Tanuló! Mindig kíváncsi vagyok a Mars roverre, amelynek 6 kereke van, amelyek képesek a Mars minden felszínére eljutni és felfedezni a Földről származó dolgokat. Azt is szeretném felfedezni, hogy a laptopomon ülök. Úgyhogy most úgy érzem, itt az ideje, hogy elkészítsem és
Mars Roomba: 6 lépés
Mars Roomba: Ez az utasítás elvezeti Önt a Raspberry Pi vezérelt Roomba vákuum bot működtetésének irányaihoz. Az operációs rendszer, amelyet használni fogunk, a MATLAB
UTK EF 230 MarsRoomba Project 2018 ősz: 5 lépés
UTK EF 230 MarsRoomba Project 2018 ősz: Jelenleg a Mars rovereit különböző módszerek segítségével gyűjtik a Mars felszínén, és végső soron többet tanulnak a bolygó mikrobiális életben rejlő lehetőségeiről. A roverek elsősorban fényképészeti és talajelemző eszközöket használnak az adatokhoz