Tartalomjegyzék:
- Lépés: Gyűjtse össze anyagait
- 2. lépés: Töltse le a Roomba eszköztárait a MATLAB számára
- 3. lépés: Csatlakozás a Roomba -hoz
- 4. lépés: Válassza ki, hogyan szeretné irányítani a Roomba -t
- 5. lépés: Vezesse a Roomba -t
Videó: A Roomba átalakítása Mars Roverré: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Lépés: Gyűjtse össze anyagait
A projekt befejezéséhez a következő anyagokat kell összegyűjtenie:
1 Roomba robot
1 Raspberry Pi készlet
1 Videokamera
Hozzáférés a MATLAB -hoz
2. lépés: Töltse le a Roomba eszköztárait a MATLAB számára
Futtassa a következő kódot a projekt befejezéséhez szükséges eszköztárak telepítéséhez.
funkció roombaTelepítés
clc;
% telepítendő fájlok listája
files = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% telepítési hely
options = weboptions ('CertificateFilename', ''); % azt mondja, hogy figyelmen kívül hagyja a tanúsítvány követelményeit
szerver = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'Roomba telepítése/frissítése';
% megjelenítési cél, és kap megerősítést
prompt = {
'Ez a program letölti ezeket az EF 230 Roomba fájlokat:'
''
strjoin (fájlok, "")
''
'ebbe a mappába:'
''
CD
''
'Akarod folytatni? '
};
hangjelzés;
yn = questdlg (gyors,…
dlgCím,…
„Igen”, „Nem”, „Igen”);
ha ~ strcmp (yn, 'Igen'), vissza; vége
% get a létező fájlok listája
létező_fájlok = fájlok (cellfun (@exist, files)> 0);
ha ~ üres (létező_fájlok)
% győződjön meg arról, hogy valóban rendben van -e kicserélni őket
prompt = {'Ezeket a fájlokat cseréli le:'
''
strjoin (létező_fájlok, "")
''
- Rendben van cserélni?
};
hangjelzés;
yn = questdlg (gyors,…
dlgCím,…
„Igen”, „Nem”, „Igen”);
ha ~ strcmp (yn, 'Igen'), vissza; vége
vége
% töltse le a fájlokat
cnt = 0;
i = 1 esetén: hossz (fájlok)
f = fájlok {i};
disp (['Letöltés' f]);
próbáld ki
url = [f szerver];
webes mentés (f, url, opciók); % hozzáadott lehetőség a biztonsági hibák elkerülésére
cnt = cnt + 1;
fogás
disp (['Hiba a letöltéskor' f]);
dummy = [f '.html'];
ha létezik (dummy, 'file') == 2
törlés (dummy)
vége
vége
vége
ha cnt == hossz (fájlok)
msg = 'A telepítés sikeres';
waitfor (msgbox (msg, dlgTitle));
más
msg = 'Telepítési hiba - részletekért lásd a parancsablakot';
waitfor (errordlg (msg, dlgTitle));
vége
end %roombaInstall
3. lépés: Csatlakozás a Roomba -hoz
Most itt az ideje, hogy WiFi segítségével csatlakozzon a Roomba készülékéhez. A Roomba bekapcsolásához vagy alaphelyzetbe állításához két ujjal nyomja meg egyszerre a Dock és a Spot gombot. Ezután futtassa az r = roomba kódot (Roomba# -ja) a MATLAB parancsablakában, hogy csatlakozzon a robotjához. Miután végrehajtotta ezt a parancsot, a Roomba készen áll az indulásra.
4. lépés: Válassza ki, hogyan szeretné irányítani a Roomba -t
A Roomba kétféle módon vezérelhető: önállóan vagy okostelefon használatával vezérlőként.
Ha a Roomba autonóm vezetését választja, akkor a három beépített érzékelőt kell használnia: sziklaérzékelőket, ütésérzékelőket és fényérzékelőket.
Az okostelefon használatához először csatlakoztatnia kell okostelefonját a számítógéphez az alábbi lépések végrehajtásával.
MEGJEGYZÉS: A számítógép és az okostelefon ugyanazon a WiFi hálózaton kell, hogy legyen, hogy megfelelően csatlakozzon!
1. Töltse le a MATLAB alkalmazást a készülék alkalmazásboltjából.
2. A parancsablakba írja be a "connector on" parancsot, és állítson be jelszót, amelyet mindkét eszközbe be kell írni.
3. Ezt követően a MATLAB megadja a számítógép IP -címét. Be kell lépnie az okostelefon MATLAB alkalmazásának beállítási oldalára, és hozzá kell adnia egy számítógépet a megadott IP -cím és a korábban megadott jelszó használatával.
4. A számítógép parancsablakában írja be az m = mobiledev kódot, és ezzel inicializálja az okostelefont a Roomba vezérlőjeként.
5. A számítógépnek és az okostelefonnak most készen kell állnia a használatra.
5. lépés: Vezesse a Roomba -t
Most, hogy minden szükséges eszköze megvan a Mars Rover létrehozásához, készen áll a saját kód létrehozására. Az alábbiakban példakódot csatoltunk mind az autonóm vezetéshez, mind az okostelefonnal vezérelt vezetéshez.
Autonóm vezetés
függvény Explore_modified (r)
%bemeneti argumentum: 1 roomba objektum, r
%kimeneti argumentum: nincs
%leírás:
A %függvény végtelen, míg ciklusokat használ az autonóm használathoz
%feltárása a bot környezetének.
%
A %funciton utasításokat is ad a roomba -nak, hogy mit tegyen
%a következő helyzeteket: A kerekek elvesztik a kapcsolatot a talajjal, an
%objektumot észlel a bot előtt vagy mindkét oldalán, és a
%hirtelen esést észlel a bot előtt vagy mindkét oldalán.
%
A tipikus utasítások %tartalmaznak mozgásparancsokat, amelyek célja a maximalizálás
%felfedezés vagy az észlelt veszély elkerülése, és kommunikációs parancsok
%információ a botok felfedezéseiről (képek), pozíció (grafikon), %és állapot (szálkás figyelmeztetés) a felhasználóval matlab és/vagy e -mail útján. Számos
%hangparancsokat adunk hozzá az élvezethez.
%beállítási e -mail képességek
mail = '[email protected]';
jelszó = 'EF230Roomba';
setpref ('Internet', 'SMTP_szerver', 'smtp.gmail.com');
setpref ('Internet', 'E_mail', mail);
setpref ('Internet', 'SMTP_felhasználónév', mail);
setpref ('Internet', 'SMTP_Password', jelszó);
kellékek = java.lang. System.getProperties;
props.setProperty ('mail.smtp.starttls.enable', 'true');
props.setProperty ('mail.smtp.auth', 'true');
props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory');
props.setProperty ('mail.smtp.socketFactory.port', '465');
% r = szoba (19)
r.beep ('G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2 ^^, G1 ^^, E1 ^^, C2 ^^, C2 ^^, C1 ^^, C1 ^^, D1 ^^, C1 ^^, D2 ^^, E4 ^^, G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2 ^^, G1 ^^, E1 ^^, C2 ^^, C2 ^^, C2 ^^, E1 ^^, E1 ^^, E1 ^^, D1 ^^, C4 ^^ ');
v =.1;
tükrözi_adat = 2700; %sziklaérzékelő referenciaérték beállítása
lightBumper_datum = 200; %beállított fény Lökhárító érzékelők referencia értéke
poz = [0, 0]; %változó a pozíció tárolásához, nullapont inicializálva
szög = 0; %beállított referenciaszög
netangle = 0; %nettó szög -elmozdulás
i = 2; %iterátor sorok hozzáadásához a pozíciótároló változóhoz
dist = 0;
r.setDriveVelocity (v, v); %start roomba halad előre
míg igaz
Cliff = r.getCliffSensors;
Bump = r.getBumpers;
Fény = r.getLightBumpers;
RandAngle = randi ([20, 60], 1); %1 véletlenszerű szöget hoz létre 20 és 60 fok között. Arra használják, hogy a bot ne ragadjon bele a hurokba
%Mi a teendő, ha egy vagy több kerék elveszíti a kapcsolatot a talajjal:
%mozgás leállítása, figyelmeztető e -mail küldése a környezet képével, %és kérdezze meg a felhasználót, hogy folytassa -e vagy várja a segítséget
ha Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
r.megáll
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
r.beep ('F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^ ')
img = r.getImage;
imwrite (img, 'ragadt.png');
%--------------------------
imfile = 'ragadt.png';
pozíció = savepos (pos);
%---------------------------
sendmail (mail, 'SEGÍTSÉG!', 'Egy sziklán rekedtem!', {imfile, position})
list = {'Folytatás', 'Leállítás'};
idx = menu ('Mit tegyek?', lista);
ha idx == 2
szünet
vége
%Mi a teendő, ha objektumot észlel a bot előtt:
%megállás, visszalépés, kép készítése, figyelmeztetés a felfedezésre
%e -mailben, forduljon 90 fokkal, és folytassa a felfedezést
elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
r.beep ('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')
img = r.getImage;
imwrite (img, 'FrontBump.png')
%--------------------------
imfile = 'FrontBump.png';
pozíció = savepos (pos);
%---------------------------
sendmail (mail, 'Alert!', 'Találtam valamit!', {imfile, position})
szög = 90;
netangle = netangle+szög;
r.turnAngle (szög);
r.setDriveVelocity (v, v);
%Mi a teendő, ha objektumot észlel a bot bal oldalán:
%megállás, tárgy felé fordulás, biztonsági mentés, kép készítése, riasztás
%felhasználó a felfedezés e -mailben, forduljon 90 fokkal, és folytassa a felfedezést
elseif Light.leftFront> lightBumper_datum || Fény.bal> lightBumper_datum || Bump.left == 1
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
szög = 30;
netangle = netangle+szög;
r.turnAngle (szög);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
r.beep ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getImage;
imwrite (img, 'LeftBump.png')
%--------------------------
imfile = 'LeftBump.png';
pozíció = savepos (pos);
%---------------------------
sendmail (mail, 'Alert!', 'Találtam valamit!', {imfile, position})
szög = -90;
netangle = netangle+szög;
r.turnAngle (szög);
r.setDriveVelocity (v, v);
%Mi a teendő, ha objektumot észlel a bot jobb oldalán:
%megállás, tárgy felé fordulás, biztonsági mentés, kép készítése, riasztás
%felhasználó a felfedezés e -mailben, forduljon 90 fokkal, és folytassa a felfedezést
elseif Light.rightFront> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
szög = -30;
netangle = netangle+szög;
r.turnAngle (szög);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
szünet (1.5);
r.beep ('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getImage;
imwrite (img, 'RightBump.png')
%--------------------------
imfile = 'RightBump.png';
pozíció = savepos (pos);
%---------------------------
sendmail (mail, 'Alert!', 'Találtam valamit!', {imfile, position});
szög = 90;
netangle = netangle+szög;
r.turnAngle (szög);
r.setDriveVelocity (v, v);
%Mi a teendő, ha sziklát észlel a bot bal oldalán:
%stop, mozogjon hátra, forduljon jobbra, folytassa a felfedezést
elseif Cliff.left <tükrözi_adat || Cliff.leftFront <tükrözi_datum
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %kap x koordinátát
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %kap y koordinátát
i = i+1;
szög = -RandAngle;
netangle = netangle+szög;
r.turnAngle (szög);
r.setDriveVelocity (v, v);
%Mi a teendő, ha sziklát észlel a bot jobb oldalán:
%stop, mozogjon hátra, forduljon balra, folytassa a felfedezést
elseif Cliff.right <tükrözi_datum || Cliff.rightFront <tükrözi_datum
r.stop;
dist = r.getDistance;
pos (i, 1) = dist * sind (szög); %kap x koordinátát
pos (i, 2) = dist * cosd (szög); %kap y koordinátát
i = i+1;
r.moveDistance (-. 125);
szög = RandAngle;
netangle = netangle+szög;
r.turnAngle (szög);
r.setDriveVelocity (v, v);
vége
vége
Okostelefon vezérlő
Beállítások = {'Autonóm', 'Kézi vezérlés'}
Prompt = menu ('Hogyan szeretné irányítani a rovert?', Beállítások)
m = mobiledev
r = roomba (19)
ha gyors == 1
Felfedező)
más
míg igaz
szünet (.5)
PhoneData = m. Orientation;
Azi = Telefonadatok (1);
Hangmagasság = Telefonadatok (2);
Oldal = Telefonadatok (3);
ha az oldal> 130 || Oldala <-130 %, ha a telefont lefelé fordítja, állítsa le a Roomba-t és lépjen ki
r.megáll
r. hangjelzés ('C, C, C, C')
szünet
elseif Oldala> 25 && Oldala <40 %, ha a telefont 25 és 40 ° között oldalra fordítja, forduljon balra 5 ° -kal
r.fordulószög (-5);
elseif Oldala> 40 %, ha a telefont oldalra fordítva 40 ° -kal balra 45 ° -kal fordul
r.turnAngle (-45)
elseif Oldalsó -40 %, ha a telefont oldalra fordítja -25 és -40 fok között, forduljon jobbra 5 fokkal
r.fordulószög (5);
elseif Oldala <-40 %, ha a telefont oldalra fordítva kevesebb, mint -40 ° fordul balra 45 °
r.turnAngle (45)
vége
%Ha a telefont függőleges közelében tartja, készítsen egy képet, és rajzolja meg
ha Pitch <-60 && image <= 9
r. sípolás
img = r.getImage;
alterület (3, 3, kép)
imshow (img)
vége
%előre és hátra mozog az elülső és hátsó tájolás alapján
ha Pitch> 15 && Pitch <35 %, ha 15 és 35 ° közötti dőlésszög halad előre rövid távolságra
%kap könnyű lökhárító adatokat mozgás előtt
litBump = r.getLightBumpers;
ha világítBump.leftFront> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %, ha valami a roomba előtt van, és előreütéskor üt, zajt ad és üzenetet jelenít meg
r.beep ('C ^^, F#^, C ^^, F#^')
más %mozog
r.moveDistance (.03);
%Lökhárító adatok beszerzése költözés után
Bump = r.getBumpers;
ha Bump.jobb == 1 || Bump.left == 1 || Bump.front == 1
r. hangjelzés ('A, C, E')
r.moveDistance (-. 01)
vége
%kap sziklaérzékelő adatokat
Cliff = r.getCliffSensors;
ha Cliff.bal> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, ha valami kiváltja a sziklaérzékelőt, lávaként kezelje, és készítsen biztonsági másolatot
r. hangjelzés ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 031)
vége
vége
elseif Pitch> 35 %, ha a dőlésszög nagyobb, mint 35 °, lépjen előre hosszabb távolságra
%kap könnyű lökhárító adatokat mozgás előtt
litBump = r.getLightBumpers;
ha világítBump.leftFront> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %, ha valami a roomba előtt van, és ütés esetén előrehaladáskor zajt ad és üzenetet jelenít meg
r.beep ('C ^^, F#^, C ^^, F#^')
más %mozog
r.moveDistance (.3)
%Lökhárító adatok beszerzése költözés után
Bump = r.getBumpers;
ha Bump.jobb == 1 || Bump.left == 1 || Bump.front == 1 %, ha valamit eltalál, hangot ad, üzenetet jelenít meg, és biztonsági másolatot készít
r. hangjelzés ('A, C, E')
r.moveDistance (-. 01)
vége
%kap sziklaérzékelő adatokat költözés után
Cliff = r.getCliffSensors;
ha Cliff.bal> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, ha valami kiváltja a sziklaérzékelőt, lávaként kezelje, és készítsen biztonsági másolatot
r. hangjelzés ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 31)
vége
vége
elseif Pitch -35 %, ha a dőlésszög -15 és -35 fok között mozog vissza
r.moveDistance (-. 03);
%kap sziklaérzékelő adatokat költözés után
Cliff = r.getCliffSensors;
ha Cliff.bal> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, ha valami kiváltja a sziklaérzékelőt, lávaként kezelje, és készítsen biztonsági másolatot
r. hangjelzés ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.04)
vége
elseif Pitch -60 %, ha a -35 és -60 ° közötti dőlésszög hosszabb távolságra lép vissza
r.moveDistance (-. 3)
%kap sziklaérzékelő adatokat költözés után
Cliff = r.getCliffSensors;
ha Cliff.bal> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, ha valami kiváltja a sziklaérzékelőt, lávaként kezelje, és készítsen biztonsági másolatot
r. hangjelzés ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.31)
vége
vége
vége
vége
Ajánlott:
Régi hangszóró átalakítása Bluetooth Boomboxra: 8 lépés (képekkel)
Régi hangszóró átalakítás Bluetooth Boombox -ra: HI mindenkinek! Nagyon köszönöm, hogy velem hangoltál ezen a konstrukción! Mielőtt belevágnánk a részletekbe, kérjük, szavazzon erre az Instructable -re a verseny alján. A támogatást nagyra értékelik! Néhány év telt el azóta, hogy elkezdtem
A Logitech 3D Extreme Pro Hall Effect szenzor átalakítása: 9 lépés
A Logitech 3D Extreme Pro Hall Effect szenzor átalakítása: A botkormány kormányzása kialudt. Próbáltam szétszedni az edényeket és tisztítani, de nem igazán segített. Elkezdtem tehát a cserépedényeket keresni, és néhány évvel ezelőtti különböző webhelyekre bukkantam, amelyek utalnak
A hűtő és a hűtő átalakítása: 6 lépés
Convertir Un Cooler En Anemómetro: Construir un anemómetro que nos permite medir la velocidad del viento de forma casera es posible ingeniando el uso de algunos artefactos de los que disponemos en casa, y los cuales se les pueda dar un nuevo uso (como el cooler de unjojo gabinete d
Mars Roomba Project UTK: 4 lépés
Mars Roomba Project UTK: NYILATKOZAT: EZ CSAK MŰKÖDIK, HA A ROOMBA NAGYON MEGHATÁROZOTT módon van beállítva, EZT AZ INSTRUKCIÓT LÉTREHOZTATTÁK ÉS SZÁNDÉKOLTÁK A TENNESSEE DIÁK UNIVERSITÁJA ÉS A FACULTY Ez a kód a beállításhoz használatos írt és 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