Sadržaj:

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

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

Video: IRobot Create-Mars Expedition Rover Mark I: 4 koraka
Video: Посадка «Кьюриосити» НАСА — один из точек зрения ее создателя 2024, Srpanj
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Ova instrukcija će vas naučiti kako postaviti iRobot Create pomoću kodiranja MatLab. Vaš robot će imati mogućnost pretraživanja minerala razlikovanjem oblika, manevriranjem neravnim terenom pomoću senzora za litice i ima mogućnost ručnog upravljanja putem feeda uživo.

Korak 1: Opskrba

Pribor
Pribor

Za ovaj projekt trebat će vam iRobot Create, programabilna verzija robotskog usisavača Roomba. Robot je opremljen sa svim senzorima potrebnim za ovaj projekt, posebno senzorima udara, senzorima litice i senzorima "Light Bump". Trebat će vam i Raspberry Pi i video kamera koja se koristi za bežičnu komunikaciju, programiranje uživo i video prijenos uživo. Na kraju, trebat će vam 3D tiskani nosač za Raspberry Pi i kameru.

Korak 2: Razvijte kodiranje kako biste zadovoljili željeni ishod

Razviti kodiranje za zadovoljavanje željenog ishoda
Razviti kodiranje za zadovoljavanje željenog ishoda

Nakon što povežete Roombu, morat ćete stvoriti Matlab kod koji će vam dati željene izlaze nakon željenih ulaza.

Kôd se može vidjeti ovdje:

%Roomba projekt%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Opis problema: Napravite rover koji će pomoći ljudima tijekom %istraživanja/stanovanja Marsa. %Metoda rješenja: Potražite organsku (zelenu) tvar pomoću %svjetlosnih odbojnika, senzora za litice i kamere kako biste provjerili ima li organskih tvari. Dopustite %roveru da se kreće po neravnom terenu pomoću odbojnika, senzora %litice i senzora visine kotača. Omogućite ljudima da upravljaju roverom sa %sigurne udaljenosti i ručno traže minerale. choices = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Tri opcije u izborniku dijaloga Postavka = izbornik ('', izbori) ako je Postavka> 0 %Ako je odabrana opcija, zatražite korisničke potvrde izbora2 = {'Da', 'Ne'} %Stvorite niz ćelija za "da" ili "ne" "choice Confirm = izbornik (['Izabrali ste' 'način rada {Setting}'" način rada. '], choices2) %Potvrdite izbor korisničke postavke ako je Confirm == 1 ako je Setting == 1 %Provjerite je li odabrana "LIFE" postavka i = 0 dok je i == 0 r.setLEDDigits (num2str ('LIFE')) %Prikaz 'LIFE' na LED za i = 1: 100 r.setDriveVelocity (0,05) %Pomicanje roombe prema naprijed za 0,05 m/sy = r.getCliffSensors %Dohvaćanje i pohranjivanje vrijednosti senzora litice u ćelijskoj strukturi "y" l = r.getLightBumpers %Dohvaćanje i pohranjivanje vrijednosti lakih udara u strukturu "f" ako je l.lijevo> 100 %Provjeri je li lijevi svjetlosni odbojnik prekriven r.moveDistance (-0.05) %Pomicanje roombe unatrag 0,05 metara r.turnAngle (20) %Rotiranje roombe za 20 stupnjeva CCW img = r.getImage %Dobijte sliku s kamere za maline na roombi rect = [100 0 150 150]; img = imcrop (img, rect) %izrezivanja slike radi fokusiranja na središte crvena = srednja (srednja (img (:,:, 1))) %prosječan intenzitet crvene zelene = srednja (srednja (img (:,:, 2))) %prosječni intenzitet zelene boje plava = srednja vrijednost (srednja vrijednost (img (:,:, 3))) %prosječna jačina plave boje ako je zelena> crvena && zelena> plava %Provjerite je li biljka na slici d = msgbox (['Život pronađen! ']); %Prikažite okvir s porukom "Život pronađen!" waitfor (d); end elseif l.leftFront> 100 %Check is left/prednji branik svjetla je pokriven r.moveDistance (-0.05) %Move roomba unatrag 0,05 metara img = r.getImage %Dobijte sliku s fotoaparata Rasberry Pie na roombi i pohranite u varijablu 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %izrezivanja slike radi fokusiranja na središte crvena = srednja (srednja (img (:,:, 1))) %prosječan intenzitet crvene zelene = srednja (srednja (img (:,:, 2))) %prosječni intenzitet zelene boje plava = srednja vrijednost (srednja vrijednost (img (:,:, 3))) %prosječna jačina plave boje ako je zelena> crvena && zelena> plava %Provjerite je li biljka na slici d = msgbox (['Život pronađen! ']); %Prikažite okvir s porukom "Život pronađen!" waitfor (d); end elseif l.leftCenter> 100 %Provjerite je li lijevi/središnji odbojnik prekriven r.moveDistance (-0.05) %Pomakni roombu unatrag 0,05 metara img = r.getImage %Dobijte sliku s fotoaparata Rasberry Pie na roombi i pohranite u varijablu 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %slike izrezivanja radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosječan intenzitet crvene zelene = srednja (srednja (img (:,:, 2))) %prosječni intenzitet zelene boje plava = srednja vrijednost (srednja vrijednost (img (:,:, 3))) %prosječna jačina plave boje ako je zelena> crvena && zelena> plava %Provjerite je li biljka na slici d = msgbox (['Život pronađen! ']); %Prikažite okvir s porukom "Život pronađen!" waitfor (d); end elseif l.rightCenter> 100 %Provjerite je li desni/središnji odbojnik prekriven r.moveDistance (-0.05) %Pomicanje roombe unatrag 0,05 metara img = r.getImage %Dobijte sliku s fotoaparata Rasberry Pie na roombi i pohranite u promjenjivu 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %slike izrezivanja radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosječan intenzitet crvene zelene = srednja (srednja (img (:,:, 2))) %prosječni intenzitet zelene boje plava = srednja vrijednost (srednja vrijednost (img (:,:, 3))) %prosječna jačina plave boje ako je zelena> crvena && zelena> plava %Provjerite je li biljka na slici d = msgbox (['Život pronađen! ']); %Prikažite okvir s porukom "Život pronađen!" waitfor (d); end elseif l.rightFront> 100 %Provjerite je li desni/prednji odbojnik prekriven r.moveDistance (-0.05) %Pomaknite roombu unatrag 0,05 metara img = r.getImage %Dobijte sliku s kamere za maline na roombi i pohranite u promjenjivu 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %slike izrezivanja radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosječan intenzitet crvene zelene = srednja (srednja (img (:,:, 2))) %prosječni intenzitet zelene boje plava = srednja vrijednost (srednja vrijednost (img (:,:, 3))) %prosječna jačina plave boje ako je zelena> crvena && zelena> plava %Provjerite je li biljka na slici d = msgbox (['Život pronađen! ']); %Prikažite okvir s porukom "Život pronađen!" waitfor (d); end elseif l. right> 100 %Provjerite je li desni svjetlosni odbojnik prekriven r.moveDistance (-0.05) %Pomaknite roombu unatrag 0,05 metara r.turnAngle (-20) %Rotate roomba 20 stupnjeva CW img = r.getImage %Preuzmite sliku iz rasberry pie fotoaparat na roombi i spremi u varijablu 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %slike izrezivanja radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosječan intenzitet crvene zelene = srednja (srednja (img (:,:, 2))) %prosječnog intenziteta zelene boje plava = srednja vrijednost (srednja vrijednost (img (:,:, 3))) %prosječna jačina plave boje ako je zelena> crvena && zelena> plava %Provjerite je li biljka na slici d = msgbox (['Život pronađen! ']); %Prikažite okvir s porukom "Život pronađen!" waitfor (d); end elseif y.leftFront <1500 %Provjerite je li lijevi/prednji dio roombe izvan litice r.moveDistance (-0.1, 0.05) %Pomaknite roombu unatrag 0,1 metar na 0,05 m/s r.turnAngle (-5) %Rotate roomba 5 stupnjeva CW inače, ako je desno. Preda <1500 %Provjerite je li desni/prednji dio roombe izvan litice r.moveDistance (-0.1, 0.05) %Pomaknite roombu unatrag 0,1 metara na 0,05 m/s r.turnAngle (5) %Rotate roomba 5 stupnjevi CCW inače ako je lijevo <1000 %Provjerite je li lijeva strana roombe izvan litice r.moveDistance (-0.05, 0.05) %Pomaknite roombu unatrag 0,05 metara na 0,05 m/s r.turnAngle (-10) %Rotate roomba 10 stupnjeva CW elseif y.right0 %Run ako se pritisne gumb ako se nastavi == 1 i = 0 %Nastavi tražiti život else i = 1 %Kraj LIFE načina rada end end end elseif Postavka == 2 %Provjerite je li odabrana postavka "ROUGH TERRAIN" i = 0 dok je i == 0 r.setLEDDigits (num2str ('RGH')) %Prikaz 'Grubo' na LED zaslonu za i = 1: 1000 r.setDriveVelocity (0,05) %Postavite brzinu pogona roombe na 0,05 m/sx = r.getBumpers %Dohvati i pohrani vrijednosti osjetnika odbojnika u strukturu "x" y = r.get CliffSensors %Dohvatite i pohranite vrijednosti osjetnika litice u strukturi "y" ako je x.right == 1 %Provjerite je li desni odbojnik pritisnut r.turnAngle (10) %Rotirajte roombu za 10 stupnjeva CCW inače x.left == 1 %Provjerite je li lijevo branik je pritisnut r.turnAngle (-10) %Rotirajte roombu za 10 stupnjeva CW inače xi sprijeda == 1 %Provjerite je li prednji odbojnik pritisnut r.turnAngle (20) %Rotirajte roombu za 20 stupnjeva CCW inače x.rightWheelDrop == 1 % Provjerite je li desni kotač pao r.turnAngle (-20) %Rotirajte roombu za 20 stupnjeva CW u suprotnom slučaju x.leftWheelDrop == 1 %Provjerite je li lijevi kotač pao r.turnAngle (20) %Rotirajte roombu za 20 stupnjeva CCW inače y.leftFront < 1500 %Provjerite je li prednji lijevi dio roombe izvan litice r.moveDistance (-0.05, 0.05) %Pomaknite roombu unatrag 0,05 metara pri 0,05 m/s r.turnAngle (-5) %Rotirajte roombu za 5 stupnjeva CW u suprotnom smjeru s desne strane < 1500 %Provjerite je li desni prednji dio roombe izvan litice r.moveDistance (-0.05, 0.05) %Pomaknite roombu unatrag 0,05 metara pri 0,05 m/s r.turnAngle (5) %Rotirajte roombu za 5 stupnjeva CCW inače y.lijevo <1000 %Provjerite je li lijevi dio o f roomba je s litice r.moveDistance (-0.05, 0.05)%Pomicanje roombe unatrag 0,05 metara pri 0,05 m/s r.turnAngle (-10)%Rotiranje roombe za 10 stupnjeva CW inače y.desno0 ako nastavite == 1 i = 0 %Nastavi na neravnom terenu inače i = 1 %Završi kraj kraja neravnog terena else %Ručni način rada i = 0 r.setLEDDigits (num2str ('USER'))) %Prikaz 'USER' na LED zaslonu d = msgbox (['Tipke sa strelicama - Potez; S - Stop Rover; ESC - Kontrola krajnjeg korisnika; A - Pronađite resurs ']); waitfor (d); while i == 0 r.showCamera %Otvorite feed uživo kamere Rasberry Pie u zasebnom prozoru D = getkey (1) %Tipka dohvati pritisnuta od korisnika, pohranite ASCII vrijednost kao varijablu D ako je D == 30 %Provjerite ima li strelica "gore" pritisnuto r.setDriveVelocity (0.1) %Pošalji roombu naprijed pri 0,2 m/s inače Df = 28 %Provjerite je li pritisnuta strelica "lijevo" r.setDriveVelocity (0) %Zaustavite roombu u kretanju naprijed ili nazad r.turnAngle (15, 0,05) %Rotirajte roombu za 45 stupnjeva CCW pri 0,05 m/s inače Df = 31 %Provjerite je li pritisnuta strelica "dolje" r.setDriveVelocity (-0,1) %Pomaknite roombu unatrag za 0,2 m/s inače D == 29 % Provjerite je li pritisnuta strelica "desno" r.setDriveVelocity (0) %Zaustavite roombu u kretanju naprijed ili nazad r.turnAngle (-15, 0,05) %Rotirajte roombu za 45 stupnjeva CW pri 0,05 m/s inače D == 27 %Provjerite je li pritisnuta je tipka "esc" (escape) i = 1 %Promijeni vrijednost varijable "i" za izlaz iz petlje d = msgbox ('Izlazak iz "Korisničke kontrole"') %Neka korisnik zna da se ručni način rada napušta inače ako D == 115 %Provjerite je li pritisnuta tipka "s" r.setDriveVelocity (0) %Zaustavi roombu od ide naprijed ili natrag inače ako je D == 97 %Provjerite je li pritisnuto "a" image = r.getImage; imwrite (image, 'image.png') W = Classify (image) K = mode (W) if K == 3 d = msgbox ('Resource found') %Prikaz ako je pravokutni resurs otkrio waitfor (d); %Pričekajte da korisnik zatvori okvir za poruku "d" elseif K == 0 d = msgbox ('Nije resurs:(') %Prikaz ako pravokutni resurs nije otkriven pričekajte (d); %Pričekajte da korisnik zatvori okvir za poruku "d" end else d = msgbox ('Nije važeći unos ključa.') %Prikazuje ako korisnik zatvori izbornik "odaberite postavku" waitfor (d); %Čekajte da korisnik zatvori okvir s porukom "d" end waitfor (d); %Wait for korisnik zatvara okvir za poruku "d" end end end else d = msgbox ('Goodbye') %Reče zbogom ako su opcije zatvorene end waitfor (d);

Korak 3: Testiranje

Testiranje
Testiranje

Nakon što je vaš kod napisan, morat ćete testirati svoju Roombu. Iako se vaš kôd može činiti točnim, mnoge vaše vrijednosti, osobito za boju ili oblik, morat će se promijeniti kako bi se pravilno prepoznali objekti za koje želite da vaša Roomba identificira.

Korak 4: Promatrajte vizualne izlaze

Promatrajte vizualne izlaze
Promatrajte vizualne izlaze
Promatrajte vizualne izlaze
Promatrajte vizualne izlaze

Bit će vrlo očito jeste li uspješno programirali svoju Roombu na temelju njezinih vizualnih rezultata.

Izlazi uključuju:

  • Otkrivanje oblika: Sposobnost Roombe da pravilno razlikuje oblike kako bi pronašao ispravne minerale
  • Manevri na neravnom terenu: Izbjegavaju litice ili tamna područja
  • Ručni način rada: Live feed i mogućnost upravljanja Roombom
  • Slike: Slike minerala
  • Life Found !: MatLab tekstualni okvir koji označava da je vaša biljka identificirala organski život.

To je kraj našeg vodiča, uživajte u svom novom Mars Expedition Roveru!

Preporučeni: