Obsah:
- Krok 1: Shromážděte své materiály
- Krok 2: Stáhněte si Roomba Toolboxes pro MATLAB
- Krok 3: Připojte se k zařízení Roomba
- Krok 4: Vyberte si, jak chcete robot Roomba ovládat
- Krok 5: Drive Your Roomba
Video: Proměna Roomby v Mars Rover: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
Krok 1: Shromážděte své materiály
K dokončení tohoto projektu budete potřebovat shromáždit následující materiály:
1 robot Roomba
1 sada Raspberry Pi
1 videokamera
Přístup k MATLABu
Krok 2: Stáhněte si Roomba Toolboxes pro MATLAB
Spuštěním následujícího kódu nainstalujete potřebné sady nástrojů k dokončení tohoto projektu.
funkce roombaInstall
clc;
% seznam souborů k instalaci
files = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% umístění pro instalaci
options = weboptions ('CertificateFilename', ''); % řekněte, aby ignoroval požadavky na certifikát
server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'Instalace/aktualizace Roomba';
% účel zobrazení a získání potvrzení
výzva = {
"Tento program stáhne tyto soubory EF 230 Roomba:"
''
strjoin (soubory, '')
''
'do této složky:'
''
CD
''
'Chceš pokračovat? '
};
pípnutí;
yn = questdlg (výzva,…
dlgTitle,…
„Ano“, „Ne“, „Ano“);
if ~ strcmp (yn, 'Yes'), return; konec
% získat seznam existujících souborů
existing_files = soubory (cellfun (@exist, files)> 0);
if ~ isempty (existing_files)
% ujistěte se, že je opravdu v pořádku je vyměnit
prompt = {'Nahrazujete tyto soubory:'
''
strjoin (existing_files, '')
''
„OK vyměnit?“
};
pípnutí;
yn = questdlg (výzva,…
dlgTitle,…
„Ano“, „Ne“, „Ano“);
if ~ strcmp (yn, 'Yes'), return; konec
konec
% stáhněte soubory
cnt = 0;
pro i = 1: délka (soubory)
f = soubory {i};
disp (['Stahování' f]);
Snaž se
url = [server f];
websave (f, URL, možnosti); % přidané možnosti, aby se zabránilo chybám zabezpečení
cnt = cnt + 1;
úlovek
disp (['Chyba při stahování' f]);
atrapa = [f '.html'];
pokud existují (figurína, 'soubor') == 2
odstranit (figurína)
konec
konec
konec
if cnt == délka (soubory)
msg = 'Instalace proběhla úspěšně';
waitfor (msgbox (msg, dlgTitle));
jiný
msg = 'Chyba instalace - podrobnosti najdete v příkazovém okně';
waitfor (errordlg (msg, dlgTitle));
konec
konec %roombaInstall
Krok 3: Připojte se k zařízení Roomba
Nyní je čas připojit se k vašemu Roomba pomocí WiFi. Pomocí 2 prstů současným stisknutím tlačítek Dock a Spot zapněte nebo resetujte robot Roomba. Poté spusťte kód r = roomba (# vašeho Roomba) v příkazovém okně MATLABu a připojte se k robotovi. Jakmile tento příkaz provedete, robot Roomba by měl být připraven jít.
Krok 4: Vyberte si, jak chcete robot Roomba ovládat
Roombu můžete ovládat dvěma způsoby: autonomně nebo pomocí smartphonu jako ovladače.
Pokud se rozhodnete řídit Roombu autonomně, budete muset použít tři vestavěné senzory: senzory útesu, senzory nárazu a světelné senzory.
Abyste mohli používat smartphone, musíte jej nejprve připojit k počítači podle níže uvedených kroků.
POZNÁMKA: Aby se počítač správně připojil, musí být váš počítač a smartphone ve stejné síti WiFi!
1. Stáhněte si aplikaci MATLAB z obchodu s aplikacemi ve vašem zařízení.
2. Do příkazového okna zadejte „connector on“a nastavte heslo, které bude nutné zadat do obou zařízení.
3. Poté vám MATLAB přidělí IP adresu vašeho počítače. V chytrém telefonu musíte přejít na stránku nastavení v aplikaci MATLAB a přidat počítač pomocí dané IP adresy a hesla, které jste zadali dříve.
4. Do příkazového okna v počítači zadejte kód m = mobiledev a měl by se váš smartphone inicializovat jako ovladač pro váš robot Roomba.
5. Váš počítač a smartphone by měly být připraveny.
Krok 5: Drive Your Roomba
Nyní, když máte všechny potřebné nástroje k vytvoření svého Mars Rover, jste připraveni vytvořit si vlastní kód. Níže jsme připojili příklad kódu jak pro autonomní řízení, tak pro řízení pomocí smartphonu.
Autonomní řízení
funkce Explore_modified (r)
%vstupních argumentů: 1 objekt roomba, r
Argumenty %výstupu: žádné
%popis:
Funkce %využívá nekonečnou smyčku, která umožňuje autonomii
%průzkum okolí robota.
%
%funciton také poskytuje roomba instrukce, co dělat
%následující situace: Kolo (kola) ztratí (y) kontakt se zemí, an
%objektu je detekován před nebo po obou stranách robota a
%náhlého pádu je detekováno před nebo na obou stranách robota.
%
%typické pokyny obsahují pohybové příkazy určené k maximalizaci
%průzkumu nebo zamezení detekovaného nebezpečí a příkazů ke komunikaci
%informací týkajících se objevů robotů (obrázky), pozice (graf), %a stav (upozornění na lanko) s uživatelem prostřednictvím matlabu a/nebo e -mailu. Několik
Pro radost je přidáno %zvukových příkazů.
%nastavení možností e -mailu
mail = '[email protected]';
heslo = 'EF230Roomba';
setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com');
setpref ('Internet', 'E_mail', pošta);
setpref ('Internet', 'SMTP_Uživatelské jméno', pošta);
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;
reflect_datum = 2700; %nastavené referenční hodnoty snímačů útesu
lightBumper_datum = 200; %nastavené světlo Referenční hodnota čidel nárazníku
pos = [0, 0]; Proměnná %pro uložení polohy s inicializovaným vztažným bodem
úhel = 0; %nastavený referenční úhel
netangle = 0; %čistého úhlového posunutí
i = 2; %iterátor pro přidávání řádků do proměnné úložiště pozic
dist = 0;
r.setDriveVelocity (v, v); %spusťte roomba vpřed
zatímco pravda
Cliff = r.getCliffSensors;
Bump = r.getBumpers;
Light = r.getLightBumpers;
RandAngle = randi ([20, 60], 1); %generuje 1 náhodný úhel mezi 20 a 60 stupni. Používá se k zabránění uvíznutí robota ve smyčce
%Co dělat, když jedno nebo více kol ztratí kontakt se zemí:
%zastavte pohyb, pošlete varovný e -mail s obrázkem okolí, %a zeptejte se uživatele, zda má pokračovat, nebo počkat na pomoc
pokud Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
r.stop
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
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';
pozice = savepos (pos);
%---------------------------
sendmail (mail, „POMOC!“, „Uvízl jsem na útesu!“, {imfile, position})
list = {'Pokračovat', 'Zastavit'};
idx = menu ('Co mám dělat?', seznam);
pokud idx == 2
přestávka
konec
%Co dělat, když je objekt detekován před robotem:
%stop, přesuňte se zpět, vyfoťte, upozorněte uživatele na objev
%e -mailem, otočte o 90 stupňů a pokračujte v průzkumu
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ískat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
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';
pozice = savepos (pos);
%---------------------------
sendmail (mail, 'Upozornění!', 'Něco jsem našel!', {imfile, pozice})
úhel = 90;
netangle = netangle+úhel;
r.turnAngle (úhel);
r.setDriveVelocity (v, v);
%Co dělat, když je vlevo od robota detekován objekt:
%zastavení, otočení směrem k objektu, zálohování, pořízení snímku, upozornění
%uživatelů objevů prostřednictvím e -mailu, otočte se o 90 stupňů a pokračujte v průzkumu
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ískat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
i = i+1;
úhel = 30;
netangle = netangle+úhel;
r.turnAngle (úhel);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
i = i+1;
r.píp ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getImage;
imwrite (img, 'LeftBump.png')
%--------------------------
imfile = 'LeftBump.png';
pozice = savepos (pos);
%---------------------------
sendmail (mail, 'Upozornění!', 'Něco jsem našel!', {imfile, pozice})
úhel = -90;
netangle = netangle+úhel;
r.turnAngle (úhel);
r.setDriveVelocity (v, v);
%Co dělat, když je objekt detekován vpravo od robota:
%zastavení, otočení směrem k objektu, zálohování, pořízení snímku, upozornění
%uživatelů objevů prostřednictvím e -mailu, otočte se o 90 stupňů a pokračujte v průzkumu
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ískat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
i = i+1;
úhel = -30;
netangle = netangle+úhel;
r.turnAngle (úhel);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
i = i+1;
pauza (1,5);
r.beep ('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getImage;
imwrite (img, 'RightBump.png')
%--------------------------
imfile = 'RightBump.png';
pozice = savepos (pos);
%---------------------------
sendmail (mail, 'Upozornění!', 'Něco jsem našel!', {imfile, pozice});
úhel = 90;
netangle = netangle+úhel;
r.turnAngle (úhel);
r.setDriveVelocity (v, v);
%Co dělat, když je nalevo od robota detekován útes:
%zastavení, pohyb dozadu, zahněte doprava, pokračujte v průzkumu
elseif Cliff.left <odrážející_datum || Cliff.leftFront <odrážející_datum
r.stop;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %získat x souřadnici
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %získejte souřadnici y
i = i+1;
úhel = -RandAngle;
netangle = netangle+úhel;
r.turnAngle (úhel);
r.setDriveVelocity (v, v);
%Co dělat, když je vpravo od robota detekován útes:
%zastavení, pohyb dozadu, zahněte doleva, pokračujte v průzkumu
elseif Cliff.right <odrážející_datum || Cliff.rightFront <odrážející_datum
r.stop;
dist = r.getDistance;
pos (i, 1) = dist * sind (úhel); %získat x souřadnici
pos (i, 2) = dist * cosd (úhel); %získejte souřadnici y
i = i+1;
r.moveDistance (-. 125);
úhel = RandAngle;
netangle = netangle+úhel;
r.turnAngle (úhel);
r.setDriveVelocity (v, v);
konec
konec
Ovladač smartphonu
Options = {'Autonomous', 'Manual Control'}
Prompt = menu ('Jak byste chtěli ovládat vozítko?', Možnosti)
m = mobiledev
r = roomba (19)
pokud Výzva == 1
Badatel)
jiný
zatímco pravda
pauza (.5)
PhoneData = m. Orientace;
Azi = PhoneData (1);
Rozteč = Data telefonu (2);
Strana = Data telefonu (3);
pokud Strana> 130 || Strana <-130 %, pokud je telefon převrácen lícem dolů, zastavte roombu a ukončete smyčku
r.stop
r.beep ('C, C, C, C')
přestávka
elseif Strana> 25 && Strana <40 %, pokud je telefon otočen na stranu mezi 25 a 40 stupni, otočte doleva o 5 stupňů
r.turnAngle (-5);
elseif Strana> 40 %, pokud je telefon otočen na stranu o více než 40 stupňů, otočte doleva o 45 stupňů
r.turnAngle (-45)
elseif Strana -40 %, pokud je telefon otočen na stranu mezi -25 a -40 stupňů, otočte doprava o 5 stupňů
r.turnAngle (5);
elseif Strana <-40 %, pokud je telefon otočen na stranu méně než -40 stupňů, otočte doleva o 45 stupňů
r.turnAngle (45)
konec
%Pokud je telefon držen v blízkosti svislice, pořiďte obrázek a vykreslete jej
pokud je rozteč <-60 && image <= 9
r. píp
img = r.getImage;
subplot (3, 3, obrázek)
imshow (obr.)
konec
%pohyb vpřed a vzad na základě přední a zadní orientace
pokud je rozteč> 15 && rozteč <35 %, pokud je rozteč mezi 15 a 35 stupni, pohybujte se vpřed na krátkou vzdálenost
%před přesunem získejte údaje o lehkém nárazníku
litBump = r.getLightBumpers;
pokud litBump.leftFront> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %, pokud je něco před roomba a zasáhne, pokud se pohne vpřed, vydá hluk a zobrazí zprávu
r.beep ('C ^^, F#^, C ^^, F#^')
jinak %tah
r.moveDistance (.03);
%Získejte údaje o nárazníku po přesunu
Bump = r.getBumpers;
pokud Bump.right == 1 || Bump.left == 1 || Bump.front == 1
r.beep ('A, C, E')
r.moveDistance (-. 01)
konec
%získat data senzoru útesu
Cliff = r.getCliffSensors;
pokud Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, pokud něco spustí snímač útesu, zacházejte s tím jako s lávou a zálohujte
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 031)
konec
konec
elseif Rozteč> 35 %, pokud je rozteč větší 35 stupňů, posuňte se vpřed na delší vzdálenost
%před přesunem získejte údaje o lehkém nárazníku
litBump = r.getLightBumpers;
pokud litBump.leftFront> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %, pokud je něco před roomba a zasáhne, pokud se pohne vpřed, vydá hluk a zobrazí zprávu
r.beep ('C ^^, F#^, C ^^, F#^')
jinak %tah
r.moveDistance (.3)
%Získejte údaje o nárazníku po přesunu
Bump = r.getBumpers;
pokud Bump.right == 1 || Bump.left == 1 || Bump.front == 1 %, pokud na něco narazíte, vydáte hluk, zobrazíte zprávu a zálohujete
r.beep ('A, C, E')
r.moveDistance (-. 01)
konec
%získat data senzoru útesu po přesunu
Cliff = r.getCliffSensors;
pokud Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, pokud něco spustí snímač útesu, zacházejte s tím jako s lávou a zálohujte
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 31)
konec
konec
elseif Rozteč -35 %, pokud se rozteč mezi -15 a -35 deg pohybuje zpět na krátkou vzdálenost
r.moveDistance (-. 03);
%získat data senzoru útesu po přesunu
Cliff = r.getCliffSensors;
pokud Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, pokud něco spustí snímač útesu, zacházejte s tím jako s lávou a zálohujte
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.04)
konec
elseif Rozteč -60 %, pokud je rozteč mezi -35 a -60 stupňů, se přesune zpět na delší vzdálenost
r.moveDistance (-. 3)
%získat data senzoru útesu po přesunu
Cliff = r.getCliffSensors;
pokud Cliff.left> 1500 || Cliff.leftFront> 1500 || Cliff.rightFront> 1500 || Cliff.right> 1500 %, pokud něco spustí snímač útesu, zacházejte s tím jako s lávou a zálohujte
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.31)
konec
konec
konec
konec
Doporučuje:
Mars Rover pomocí Raspberry Pi: 5 kroků
Mars Rover pomocí Raspberry Pi: Vážení všichni skvělí žáci, vždy jsem zvědavý na informace o Mars Rover, který má 6 kol, která mohou projet celý povrch Marsu a prozkoumat věci ze Země. Také chci prozkoumat věc tím, že sedím na svém notebooku. Takže teď si myslím, že je ten správný čas to udělat a
Proměna jakéhokoli R/C auta na Bluetooth App Control R/C Car: 9 kroků
Proměna jakéhokoli R/C auta na Bluetooth App Control R/C Car: Tento projekt ukazuje kroky ke změně běžného auta na dálkové ovládání na Bluetooth (BLE) auto s robotickou deskou Wombatics SAM01, Blynk App a MIT App Inventor. existuje mnoho levných RC aut se spoustou funkcí, jako jsou LED světlomety a
Od Roomby k Roveru za pouhých 5 kroků!: 5 kroků
Od Roomby po Rover za pouhých 5 kroků !: Roboti Roomba jsou zábavným a snadným způsobem, jak si ve světě robotiky ponořit prsty na nohou. V tomto Instructable podrobně popíšeme, jak převést jednoduchou Roombu na ovladatelný rover, který současně analyzuje své okolí. Seznam dílů 1.) MATLAB2.) Roomb
Čištění Roomby 1. nebo 2. generace: 8 kroků
Čištění Roomby 1. nebo 2. generace: Čistý robot je šťastný robot
Proměna Windows XP nebo Vista na Mac a Linux: 10 kroků
Proměna Windows XP nebo Vista na Mac a Linux: Tento návod vám ukáže, jak proměnit svůj počítač s Windows na Mac a PC a také na Linux. - Doporučuji mít alespoň 2 GB RAM - a více než 10 GB místa na pevném disku (chcete -li linux) se doporučuje Vista nebo XP - dělám to