Obsah:
- Krok 1: Zhromaždite svoje materiály
- Krok 2: Stiahnite si sady nástrojov Roomba pre MATLAB
- Krok 3: Pripojte sa k robotu Roomba
- Krok 4: Vyberte si, ako chcete Roombu ovládať
- Krok 5: Odvezte si robot Roomba
Video: Premena vašej robota Roomba na vozítko Mars: 5 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
Krok 1: Zhromaždite svoje materiály
Na dokončenie tohto projektu budete potrebovať nasledujúce materiály:
1 robot Roomba
1 súprava Raspberry Pi
1 videokamera
Prístup k MATLABu
Krok 2: Stiahnite si sady nástrojov Roomba pre MATLAB
Spustite nasledujúci kód, aby ste nainštalovali potrebné sady nástrojov na dokončenie tohto projektu.
funkcia roombaInštalovať
clc;
% zoznam súborov na inštaláciu
files = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% umiestnenia, z ktorého sa má nainštalovať
options = weboptions ('CertificateFilename', ''); % povedzte, aby ignoroval požiadavky na certifikát
server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'Inštalácia/aktualizácia Roomba';
% účelu zobrazenia a získajte potvrdenie
prompt = {
„Tento program stiahne tieto súbory EF 230 Roomba:“
''
strjoin (súbory, '')
''
'do tohto priečinka:'
''
cd
''
'Chceš pokračovať? '
};
pípnutie;
yn = questdlg (prompt,…
dlgNázov,…
„Áno“, „Nie“, „Áno“);
if ~ strcmp (yn, 'Yes'), return; koniec
% získať zoznam existujúcich súborov
existing_files = súbory (bunková zábava (@exist, súbory)> 0);
ak ~ je prázdny (existujúce_súbory)
% uistite sa, že je skutočne v poriadku ich nahradiť
prompt = {'Nahrádzate tieto súbory:'
''
strjoin (existujúce_súbory, '')
''
„OK nahradiť?“
};
pípnutie;
yn = questdlg (prompt,…
dlgNázov,…
„Áno“, „Nie“, „Áno“);
if ~ strcmp (yn, 'Yes'), return; koniec
koniec
% stiahnuť súbory
cnt = 0;
pre i = 1: dĺžka (súbory)
f = súbory {i};
disp (['sťahovanie' f]);
skúsiť
url = [server f];
websave (f, URL, možnosti); % pridaných možností, aby sa predišlo chybám zabezpečenia
cnt = cnt + 1;
chytiť
disp (['Chyba pri sťahovaní' f]);
atrapa = [f '.html'];
ak existujú (atrapa, 'súbor') == 2
vymazať (atrapa)
koniec
koniec
koniec
ak cnt == dĺžka (súbory)
msg = 'Inštalácia bola úspešná';
čakať (msgbox (msg, dlgTitle));
inak
msg = 'Chyba inštalácie - podrobnosti nájdete v príkazovom okne';
čakať na (errordlg (msg, dlgTitle));
koniec
koniec %roombaInštalácia
Krok 3: Pripojte sa k robotu Roomba
Teraz je čas pripojiť sa k vášmu robotovi Roomba pomocou WiFi. Dvoma prstami súčasným stlačením tlačidiel Dock a Spot zapnite alebo resetujte robot Roomba. Ďalej spustite kód r = roomba (# vašej roboty Roomba) v príkazovom okne programu MATLAB a pripojte sa k svojmu robotovi. Akonáhle vykonáte tento príkaz, vaša Roomba by mala byť pripravená ísť.
Krok 4: Vyberte si, ako chcete Roombu ovládať
Roombu môžete ovládať dvoma spôsobmi: autonómne alebo pomocou smartfónu ako ovládača.
Ak sa rozhodnete riadiť Roombu autonómne, budete musieť použiť tri vstavané senzory: snímače útesu, snímače nárazov a svetelné senzory.
Ak chcete používať smartfón, najskôr ho musíte pripojiť k počítaču podľa nižšie uvedených krokov.
POZNÁMKA: Aby sa správne pripojili, váš počítač a smartfón musia byť v rovnakej sieti WiFi!
1. Stiahnite si aplikáciu MATLAB z obchodu s aplikáciami do svojho zariadenia.
2. Do príkazového okna zadajte príkaz „connector on“a zadajte heslo, ktoré bude potrebné zadať do oboch zariadení.
3. Potom vám MATLAB poskytne IP adresu vášho počítača. Musíte ísť na stránku nastavení v aplikácii MATLAB vo svojom smartfóne a pridať počítač pomocou danej IP adresy a hesla, ktoré ste zadali predtým.
4. Do príkazového okna na počítači zadajte kód m = mobiledev a tým by sa mal váš smartphone inicializovať ako ovládač vašej robota Roomba.
5. Váš počítač a smartphone by mali byť pripravené.
Krok 5: Odvezte si robot Roomba
Teraz, keď máte všetky potrebné nástroje na vytvorenie svojho Mars Rover, ste pripravení vytvoriť si vlastný kód. Nižšie sme pripojili príklad kódu pre autonómnu jazdu a jazdu ovládanú smartfónom.
Autonómne riadenie
funkcia Explore_modified (r)
%vstupných argumentov: 1 objekt roomba, r
Argumenty %výstupu: žiadne
%popis:
Funkcia %využíva autonómnu nekonečnú slučku while
%prieskum okolia robota.
%
%funciton tiež poskytuje roombau pokyny, čo robiť
%nasledujúce situácie: Kolesá stratia kontakt s vozovkou, an
%objektu je detegovaný pred alebo po oboch stranách robota a
%náhly pokles je detekovaný pred alebo po oboch stranách robota.
%
%typické pokyny obsahujú pohybové príkazy určené na maximalizáciu
%prieskumu alebo sa vyhnúť zistenému nebezpečenstvu a príkazom na komunikáciu
%informácií týkajúcich sa objavov robotov (obrázky), polohy (graf), %a uveďte (uviaznuté upozornenie) s používateľom prostredníctvom matlabu a/alebo e -mailu. Niekoľko
%zvukových príkazov je pridaných pre potešenie.
%možnosti nastavenia e -mailu
mail = '[email protected]';
heslo = 'EF230Roomba';
setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com');
setpref ('Internet', 'E_mail', pošta);
setpref ('Internet', 'SMTP_Username', mail);
setpref ('Internet', 'SMTP_Password', heslo);
props = 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 = roomba (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;
odrážať_datum = 2700; %nastavenej referenčnej hodnoty senzorov útesu
lightBumper_datum = 200; %nastaveného svetla Referenčná hodnota senzorov nárazníka
pos = [0, 0]; Premenná %pre ukladanie polohy s inicializovaným nulovým bodom
uhol = 0; %nastaveného referenčného uhla
netangle = 0; %čistého posunu uhla
i = 2; %iterátor na pridávanie riadkov do premennej ukladania pozícií
dist = 0;
r.setDriveVelocity (v, v); %naštartujte roomba dopredu
kým je to pravda
Cliff = r.getCliffSensors;
Bump = r.getBumpers;
Svetlo = r.getLightBumpers;
RandAngle = randi ([20, 60], 1); %generuje 1 náhodný uhol medzi 20 a 60 stupňami. Používa sa na zabránenie uviaznutiu robota v slučke
%Čo robiť, ak jedno alebo viac kolies stratí kontakt so zemou:
%zastavte pohyb, pošlite varovný e -mail s obrázkom okolia, %a spýtajte sa používateľa, či má pokračovať, alebo čakať na pomoc
ak Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
r.stop
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
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, 'stick.png');
%--------------------------
imfile = 'stick.png';
pozícia = savepos (pos);
%---------------------------
sendmail (mail, 'POMOC!', 'uviazol som na útese!', {imfile, position})
list = {'Pokračovať', 'Zastaviť'};
idx = menu ('Čo mám robiť?', zoznam);
ak idx == 2
prestávka
koniec
%Čo robiť, ak je pred robotom zistený objekt:
%zastavte, vráťte sa, odfoťte, upozornite užívateľa na objav
%e -mailom, otočte o 90 stupňov a pokračujte v skúmaní
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); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
i = i+1;
r.píp ('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')
img = r.getImage;
imwrite (img, 'FrontBump.png')
%--------------------------
imfile = 'FrontBump.png';
pozícia = savepos (pos);
%---------------------------
sendmail (mail, 'Upozornenie!', 'Niečo som našiel!', {imfile, position})
uhol = 90;
netangle = netangle+uhol;
r.turnAngle (uhol);
r.setDriveVelocity (v, v);
%Čo robiť, ak je naľavo od robota zistený objekt:
%zastavenie, otočenie k objektu, zálohovanie, fotografovanie, upozornenie
%používateľov objavovania prostredníctvom e -mailu, otočte sa o 90 stupňov a pokračujte v skúmaní
elseif Light.leftFront> lightBumper_datum || Light.left> lightBumper_datum || Bump.left == 1
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
i = i+1;
uhol = 30;
netangle = netangle+uhol;
r.turnAngle (uhol);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
i = i+1;
r.píp ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getImage;
imwrite (obr., 'LeftBump.png')
%--------------------------
imfile = 'LeftBump.png';
pozícia = savepos (pos);
%---------------------------
sendmail (mail, 'Upozornenie!', 'Niečo som našiel!', {imfile, position})
uhol = -90;
netangle = netangle+uhol;
r.turnAngle (uhol);
r.setDriveVelocity (v, v);
%Čo robiť, ak je objekt detekovaný napravo od robota:
%zastavenie, otočenie k objektu, zálohovanie, fotografovanie, upozornenie
%používateľov objavovania prostredníctvom e -mailu, otočte sa o 90 stupňov a pokračujte v skúmaní
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); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
i = i+1;
uhol = -30;
netangle = netangle+uhol;
r.turnAngle (uhol);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
i = i+1;
pauza (1,5);
r.beep ('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getImage;
imwrite (img, 'RightBump.png')
%--------------------------
imfile = 'RightBump.png';
pozícia = savepos (pos);
%---------------------------
sendmail (mail, 'Upozornenie!', 'Niečo som našiel!', {imfile, position});
uhol = 90;
netangle = netangle+uhol;
r.turnAngle (uhol);
r.setDriveVelocity (v, v);
%Čo robiť, ak je vľavo od robota zistený útes:
%zastavenie, pohyb dozadu, odbočenie doprava, pokračovanie v skúmaní
elseif Cliff.left <reflect_datum || Cliff.leftFront <odrážať_datum
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získať x súradnice
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %get y coordinate
i = i+1;
uhol = -RandAngle;
netangle = netangle+uhol;
r.turnAngle (uhol);
r.setDriveVelocity (v, v);
%Čo robiť, ak je vpravo od robota zistený útes:
%zastavenie, pohyb dozadu, odbočenie doľava, pokračovanie v skúmaní
elseif Cliff.right <reflect_datum || Cliff.rightFront <reflect_datum
r.stop;
dist = r.getDistance;
pos (i, 1) = dist * sind (uhol); %získať x súradnice
pos (i, 2) = dist * cosd (uhol); %get y coordinate
i = i+1;
r.moveDistance (-. 125);
uhol = RandAngle;
netangle = netangle+uhol;
r.turnAngle (uhol);
r.setDriveVelocity (v, v);
koniec
koniec
Ovládač smartfónu
Options = {'Autonomous', 'Manual Control'}
Prompt = menu ('Ako by ste chceli ovládať vozítko?', Možnosti)
m = mobiledev
r = roomba (19)
ak Výzva == 1
Preskúmať (r)
inak
kým je to pravda
pauza (.5)
PhoneData = m. Orientácia;
Azi = PhoneData (1);
Rozteč = údaje o telefóne (2);
Strana = údaje o telefóne (3);
ak Strana> 130 || Strana <-130 %, ak je telefón otočený tvárou nadol, zastaví robota Roomba a výjazdovú slučku
r.stop
r.beep ('C, C, C, C')
prestávka
elseif Strana> 25 && Strana <40 %, ak je telefón otočený nabok medzi 25 a 40 stupňami, otočte doľava o 5 stupňov
r.turnAngle (-5);
elseif Strana> 40 %, ak je telefón otočený nabok o 40 stupňov, otočte doľava o 45 stupňov
r.turnAngle (-45)
elseif Strana -40 %, ak je telefón otočený nabok medzi -25 a -40 °, otočte doprava o 5 °
r.turnAngle (5);
elseif Strana <-40 %, ak je telefón otočený nabok menej ako -40 stupňov, otočte doľava o 45 stupňov
r.turnAngle (45)
koniec
%Ak sa telefón drží v blízkosti vertikály, urobte obrázok a vykreslite ho
ak je rozteč <-60 && image <= 9
r.píp
img = r.getImage;
podkres (3, 3, obrázok)
imshow (img)
koniec
%pohyb dopredu a dozadu na základe prednej a zadnej orientácie
ak je rozstup> 15 && rozstup <35 %, ak je rozstup medzi 15 a 35 stupňami, pohybuje sa dopredu na krátku vzdialenosť
%získajte údaje o ľahkom nárazníku pred pohybom
litBump = r.getLightBumpers;
ak litBump.leftFront> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %, ak je niečo pred roomba a zasiahne, ak sa pohne dopredu, vydá zvuk a zobrazí správu
r.beep ('C ^^, F#^, C ^^, F#^')
inak %hýbať
r.moveDistance (.03);
%Získajte údaje o nárazníku po presune
Bump = r.getBumpers;
ak Bump.right == 1 || Bump.left == 1 || Bump.front == 1
r.beep („A, C, E“)
r.moveDistance (-. 01)
koniec
%získať údaje senzora útesu
Cliff = r.getCliffSensors;
ak Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, ak niečo spustí snímač útesu, považujte to za lávu a zálohujte
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 031)
koniec
koniec
elseif Rozteč> 35 %, ak je rozteč väčšia 35 stupňov, posuňte sa dopredu na väčšiu vzdialenosť
%získajte údaje o ľahkom nárazníku pred pohybom
litBump = r.getLightBumpers;
ak litBump.leftFront> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %, ak je niečo pred roomba a zasiahne, ak sa pohne dopredu, vydá zvuk a zobrazí správu
r.beep ('C ^^, F#^, C ^^, F#^')
inak %hýbať
r.moveDistance (.3)
%Získajte údaje o nárazníku po presune
Bump = r.getBumpers;
ak Bump.right == 1 || Bump.left == 1 || Bump.front == 1 %, ak na niečo narazíte, vydáte hluk, zobrazí správu a zálohuje sa
r.beep („A, C, E“)
r.moveDistance (-. 01)
koniec
%získať údaje senzora útesu po presune
Cliff = r.getCliffSensors;
ak Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, ak niečo spustí snímač útesu, považujte to za lávu a zálohujte
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 31)
koniec
koniec
elseif Rozteč -35 %, ak je rozstup medzi -15 a -35 °, pohybuje sa späť na krátku vzdialenosť
r.moveDistance (-. 03);
%získať údaje senzora útesu po presune
Cliff = r.getCliffSensors;
ak Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, ak niečo spustí snímač útesu, považujte to za lávu a zálohujte
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.04)
koniec
elseif Rozteč -60 %, ak je rozstup medzi -35 a -60 stupňov, posuňte sa späť na väčšiu vzdialenosť
r.moveDistance (-. 3)
%získať údaje senzora útesu po presune
Cliff = r.getCliffSensors;
ak Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, ak niečo spustí snímač útesu, považujte to za lávu a zálohujte
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.31)
koniec
koniec
koniec
koniec
Odporúča:
Premena žiarovky 230 V AC na USB! 6 krokov (s obrázkami)
Konvertovanie žiarovky 230 V AC na USB!: Na eBay som narazil na tieto úhľadné žiarovky s efektom plameňa, ktoré blikajú a majú v sebe zabudovanú jemnú animáciu. Obvykle sú napájané sieťovým vstupom 85-265 V striedavého prúdu, ale pre prenosné aplikácie, ako je falošná horiaca lampa alebo lampa to nie je ideálne. Upravujem
Výstraha pred vodou - zariadenie na záchranu vašej lode: 5 krokov (s obrázkami)
Výstraha pred vodou - zariadenie na záchranu vašej lode: Ak ste majiteľom lode, je tu konečne pohodlie dostať loď na suchú zem. Nemôže sa tam potopiť. Všade inde stojí pred neustálou bitkou o prekonanie tendencie vkĺznuť pod vlny a zmiznúť. Cez zimu tu na Aljaške
Eyeballing Predpis vašej očnej bulvy: projekt BME60B: 9 krokov
Predĺženie očnej bulvy: Projekt BME60B: Autor: Hannah Silos, Sang Hee Kim, Thomas Vazquez, Patrick Viste Podľa Michiganskej technologickej univerzity je dioptria jedným z
Premena trojfarebnej LED myši: 5 krokov
Trojfarebná úprava myši LED: Vymeňte nudnú červenú diódu LED za myš za trojfarebnú blikajúcu farebnú diódu LED na cyklovanie. Poznámka: táto náhrada je za LED diódy používané na osvetlenie konca myši, na opitálnej myši ostatné LED v strede, ktoré sme použili na sledovanie, nevymieňajte
Premena systému Windows XP alebo Vista na počítače Mac a Linux: 10 krokov
Premena systému Windows XP alebo Vista na počítače Mac a Linux: Tento návod vám ukáže, ako zmeniť počítač so systémom Windows na počítače Mac a PC a tiež spustiť systém Linux. - Odporúčam, aby ste mali aspoň 2 GB pamäte RAM - a viac ako 10 GB miesta na pevnom disku (ak chcete linux) odporúča sa Vista alebo XP - robím to