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

Ovo uputstvo ć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: Potrošni materijal

Supplies
Supplies

Za ovaj projekt trebat će vam iRobot Create, koja je programabilna verzija robotskog usisivača Roomba. Robot je opremljen sa svim senzorima potrebnim za ovaj projekt, posebno senzorima udara, senzorima litice i "Light Bump" senzorima. 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 štampani 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 možete vidjeti ovdje:

%Roomba projekat%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Opis problema: Napravite rover koji će pomoći ljudima tokom %istraživanja/obitavanja na Marsu. %Metoda rješenja: Potražite organsku (zelenu) tvar upotrebom %svjetlosnih odbojnika, senzora litica i kamere kako biste provjerili ima li organske tvari. Dopustite %roveru da se kreće po neravnom terenu pomoću branika, 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 dijaloškom meniju Postavka = izbornik ('', izbori) ako je Postavka> 0 %Ako je odabrana opcija, zatražite korisničku potvrdu izbora2 = {'Da', 'Ne'} %Kreirajte niz ćelija za "da" ili "ne" "choice Confirm = menu (['Izabrali ste' 'modere {Setting}'" mode. '], choices2) %Potvrdite izbor korisničke postavke ako je Confirm == 1 ako je Setting == 1 %Provjerite da li je odabrana postavka "LIFE" i = 0 dok je i == 0 r.setLEDDigits (num2str ('LIFE')) %Prikaz 'LIFE' na LED diodi za i = 1: 100 r.setDriveVelocity (0.05) %Pomaknite roombu 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 neravnina u strukturi "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) %isecanja slike radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosečan crveni intenzitet zelena = srednja (srednja (img (:,:, 2))) %prosječan 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 %Provjeri je li lijevo/prednji branik svjetla je pokriven r.moveDistance (-0.05) %Pomakni roombu unatrag 0,05 metara img = r.getImage %Nabavite sliku sa fotoaparata Rasberry Pie na roombi i pohranite u promjenjivu 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %isecanja slike radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosečan crveni intenzitet zelena = srednja (srednja (img (:,:, 2))) %prosečan intenzitet zelene boje plava = srednja vrednost (srednja vrednost (img (:,:, 3))) %prosečna jačina plave boje ako je zelena> crvena && zelena> plava %Proverite da li je 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) %Pomaknite roombu 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) %isecanja slike radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosečan crveni intenzitet zelena = srednja (srednja (img (:,:, 2))) %prosječan 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) %Pomaknite roombu unatrag 0,05 metara img = r.getImage %Nabavite sliku sa kamere za maline na roombi i pohranite je u promjenjivu 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %isecanja slike radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosečan crveni intenzitet zelena = srednja (srednja (img (:,:, 2))) %prosječan 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 branik svjetla prekriven r.moveDistance (-0.05) %Pomaknite roombu unatrag 0,05 metara img = r.getImage %Preuzmite sliku s kamere za maline na roombi i pohranite u promjenjivu 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %isecanja slike radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosečan crveni intenzitet zelena = srednja (srednja (img (:,:, 2))) %prosječan 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.desno> 100 %Provjerite je li desni svjetlosni branik prekriven r.moveDistance (-0.05) %Pomaknite roombu unatrag 0,05 metara r.turnAngle (-20) %Rotirajte roombu za 20 stupnjeva CW img = r.getImage %Preuzmite sliku sa rasberry pie kameru na roombi i spremi u varijablu 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %isecanja slike radi fokusiranja na centar crvena = srednja (srednja (img (:,:, 1))) %prosečan crveni intenzitet zelena = srednja (srednja (img (:,:, 2))) %prosečan intenzitet zelene boje plava = srednja vrednost (srednja vrednost (img (:,:, 3))) %prosečna jačina plave boje ako je zelena> crvena && zelena> plava %Proverite da li je 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 metara na 0,05 m/s r.turnAngle (-5) %Rotate roomba 5 stupnjeva CW inače ako y.desno Prednja <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 y.lijevo <1000 %Provjerite je li lijeva strana roombe s litice r.moveDistance (-0.05, 0.05) %Pomaknite roombu unatrag 0,05 metara na 0,05 m/s r.turnAngle (-10) %Rotate roomba 10 stepeni CW elseif y.right0 %Run ako je pritisnuto dugme ako Continue == 1 i = 0 %Nastavite tražiti život else i = 1 %End LIFE mode 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 displeju za i = 1: 1000 r.setDriveVelocity (0,05) %Postavite brzinu roomba pogona na 0,05 m/sx = r.getBumpers %Dohvati i pohrani vrijednosti senzora branika u strukturu "x" y = r.get CliffSensors %Dohvatite i pohranite vrijednosti senzora litice u strukturi "y" ako je x.right == 1 %Provjerite je li desni branik 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) %Rotirati roombu za 10 stepeni CW u suprotnom slučaju x. sprijeda == 1 %Provjeriti je li prednji branik pritisnut r.turnAngle (20) %Rotirati roomba 20 stepeni CCW u suprotnom slučaju x.rightWheelDrop == 1 % Provjerite da li je 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 roomba 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 na 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 na 0,05 m/s r.turnAngle (5) %Rotirajte roombu za 5 stupnjeva CCW inače y.lijevo <1000 %Proverite da li je levi deo o f roomba je s litice r.moveDistance (-0.05, 0.05)%Pomaknite roombu unatrag 0,05 metara pri 0,05 m/s r.turnAngle (-10)%Rotirajte roombu za 10 stepeni CW inače y.desno0 ako nastavite == 1 i = 0 %Nastavi na neravnom terenu else i = 1 %End end the edge terrain end end else %Ručni način rada i = 0 r.setLEDDigits (num2str ('USER'))) %Prikaz 'USER' na LED ekranu d = msgbox (['Tipke sa strelicama - Move; 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 posebnom prozoru D = getkey (1) %Tipka dohvata koju je pritisnuo korisnik, pohrani ASCII vrijednost kao varijablu D ako je D == 30 %Provjeri 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 stepeni CCW na 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 stepeni CW na 0,05 m/s inače D == 27 %Provjerite 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 napred ili nazad u suprotnom slučaju ako je D == 97 %Proverite da li je 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); %Sačekajte da korisnik zatvori okvir za poruku "d" elseif K == 0 d = msgbox ('Nije resurs:(') %Prikazuje ako pravokutni resurs nije otkriven waitfor (d); %Sač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); %Sačekajte da korisnik zatvori okvir za poruku "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 ispravnim, mnoge vaše vrijednosti, posebno za boju ili oblik, bit će potrebno promijeniti da biste pravilno prepoznali objekte 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 njenih vizualnih rezultata.

Izlazi uključuju:

  • Otkrivanje oblika: Roombina sposobnost da pravilno razlikuje oblike kako bi pronašla 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 identifikovala organski život.

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

Preporučuje se: