Obsah:

IRobot Create-Mars Expedition Rover Mark I: 4 kroky
IRobot Create-Mars Expedition Rover Mark I: 4 kroky

Video: IRobot Create-Mars Expedition Rover Mark I: 4 kroky

Video: IRobot Create-Mars Expedition Rover Mark I: 4 kroky
Video: Посадка Марсохода Perseverance- История Изнутри 2024, Listopad
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Tento návod vás naučí, jak nastavit iRobot Create pomocí kódování MatLab. Váš robot bude schopen vyhledávat nerosty rozlišováním tvarů, manévrovat v členitém terénu pomocí snímačů útesu a bude schopen ručního ovládání prostřednictvím živého kanálu.

Krok 1: Spotřební materiál

Zásoby
Zásoby

K tomuto projektu budete potřebovat iRobot Create, což je programovatelná verze robotického vysavače Roomba. Robot je vybaven všemi senzory potřebnými pro tento projekt, konkrétně senzory nárazů, senzory útesu a senzory „Light Bump“. Budete také potřebovat Raspberry Pi a videokameru, která se používá pro bezdrátovou komunikaci, živé programování a živý přenos videa. Nakonec budete potřebovat 3D tištěný držák pro Raspberry Pi a kameru.

Krok 2: Rozvíjejte kódování k uspokojení požadovaného výsledku

Vyvinout kódování k uspokojení požadovaného výsledku
Vyvinout kódování k uspokojení požadovaného výsledku

Jakmile připojíte robot Roomba, budete muset vytvořit kód Matlab, který vám poskytne požadované výstupy po požadovaných vstupech.

Kód je k vidění zde:

%Roomba Project%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Popis problému: Vytvořte rover, který pomůže lidem při %průzkumu/osídlení Marsu. %Metoda řešení: Hledejte organickou (zelenou) hmotu pomocí %světelných nárazníků, snímačů útesu a kamery, abyste zkontrolovali organickou hmotu. Umožněte vozidlu %Rover procházet nerovným terénem pomocí nárazníků, snímačů útesu a snímačů výšky kol. Umožněte lidem ovládat vozítko z %bezpečné vzdálenosti a ručně hledat minerály. options = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Tři možnosti v dialogovém menu Nastavení = menu ('', volby), pokud Nastavení> 0 %Je -li zvolena možnost, požádejte uživatele o možnosti potvrzení2 = {'Ano', 'Ne'} %Vytvořte pole buněk pro „ano“nebo „Ne "volba Potvrdit = nabídka (['Vybrali jste si' 'volby {režim}' režim. '], volby2) %Potvrďte volbu uživatelského nastavení, pokud Potvrdíte == 1 pokud Nastavení == 1 %Zkontrolujte, zda bylo zvoleno nastavení" ŽIVOT "i = 0, zatímco i == 0 r.setLEDDigits (num2str ('LIFE')) %Zobrazení 'LIFE' na LED pro i = 1: 100 r.setDriveVelocity (0,05) %Přesunout roomba dopředu o 0,05 m/sy = r.getCliffSensors %Načíst a uložit hodnoty snímače útesu do buněčné struktury „y“l = r.getLightBumpers %Načíst a uložit hodnoty světelných nárazů do struktury „f“, pokud l.left> 100 %Zkontrolujte, zda je zakryt levý světelný nárazník r.moveDistance (-0,05) %Přesuňte roomba dozadu 0,05 metru r.turnAngle (20) %Otočte roomba o 20 stupňů CCW img = r.getImage %Získejte obraz z kamery s malinovým koláčem na roomba rect = [100 0 150 150]; img = imcrop (img, rect) %oříznutí obrázku se zaměřením na střed červená = průměr (průměr (img (:,:, 1))) %průměrná intenzita červené zelená = průměr (průměr (img (:,:, 2))) %průměrná intenzita zeleně modrá = průměr (průměr (obr (:,:, 3))) %průměrné intenzity modré, pokud je zelená> červená && zelená> modrá %Zkontrolujte, zda je rostlina na obrázku d = msgbox (['Life found! ']); %Zobrazit okno se zprávou „Život nalezen!“čekat na (d); end elseif l.leftFront> 100 %Check left/přední světelný nárazník je zakrytý r.moveDistance (-0,05) %Move roomba dozadu 0,05 metru img = r.getImage %Získejte obrázek z kamery s malinovým koláčem na roomba a uložte do proměnné 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %oříznutí obrázku se zaměřením na střed červená = průměr (průměr (img (:,:, 1))) %průměrná intenzita červené zelená = průměr (průměr (img (:,:, 2))) %průměrná intenzita zelené modrá = průměr (průměr (obr (:,:, 3))) %průměrná intenzita modré, pokud je zelená> červená && zelená> modrá %Zkontrolujte, zda je rostlina na obrázku d = msgbox (['Life found! ']); %Zobrazit okno se zprávou „Život nalezen!“čekat na (d); end elseif l.leftCenter> 100 %Zkontrolujte, zda je zakryt levý/střední světelný nárazník r.moveDistance (-0,05) %Přesuňte roomba dozadu 0,05 metru img = r.getImage %Získejte obraz z kamery s malinovým koláčem na roomba a uložte do proměnné 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %oříznutí obrázku se zaměřením na střed červená = průměr (průměr (img (:,:, 1))) %průměrná intenzita červené zelená = průměr (průměr (img (:,:, 2))) %průměrná intenzita zelené modrá = průměr (průměr (obr (:,:, 3))) %průměrná intenzita modré, pokud je zelená> červená && zelená> modrá %Zkontrolujte, zda je rostlina na obrázku d = msgbox (['Life found! ']); %Zobrazit okno se zprávou „Život nalezen!“čekat na (d); end elseif l.rightCenter> 100 %Zkontrolujte, zda je zakrytý pravý/středový světelný nárazník r.moveDistance (-0,05) %Přesuňte roomba dozadu 0,05 metru img = r.getImage %Získejte obraz z kamery s malinovým koláčem na roomba a uložte do proměnné 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %oříznutí obrázku se zaměřením na střed červená = průměr (průměr (img (:,:, 1))) %průměrná intenzita červené zelená = průměr (průměr (img (:,:, 2))) %průměrná intenzita zeleně modrá = průměr (průměr (obr (:,:, 3))) %průměrné intenzity modré, pokud je zelená> červená && zelená> modrá %Zkontrolujte, zda je rostlina na obrázku d = msgbox (['Life found! ']); %Zobrazit okno se zprávou „Život nalezen!“čekat na (d); end elseif l.rightFront> 100 %Zkontrolujte, zda je pravý/přední světelný nárazník zakrytý r.moveDistance (-0,05) %Move roomba dozadu 0,05 metru img = r.getImage %Získejte obraz z kamery s malinovým koláčem na roomba a uložte do proměnné 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %oříznutí obrázku se zaměřením na střed červená = průměr (průměr (img (:,:, 1))) %průměrná intenzita červené zelená = průměr (průměr (img (:,:, 2))) %průměrná intenzita zelené modrá = průměr (průměr (obr (:,:, 3))) %průměrná intenzita modré, pokud je zelená> červená && zelená> modrá %Zkontrolujte, zda je rostlina na obrázku d = msgbox (['Life found! ']); %Zobrazit okno se zprávou „Život nalezen!“čekat na (d); end elseif l.right> 100 %Zkontrolujte, zda je zakrytý pravý světelný nárazník r.moveDistance (-0,05) %Přesuňte roomba dozadu 0,05 metru r.turnAngle (-20) %Otočte roomba o 20 stupňů CW obr. = r.getImage %Získejte obrázek z malinový koláčový fotoaparát na roomba a uložte do proměnné 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %oříznutí obrázku se zaměřením na střed červená = průměr (průměr (img (:,:, 1))) %průměrná intenzita červené zelená = průměr (průměr (img (:,:, 2))) %průměrná intenzita zelené modrá = průměr (průměr (obr (:,:, 3))) %průměrná intenzita modré, pokud je zelená> červená && zelená> modrá %Zkontrolujte, zda je rostlina na obrázku d = msgbox (['Life found! ']); %Zobrazit okno se zprávou „Život nalezen!“čekat na (d); end elseif y.leftFront <1500 %Zkontrolujte, zda je levá/přední část roomba mimo útes r.moveDistance (-0,1, 0,05) %Move roomba dozadu 0,1 metru při 0,05 m/s r.turnAngle (-5) %Rotate roomba 5 stupně CW elseif y.right Čelní <1500 %Zkontrolujte, zda je pravá/přední část roomba mimo útes r.moveDistance (-0,1, 0,05) %Move roomba dozadu 0,1 metru při 0,05 m/s r.turnAngle (5) %Rotate roomba 5 stupně CCW jinak, pokud y.leva <1000 %Zkontrolujte, zda je levá strana robota roomba mimo útes r.moveDistance (-0,05, 0,05) %Přesuňte roomba dozadu 0,05 metru rychlostí 0,05 m/s r.turnAngle (-10) %Otočte roomba o 10 stupňů CW elseif y.right0 %Spustit, pokud je tlačítko stisknuto, pokud Pokračovat == 1 i = 0 %Pokračovat v hledání života jinak i = 1 %Konec Režim ŽIVOT konec konec konec konec elseif Nastavení == 2 %Zkontrolujte, zda bylo zvoleno nastavení „ROUGH TERRAIN“i = 0 zatímco i == 0 r.setLEDDigits (num2str ('RGH')) %zobrazení 'Rough' na LED displeji pro i = 1: 1000 r.setDriveVelocity (0,05) %Nastavte rychlost jízdy roomba na 0,05 m/sx = r.getBumpers %Načíst a uložit hodnoty senzorů nárazníku do struktury "x" y = r.get CliffSensors %Načíst a uložit hodnoty senzoru útesu do struktury „y“, pokud x.right == 1 %Zkontrolujte, zda je stisknut pravý nárazník r.turnAngle (10) %Otočit roomba o 10 stupňů CCW elseif x.left == 1 %Zkontrolujte, zda je vlevo nárazník je stlačen r.turnAngle (-10) %Otočení roomba o 10 stupňů CW jinakif x.front == 1 %Zkontrolujte, zda je stisknut přední nárazník r.turnAngle (20) %Otočení roomba o 20 stupňů CCW elseif x.rightWheelDrop == 1 % Zkontrolujte, zda pravé kolečko kleslo r.turnAngle (-20) %Otočení roomba o 20 stupňů CW jinak x.leftWheelDrop == 1 %Kontrola, zda levé kolo kleslo r.turnAngle (20) %Otočení roomba o 20 stupňů CCW elseif y.leftFront < 1500 %Zkontrolujte, zda je přední levá část roomba mimo útes r.moveDistance (-0,05, 0,05) %Move roomba dozadu 0,05 metru při 0,05 m/s r.turnAngle (-5) %Rotate roomba 5 stupňů CW elseif y.rightFront < 1500 %Zkontrolujte, zda je pravá přední část Roomba mimo útes r.moveDistance (-0,05, 0,05) %Move roomba dozadu 0,05 metru při 0,05 m/s r.turnAngle (5) %Rotate roomba 5 stupňů CCW elseif y.left <1000 %Zkontrolujte, zda levá část o f roomba is off cliff r.moveDistance (-0,05, 0,05)%Move roomba dozadu 0,05 met at 0,05 m/s r.turnAngle (-10)%Rotate roomba 10 stupňů CW elseif y.right0 if Continue == 1 i = 0 %Pokračovat v drsném terénu jinak i = 1 %Konec konce nerovného terénu konec jinak %Manuální režim i = 0 r.setLEDDigits (num2str ('USER')) %Zobrazení 'USER' na LED displeji d = msgbox (['Šipky - Přestěhovat se; S - Stop Rover; ESC - kontrola koncového uživatele; A - Vyhledejte zdroj ']); čekat na (d); zatímco i == 0 r.showCamera %Otevřete živý přenos kamery s malinovým koláčem v samostatném okně D = getkey (1) %Tlačítko vyvolání stisknuté uživatelem, uložte hodnotu ASCII jako proměnnou D, pokud D == 30 %Zkontrolujte, zda má šipka „nahoru“bylo stisknuto r.setDriveVelocity (0,1) %Odeslat roomba vpřed rychlostí 0,2 m/s jinakif D == 28 %Zkontrolujte, zda byla stisknuta šipka „vlevo“r.setDriveVelocity (0) %Zastavte roomba v pohybu vpřed nebo vzad r.turnAngle (15, 0,05) %Otočení roomba o 45 stupňů CCW rychlostí 0,05 m/s jinak D == 31 %Zkontrolujte, zda byla stisknuta šipka „dolů“r.setDriveVelocity (-0,1) %Přesuňte roomba dozadu o 0,2 m/s jinakif D == 29 % Zkontrolujte, zda je stisknuta šipka „vpravo“r.setDriveVelocity (0) %Zastavte roombu v pohybu vpřed nebo vzad r.turnAngle (-15, 0,05) %Otočte roomba o 45 stupňů CW rychlostí 0,05 m/s jinakif D == 27 %Zkontrolujte, zda byla stisknuta klávesa „esc“(escape) i = 1 %Změnit hodnotu proměnné „i“pro ukončení smyčky d = msgbox ('Ukončení „ovládání uživatelem“') %Dejte uživateli vědět, že se opouští manuální režim jinakif D == 115 %Zkontrolujte, zda bylo stisknuto tlačítko „s“r.setDriveVelocity (0) %Zastavit roomba od jde vpřed nebo vzad jinakif D == 97 %Zkontrolujte, zda bylo stisknuto „a“image = r.getImage; imwrite (obrázek, 'image.png') W = Klasifikace (obrázek) K = režim (W), pokud K == 3 d = msgbox ('Zdroj nalezen') %Zobrazit, pokud byl detekován obdélníkový zdroj (d); %Počkejte, až uživatel zavře okno se zprávou „d“elseif K == 0 d = msgbox ('Not Resource:(') %Zobrazí se, pokud nebyl detekován obdélníkový zdroj, čekání (d); %Počkejte, až uživatel zavře okno se zprávou „d“end else d = msgbox ('Není to platný klíčový vstup.') %Zobrazí se, pokud uživatel zavře nabídku „zvolit nastavení“čekání (d); %Počkejte, až uživatel zavře okno se zprávou „d“konec čekání ((d); %Čekání na uživatel zavře okno se zprávou "d" konec konec konec d

Krok 3: Testování

Testování
Testování

Jakmile bude váš kód napsán, budete muset svůj robot Roomba otestovat. Ačkoli se váš kód může zdát správný, mnoho vašich hodnot, zejména pro barvu nebo tvar, bude nutné změnit, aby bylo možné správně rozpoznat objekty, které chcete, aby váš robot Roomba identifikoval.

Krok 4: Sledujte vizuální výstupy

Sledujte vizuální výstupy
Sledujte vizuální výstupy
Sledujte vizuální výstupy
Sledujte vizuální výstupy

Bude velmi zřejmé, zda jste Roombu úspěšně naprogramovali na základě jejích vizuálních výstupů.

Mezi výstupy patří:

  • Detekce tvarů: schopnost robota Roomba správně rozlišovat tvary za účelem nalezení správných minerálů
  • Hrubé terénní manévry: vyhýbá se útesům nebo tmavým oblastem
  • Manuální režim: Živý přenos a možnost ovládání robota Roomba
  • Obrázky: Obrázky minerálů
  • Life Found !: Textové pole MatLab označující, že vaše rostlina identifikovala organický život.

Tím náš návod končí, užijte si svůj nový Mars Expedition Rover!

Doporučuje: