Sadržaj:
- Korak 1: Opskrba
- Korak 2: Razvijte kodiranje kako biste zadovoljili željeni ishod
- Korak 3: Testiranje
- Korak 4: Promatrajte vizualne izlaze
Video: IRobot Create-Mars Expedition Rover Mark I: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
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
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
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
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
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:
Iron Man Mark II kaciga: 4 koraka
Iron Man Mark II kaciga: Casco réplica mark II de 2 partes, casco y pulsera unidos por cadena que conduce el cableado, alimentado por 4 baterías AA ubicadas en la parte posterior junto al microcontrolador y el switch de encendido.Casco: Servomotores para el cierre y apert
Vrhunski stroj za pivo -pong - PongMate CyberCannon Mark III: 6 koraka (sa slikama)
Vrhunski stroj za pivski pong - PongMate CyberCannon Mark III: Uvod PongMate CyberCannon Mark III najnoviji je i najnapredniji komad tehnologije pivskog ponga koji se ikada prodavao javnosti. S novim CyberCannonom, svaka osoba može postati igrač koji se najviše boji za pivskim stolom. Kako je ovo p
Rover FPV Rover s Wi-Fi kontrolom (s Arduinom, ESP8266 i koračnim motorima): 11 koraka (sa slikama)
Robot FPV Rover s Wi-Fi kontrolom (s Arduinom, ESP8266 i koračnim motorima): Ova uputa pokazuje kako projektirati daljinski upravljani robotski rover s dva kotača preko wi-fi mreže, pomoću Arduino Uno spojenog na ESP8266 Wi-fi modul i dva koračna motora. Robotom se može upravljati s običnih internetskih obrva
Slave Trigger Flash Mark II: 6 koraka (sa slikama)
Slave Trigger Flash Mark II: U ovom uputstvu ću vam objasniti kako napraviti pravi (optički) slave okidač s minimalnom količinom komponenti. Postoji mnogo složenih dizajna koje možete pronaći na internetu, ovaj dizajn je vrlo jednostavan i funkcionira dobro u svijetlom i prigušenom okruženju
Korištenje naredbenog modula IRobot Create s Linuxom: 4 koraka
Korištenje naredbenog modula IRobot Create s Linuxom: Budući da iRobot nije linux korisnicima pružio način korištenja naredbenog modula, morao sam to shvatiti. Nemojte se zastrašiti, to uopće nije teško. Sve što trebate učiniti je pokrenuti nekoliko skripti. Počnimo, hoćemo li?