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, November
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Tento návod vás naučí, ako nastaviť iRobot Create pomocou kódovania MatLab. Váš robot bude schopný vyhľadávať minerály pomocou rozlišovania tvarov, manévrovať v členitom teréne pomocou senzorov z útesu a bude schopný byť ručne ovládaný živým prenosom.

Krok 1: Spotrebný materiál

Zásoby
Zásoby

Na tento projekt budete potrebovať iRobot Create, čo je programovateľná verzia robotického vysávača Roomba. Robot je vybavený všetkými senzormi potrebnými pre tento projekt, konkrétne snímačmi nárazu, snímačmi útesu a snímačmi „Light Bump“. Budete tiež potrebovať Raspberry Pi a videokameru, ktorá sa používa na bezdrôtovú komunikáciu, živé programovanie a prenos živého videa. Nakoniec budete potrebovať 3D tlačený držiak pre Raspberry Pi a kameru.

Krok 2: Vytvorte kódovanie na uspokojenie požadovaného výsledku

Vytvorte kódovanie na uspokojenie požadovaného výsledku
Vytvorte kódovanie na uspokojenie požadovaného výsledku

Po pripojení robota Roomba budete musieť vytvoriť kód Matlab, ktorý vám poskytne požadované výstupy po požadovaných vstupoch.

Kód nájdete tu:

%Projekt Roomba%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Popis problému: Vytvorte rover, ktorý bude pomáhať ľuďom počas %prieskumu/osídľovania Marsu. Metóda %riešenia: Hľadajte organickú (zelenú) hmotu pomocou %svetelných nárazníkov, útesových senzorov a kamery na kontrolu organickej hmoty. Umožnite vozidlu %Rover navigovať v náročnom teréne pomocou nárazníkov, senzorov útesu %a senzorov výšky kolies. Umožnite ľuďom ovládať vozítko z %bezpečnej vzdialenosti a ručne vyhľadávať minerály. options = {'ŽIVOT', 'ROUGH TERRAIN', 'USER CONTROL'}; %Tri možnosti v dialógovom menu Nastavenie = ponuka ('', možnosti), ak je nastavená> 0 %Ak je zvolená možnosť, požiadajte o možnosti potvrdenia používateľom2 = {'Áno', 'Nie'} %Vytvorte pole buniek pre „áno“alebo „Nie“"voľba Potvrdiť = ponuka (['Vybrali ste' 'voľby {Režim}' 'režim.'], voľby2) %Potvrďte voľbu používateľského nastavenia, ak Potvrdiť == 1 ak Nastavenie == 1 %Skontrolujte, či bolo zvolené nastavenie" ŽIVOT "i = 0 pričom i == 0 r.setLEDDigits (num2str ('LIFE')) %zobrazenie 'LIFE' na LED pre i = 1: 100 r.setDriveVelocity (0,05) %posuňte roomba dopredu o 0,05 m/sy = r.getCliffSensors %Načítajte a ukladajte hodnoty senzora útesu do štruktúry bunky „y“l = r.getLightBumpers %Načítajte a ukladajte hodnoty svetelných nárazov do štruktúry „f“, ak l.left> 100 %Skontrolujte, či je ľavý nárazník svetla zakrytý r.moveDistance (-0,05) %Posuňte roomba dozadu 0,05 metra r.turnAngle (20) %Otočte roomba o 20 stupňov CCW img = r.getImage %Získajte obrázok z kamery s malinovým koláčom na roomba rect = [100 0 150 150]; img = imcrop (img, rect) %orezania obrazu na zaostrenie na stred červená = priemer (priemer (img (:,:, 1))) %priemernej intenzity červenej zelenej = priemer (priemer (img (:,:, 2))) %priemerná intenzita zelenej modrej = priemer (priemer (obrázok (:,:, 3))) %priemernej intenzity modrej, ak je zelená> červená && zelená> modrá %Skontrolujte, či je na obrázku rastlina d = msgbox (['Life found! ']); %Zobraziť pole so správou „Život nájdený!“čakať na (d); end elseif l.leftFront> 100 %Check is left/predný svetelný nárazník je zakrytý r.moveDistance (-0,05) %Move roomba dozadu 0,05 metre img = r.getImage %Get image from Rasberry Pie Camera on Roomba and store in variable 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %orezania obrazu na zaostrenie na stred červená = priemer (priemer (img (:,:, 1))) %priemernej intenzity červenej zelenej = priemer (priemer (img (:,:, 2))) %priemerná intenzita zelenej modrej = priemer (priemer (obrázok (:,:, 3))) %priemernej intenzity modrej, ak je zelená> červená && zelená> modrá %Skontrolujte, či je na obrázku rastlina d = msgbox (['Life found! ']); %Zobraziť pole so správou „Život nájdený!“čakať na (d); end elseif l.leftCenter> 100 %Skontrolujte, či je ľavý/stredný nárazník svetla zakrytý r.moveDistance (-0,05) %Presuňte roomba dozadu 0,05 metra img = r.getImage %Získajte obrázok z kamery s malinovým koláčom na roomba a uložte do premennej 'rect = [100 0 150 150]; img = imcrop (img, rect) %orezania obrazu na zaostrenie na stred červená = priemer (priemer (img (:,:, 1))) %priemernej intenzity červenej zelenej = priemer (priemer (img (:,:, 2))) %priemerná intenzita zelenej modrej = priemer (priemer (obr. (:,:, 3))) %priemernej intenzity modrej, ak je zelená> červená && zelená> modrá %Skontrolujte, či je na obrázku rastlina d = msgbox (['Life found! ']); %Zobraziť pole so správou „Život nájdený!“čakať na (d); end elseif l.rightCenter> 100 %Skontrolujte, či je pravý/stredný nárazník svetla zakrytý r.moveDistance (-0,05) %Presuňte roomba dozadu 0,05 metra obr. 'rect = [100 0 150 150]; img = imcrop (img, rect) %orezania obrazu na zaostrenie na stred červená = priemer (priemer (img (:,:, 1))) %priemernej intenzity červenej zelenej = priemer (priemer (img (:,:, 2))) %priemerná intenzita zelenej modrej = priemer (priemer (obrázok (:,:, 3))) %priemernej intenzity modrej, ak je zelená> červená && zelená> modrá %Skontrolujte, či je na obrázku rastlina d = msgbox (['Life found! ']); %Zobraziť pole so správou „Život nájdený!“čakať na (d); end elseif l.rightFront> 100 %Skontrolujte, či je pravý/predný svetelný nárazník zakrytý r.moveDistance (-0,05) %Presuňte roomba dozadu 0,05 metra img = r.getImage %Získajte obrázok z kamery s malinovým koláčom na roomba a uložte do premennej 'rect = [100 0 150 150]; img = imcrop (img, rect) %orezania obrazu na zaostrenie na stred červená = priemer (priemer (img (:,:, 1))) %priemernej intenzity červenej zelenej = priemer (priemer (img (:,:, 2))) %priemerná intenzita zelenej modrej = priemer (priemer (obrázok (:,:, 3))) %priemernej intenzity modrej, ak je zelená> červená && zelená> modrá %Skontrolujte, či je na obrázku rastlina d = msgbox (['Life found! ']); %Zobraziť pole so správou „Život nájdený!“čakať na (d); end elseif l.right> 100 %Skontrolujte, či je zakrytý pravý svetelný nárazník r.moveDistance (-0,05) %Posuňte roomba dozadu 0,05 metra r.turnAngle (-20) %Otočte roomba o 20 stupňov CW obr. = r.getImage %Získajte obrázok z malinový koláčový fotoaparát na roomba a skladujte v premennej 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %orezania obrazu so zameraním na stred červená = priemer (priemer (img (:,:, 1))) %priemernej intenzity červenej zelenej = priemer (priemer (img (:,:, 2))) %priemerná intenzita zelenej modrej = priemer (priemer (obr. (:,:, 3))) %priemernej intenzity modrej, ak je zelená> červená && zelená> modrá %Skontrolujte, či je na obrázku rastlina d = msgbox (['Life found! ']); %Zobraziť pole so správou „Život nájdený!“čakať na (d); end elseif y.leftFront <1500 %Skontrolujte, či je ľavá/predná časť roomba mimo útesu r.moveDistance (-0,1, 0,05) %Move roomba dozadu 0,1 metra pri 0,05 m/s r.turnAngle (-5) %Rotate roomba 5 stupne CW inak, ak vpravo. Vpredu <1500 %Skontrolujte, či je pravá/predná časť roomba mimo útesu r.moveDistance (-0,1, 0,05) %Move roomba dozadu 0,1 metra pri 0,05 m/s r.turnAngle (5) %Rotate roomba 5 stupne CCW inak ak y.vľavo <1000 %Skontrolujte, či je ľavá strana robota roomba mimo útesu r.moveDistance (-0,05, 0,05) %Posuňte roomba dozadu o 0,05 metra pri 0,05 m/s r.turnAngle (-10) %Otočte roomba o 10 stupňov CW elseif y.right0 %Spustiť, ak je tlačidlo stlačené, ak Pokračovať == 1 i = 0 %Pokračovať v hľadaní iného života i = 1 %Koniec Režim ŽIVOT koniec koniec koniec koniec ostatné nastavenie == 2 %Skontrolujte, či bolo zvolené nastavenie „ROUGH TERRAIN“a r.getBumpers %Získanie a uloženie hodnôt senzorov nárazníka v štruktúre "x" y = r.get CliffSensors %Načítajte a ukladajte hodnoty senzorov útesu v štruktúre „y“, ak x.right == 1 %Skontrolujte, či je stlačený pravý nárazník r.turnAngle (10) %Otočte roomba o 10 stupňov CCW elseif x.left == 1 %Skontrolujte, či je vľavo nárazník je stlačený r.turnAngle (-10) %Otočiť roomba o 10 stupňov CW inakif x.front == 1 %Skontrolujte, či je stlačený predný nárazník r.turnAngle (20) %Otočte roomba o 20 stupňov CCW inakif x.rightWheelDrop == 1 % Skontrolujte, či pravé koliesko kleslo r.turnAngle (-20) %Otočte roomba o 20 stupňov CW inak, ak x.leftWheelDrop == 1 %Kontrola, či ľavé koleso kleslo r.turnAngle (20) %Otočte roomba o 20 stupňov CCW inak, ak y.leftFront < 1 500 %Skontrolujte, či je predná ľavá časť robota mimo útesu. R. Pohyb Vzdialenosť (-0,05, 0,05) %Posuňte zariadenie roomba dozadu o 0,05 metra pri rýchlosti 0,05 m/s r.turnAngle (-5) %Otočte roomba o 5 stupňov CW inak, ak vpravo. Vpredu < 1500 %Skontrolujte, či je pravá predná časť robota Roomba mimo útesu r. Pohyb Vzdialenosť (-0,05, 0,05) %Posuňte robot Roomba dozadu o 0,05 metra pri rýchlosti 0,05 m/s r.turnAngle (5) %Otočte roomba o 5 stupňov CCW inak, ak zostane vľavo <1000 %Skontrolujte, či je ľavá časť 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 ° CW elseif y.right0 if Continue == 1 i = 0 %Pokračujte v drsnom teréne inak i = 1 %Koniec konca konca drsného terénu inak %Manuálny režim i = 0 r.setLEDDigits (num2str ('USER')) %Zobrazenie 'USER' na LED displeji d = msgbox (['Šípky - Pohyb; S - Stop Rover; ESC - kontrola koncového používateľa; A - Nájdite zdroj ']); čakať na (d); zatiaľ čo i == 0 r.showCamera %Otvorte živý prenos kamery z malinového koláča v samostatnom okne D = getkey (1) %Tlačidlo načítania stlačené používateľom, uložte hodnotu ASCII ako premennú D, ak D == 30 %Skontrolujte, či má šípka „hore“bolo stlačené r.setDriveVelocity (0,1) %Poslať roomba dopredu o 0,2 m/s inakif D == 28 %Skontrolujte, či bola stlačená šípka „doľava“r.setDriveVelocity (0) %Zastavte roombu v pohybe dopredu alebo dozadu r.turnAngle (15, 0,05) %Otočte roomba o 45 stupňov CCW rýchlosťou 0,05 m/s inak, D == 31 %Skontrolujte, či bola stlačená šípka „nadol“r.setDriveVelocity (-0,1) %Posuňte roomba dozadu o 0,2 m/s inak, D == 29 % Skontrolujte, či je stlačená šípka „vpravo“r.setDriveVelocity (0) %Zastavte roomba v pohybe dopredu alebo dozadu r.turnAngle (-15, 0,05) %Otočte roomba o 45 stupňov CW rýchlosťou 0,05 m/s inak, ak D == 27 %Skontrolujte, či bolo stlačené tlačidlo „esc“(Escape) i = 1 %Zmeniť hodnotu premennej „i“na ukončenie cyklu d = msgbox ('Ukončenie "Užívateľského ovládania"') %Dajte používateľovi vedieť, že sa opúšťa manuálny režim inakif D == 115 %Skontrolujte, či bolo stlačené tlačidlo „s“r.setDriveVelocity (0) %Zastaviť roomba od vpred alebo vzad inakif D == 97 %Skontrolujte, či bolo stlačené „a“image = r.getImage; imwrite (obrázok, 'image.png') W = Klasifikácia (obrázok) K = režim (W), ak K == 3 d = msgbox ('Zdroj nájdený') %Zobrazí, ak bol detekovaný obdĺžnikový zdroj (d); %Počkajte, kým používateľ zatvorí pole správy „d“elseif K == 0 d = msgbox ('Not Resource:(') %Zobrazí sa, ak sa nezistí obdĺžnikový zdroj, čakajte (d); %Počkajte, kým používateľ zatvorí okno so správou „d“end else d = msgbox ('Nie je to platný vstup kľúča.') %Zobrazí sa, ak užívateľ zavrie ponuku „vybrať nastavenie“, čakanie (d); %Počkajte, kým používateľ zatvorí okno so správou „d“Koniec čakania (d); %Čakanie na používateľ zatvorí pole so správou "d" koniec koniec koniec d = msgbox ('Zbohom') %Rozlúči sa, ak sú možnosti zatvorené koniec čakania (d);

Krok 3: Testovanie

Testovanie
Testovanie

Akonáhle bude váš kód napísaný, budete musieť svoj robot Roomba otestovať. Aj keď sa váš kód môže zdať správny, mnohé z vašich hodnôt, najmä pre farbu alebo tvar, bude potrebné zmeniť, aby ste správne rozoznali objekty, ktoré by podľa vás chcela robota Roomba identifikovať.

Krok 4: Sledujte vizuálne výstupy

Sledujte vizuálne výstupy
Sledujte vizuálne výstupy
Sledujte vizuálne výstupy
Sledujte vizuálne výstupy

Na základe vizuálnych výstupov bude veľmi zrejmé, či ste Roombu úspešne naprogramovali alebo nie.

Výstupy zahŕňajú:

  • Detekcia tvarov: Schopnosť robota Roomba správne rozlišovať tvary za účelom nájdenia správnych minerálov
  • Hrubé terénne manévre: vyhýba sa útesom alebo tmavým oblastiam
  • Manuálny režim: Živý prenos a možnosť ovládať robot Roomba
  • Obrázky: Obrázky minerálov
  • Life Found !: Textové pole MatLab označujúce, že vaša rastlina identifikovala organický život.

Toto je koniec nášho tutoriálu, užite si svoj nový Mars Expedition Rover!

Odporúča: