Sisällysluettelo:

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

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

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

Tämä ohje opettaa sinulle, miten voit määrittää iRobot Createin käyttämällä MatLab -koodausta. Robotillasi on kyky etsiä mineraaleja erottamalla muodot, ohjata karua maastoa kallioanturien avulla ja sitä voidaan ohjata manuaalisesti live -syötteen avulla.

Vaihe 1: Tarvikkeet

Tarvikkeet
Tarvikkeet

Tätä projektia varten tarvitset iRobot Createin, joka on Roomba -robottipölynimurin ohjelmoitava versio. Robotissa on kaikki tähän projektiin tarvittavat anturit, erityisesti törmäysanturit, kallioanturit ja "Light Bump" -anturit. Tarvitset myös Raspberry Pi: n ja videokameran, jota käytetään langattomaan viestintään, live -ohjelmointiin ja live -videosyöteeseen. Lopuksi tarvitset 3D -tulostetun kiinnityksen Raspberry Pi: lle ja kameralle.

Vaihe 2: Kehitä koodaus halutun tuloksen tyydyttämiseksi

Kehitä koodaus halutun tuloksen tyydyttämiseksi
Kehitä koodaus halutun tuloksen tyydyttämiseksi

Kun olet yhdistänyt Roomban, sinun on luotava Matlab -koodi, joka antaa sinulle haluamasi lähdöt haluttujen tulojen jälkeen.

Koodi löytyy täältä:

%Roomba -projekti%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Ongelman kuvaus: Luo kulkuri auttamaan ihmisiä Marsin etsinnän/asumisen aikana. %Ratkaisumenetelmä: Etsi orgaanista (vihreää) ainetta käyttämällä %kevyitä puskureita, kalliosensoreita ja kameraa orgaanisten aineiden etsimiseksi. Anna %roverin navigoida epätasaisessa maastossa puskureiden, kallion %-anturien ja pyörän korkeusantureiden avulla. Salli ihmisten hallita kulkijaa %turvallisen matkan päästä ja etsiä mineraaleja manuaalisesti. options = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Kolme vaihtoehtoa valintaikkunassa Setting = menu ('', options) if Setting> 0 %Jos valittu vaihtoehto pyydä käyttäjän vahvistusvaihtoehtoja2 = {'Yes', 'No'} %Luo soluryhmä "kyllä" tai "Ei" "valinta Vahvista = valikko (['Valitsit"' vaihtoehdot {Asetus} "" -tila. '], valinnat2) %Vahvista käyttäjän asetusvalinta, jos Vahvista == 1 jos asetus == 1 %Tarkista, onko "LIFE" -asetus valittu i = 0 kun i == 0 r.setLEDDigits (num2str ('LIFE')) %Näyttää 'LIFE' LED: ssä i = 1: 100 r.setDriveVelocity (0,05) %Siirrä roombaa eteenpäin 0,05 m/sy = r.getCliffSensors %Nouta ja tallenna kallioanturien arvot solurakenteeseen "y" l = r.getLightBumpers %Nouda ja tallenna valon kohoamisarvot rakenteeseen "f", jos l. Vasen> 100 %Tarkista, onko vasen valopuskuri peitetty r.moveDistance (-0.05) %Siirrä roombaa taaksepäin 0,05 metriä r.turnAngle (20) %Kierrä roombaa 20 astetta CCW img = r.getImage %Hae kuva vadelmapiirakamerasta Roomba rect = [100 0 150 150]; img = imcrop (img, rect) %rajauskuva keskittääkseen punaisen keskelle = keskiarvo (keskiarvo (img (:,:, 1))) %keskimääräinen punainen intensiteetti vihreä = keskiarvo (keskiarvo (img (:,:, 2))) %keskimääräinen vihreä intensiteetti sininen = keskiarvo (keskiarvo (img (:,:, 3))) %keskimääräinen sininen intensiteetti, jos vihreä> punainen && vihreä> sininen %Tarkista, onko kasvi kuvassa d = msgbox (['Elämä löytyi! ']); %Näytä viestiruutu, jossa sanotaan "Elämä löytyi!" odota (d); end elseif l.leftFront> 100 %Tarkista, että vasen/etuvalo puskuri on peitetty r.moveDistance (-0.05) %Siirrä roombaa taaksepäin 0,05 metriä img = r.getImage %Hanki kuva vadelmapiirakamerasta Roomban ja tallenna muuttujaan img 'rect = [100 0 150 150]; img = imcrop (img, rect) %rajauskuva keskittääkseen punaisen keskelle = keskiarvo (keskiarvo (img (:,:, 1))) %keskimääräinen punainen intensiteetti vihreä = keskiarvo (keskiarvo (img (:,:, 2))) %keskimääräinen vihreä intensiteetti sininen = keskiarvo (keskiarvo (img (:,:, 3))) %keskimääräinen sininen intensiteetti, jos vihreä> punainen && vihreä> sininen %Tarkista, onko kasvi kuvassa d = msgbox (['Elämä löytyi! ']); %Näytä viestiruutu, jossa sanotaan "Elämä löytyi!" odota (d); end elseif l.leftCenter> 100 %Tarkista onko vasen/keskivalo puskuri peitetty r.moveDistance (-0.05) %Siirrä roombaa taaksepäin 0,05 metriä img = r.getImage %Hanki kuva vadelmapiirakamerasta Roomban ja tallenna muuttujaan img 'rect = [100 0 150 150]; img = imcrop (img, rect) %rajauskuva keskittääkseen punaisen keskelle = keskiarvo (keskiarvo (img (:,:, 1))) %keskimääräinen punainen intensiteetti vihreä = keskiarvo (keskiarvo (img (:,:, 2))) %keskimääräinen vihreä intensiteetti sininen = keskiarvo (keskiarvo (img (:,:, 3))) %keskimääräinen sininen intensiteetti, jos vihreä> punainen && vihreä> sininen %Tarkista, onko kasvi kuvassa d = msgbox (['Elämä löytyi! ']); %Näytä viestiruutu, jossa sanotaan "Elämä löytyi!" odota (d); end elseif l.rightCenter> 100 %Tarkista, onko oikean/keskivalon puskuri peitetty r.moveDistance (-0.05) %Siirrä roombaa taaksepäin 0,05 metriä img = r.getImage %Hanki kuva vadelmapiirakamerasta Roomban ja tallenna muuttujaan 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %rajauskuva keskittääkseen punaisen keskelle = keskiarvo (keskiarvo (img (:,:, 1))) %keskimääräinen punainen intensiteetti vihreä = keskiarvo (keskiarvo (img (:,:, 2))) %keskimääräinen vihreä intensiteetti sininen = keskiarvo (keskiarvo (img (:,:, 3))) %keskimääräinen sininen intensiteetti, jos vihreä> punainen && vihreä> sininen %Tarkista, onko kasvi kuvassa d = msgbox (['Elämä löytyi! ']); %Näytä viestiruutu, jossa sanotaan "Elämä löytyi!" odota (d); end elseif l.rightFront> 100 %Tarkista onko oikea/etuvalon puskuri peitetty r.moveDistance (-0.05) %Siirrä roombaa taaksepäin 0,05 metriä img = r.getImage %Hanki kuva vadelmapiirakamerasta roombassa ja tallenna muuttujaan img 'rect = [100 0 150 150]; img = imcrop (img, rect) %rajauskuva keskittääkseen punaisen keskelle = keskiarvo (keskiarvo (img (:,:, 1))) %keskimääräinen punainen intensiteetti vihreä = keskiarvo (keskiarvo (img (:,:, 2))) %keskimääräinen vihreä intensiteetti sininen = keskiarvo (keskiarvo (img (:,:, 3))) %keskimääräinen sininen intensiteetti, jos vihreä> punainen && vihreä> sininen %Tarkista, onko kasvi kuvassa d = msgbox (['Elämä löytyi! ']); %Näytä viestiruutu, jossa sanotaan "Elämä löytyi!" odota (d); end elseif l.right> 100 %Tarkista, onko oikeanpuoleinen puskuri peitetty r.moveDistance (-0,05) %Siirrä roombaa taaksepäin 0,05 metriä r.turnAngle (-20) %Kierrä roombaa 20 astetta CW img = r.getImage %Hae kuva vadelmapiirakamera Roomban päällä ja tallenna muuttujaan 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %rajauskuva keskittääkseen punaisen keskelle = keskiarvo (keskiarvo (img (:,:, 1))) %keskimääräinen punainen intensiteetti vihreä = keskiarvo (keskiarvo (img (:,:, 2))) %keskimääräinen vihreä intensiteetti sininen = keskiarvo (keskiarvo (img (:,:, 3))) %keskimääräinen sininen intensiteetti, jos vihreä> punainen && vihreä> sininen %Tarkista, onko kasvi kuvassa d = msgbox (['Elämä löytyi! ']); %Näytä viestiruutu, jossa sanotaan "Elämä löytyi!" odota (d); end elseif y.leftFront <1500 %Tarkista, onko roomban vasen/etuosa pois kallion r.moveDistance (-0,1, 0,05) %Siirrä roombaa taaksepäin 0,1 metriä nopeudella 0,05 m/s r.turnAngle (-5) %Kierrä roomba 5 astetta CW muu jos oikea Oikea Edessä <1500 %Tarkista, onko roomban oikea/etuosa kalliolta r.moveDistance (-0,1, 0,05) %Siirrä roombaa taaksepäin 0,1 metriä nopeudella 0,05 m/s r.nurnEngle (5) % astetta CCW muu jos vasen <1000 %Tarkista, onko roomban vasen puoli pois kalliolta r.moveDistance (-0,05, 0,05) %Siirrä roombaa taaksepäin 0,05 metriä 0,05 m/s r.nurnEngle (-10) % CW elseif y.right0 %Suorita, jos painiketta painetaan, jos Jatka == 1 i = 0 %Jatka elämän etsimistä i = 1 %Lopeta LIFE -tila Loppu Loppu Muu Asetus == 2 %Tarkista, onko "ROUGH TERRAIN" -asetus valittu i = 0, kun i == 0 r.setLEDDigits (num2str ('RGH')) %Näyttö 'Karkea' LED -näytössä, kun i = 1: 1000 r.setDriveVelocity (0,05) %Aseta roomban käyttönopeudeksi 0,05 m/sx = r.getBumpers %Nouda ja tallenna puskurianturin arvot rakenteeseen "x" y = r.get CliffSensors %Hae ja tallenna kalliosensorin arvot rakenteeseen "y", jos x.right == 1 %Tarkista, onko oikeanpuoleista puskuria painettu r.turnAngle (10) %Kierrä roombaa 10 astetta CCW muu, x.left == 1 %Tarkista, onko vasemmalla puskuria painetaan r.turnAngle (-10) %Kierrä roomba 10 astetta CW elseif x.front == 1 %Tarkista, onko etupuskuria painettu r.turnAngle (20) %Kierrä roomba 20 astetta CCW elseif x.rightWheelDrop == 1 % Tarkista, onko oikea pyörä laskenut r.turnAngle (-20) %Kierrä roombaa 20 astetta CW muu jos x.leftWheelDrop == 1 %Tarkista, onko vasen pyörä pudonnut r.turnAngle (20) %Käännä roomba 20 astetta vasemmalle vasemmalle eteen < 1500 %Tarkista, onko Roomban vasen etuosa pois kalliolta r.moveDistance (-0,05, 0,05) %Siirrä roombaa taaksepäin 0,05 metriä 0,05 m/s r.turnAngle (-5) %Kierrä roombaa 5 astetta CW muu jos oikea 1500 %Tarkista, onko Roomban oikea etuosa kalliolta r.move Etäisyys (-0,05, 0,05) %Siirrä roombaa taaksepäin 0,05 metriä 0,05 m/s kierrosnopeudella %Tarkista, onko vasen osa o f roomba on pois kalliolta r.moveDistance (-0,05, 0,05)%Siirrä roombaa taaksepäin 0,05 metriä 0,05 m/s r.turnAngle (-10)%Kierrä roombaa 10 astetta CW muu jos oikea 0 jos jatka == 1 i = 0 %Jatka epätasaa Liikkua; S - Stop Rover; ESC - loppukäyttäjän hallinta; A - Etsi resurssi ']); odota (d); kun i == 0 r.showCamera %Avaa vadelmapiirakameran live -syöte erillisessä ikkunassa D = getkey (1) %Hae näppäintä, jota käyttäjä painaa, tallenna ASCII -arvo muuttujaksi D, jos D == 30 %Tarkista, onko "ylös" -nuoli painettu r.setDriveVelocity (0,1) %Lähetä roomba eteenpäin nopeudella 0,2 m/s elseif D == 28 %Tarkista, painettiinko vasenta nuolta r.setDriveVelocity (0) %Pysäytä roomba siirtymästä eteen- tai taaksepäin r.turnAngle (15), 0.05) %Kierrä roombaa 45 astetta CCW nopeudella 0,05 m/s elseif D == 31 %Tarkista, painettiinko "alas" -nuolta r.setDriveVelocity (-0,1) %Siirrä roombaa taaksepäin nopeudella 0,2 m/s elseif D == 29 % Tarkista, painetaanko oikeaa nuolta r.setDriveVelocity (0) %Estää roomban liikkumisen eteenpäin tai taaksepäin r.turnAngle (-15, 0,05) %Kierrä roombaa 45 astetta CW nopeudella 0,05 m/s elseif D == 27 %Tarkista onko "esc" (paeta) -näppäintä painettiin 115 %Tarkista, onko "s" -näppäintä painettu r.setDriveVelocity (0) %Pysäytä roomba eteenpäin tai taaksepäin muu jos D == 97 %Tarkista onko "a" painettu image = r.getImage; imwrite (kuva, 'image.png') W = Luokittele (kuva) K = tila (W), jos K == 3 d = msgbox ('Resurssi löydetty') %Näyttää, jos suorakulmainen resurssi havaitaan odotus (d); %Odota, että käyttäjä sulkee viestiruudun "d" elseif K == 0 d = msgbox ('Not Resource:(') %Näyttää, jos suorakaiteen muotoista resurssia ei havaittu odota (d); %Odota, että käyttäjä sulkee viestiruudun "d" end else d = msgbox ('Ei kelvollinen avainsyöttö.') %Näyttö, jos käyttäjä sulkee "valitse asetus" -valikon odotus (d); %Odota, että käyttäjä sulkee viestiruudun "d" lopeta odotus (d); %Odota käyttäjä sulkee sanomaruudun "d" end end end else d = msgbox ('Goodbye') %Sano hyvästit, jos vaihtoehdot suljetaan odotus (d);

Vaihe 3: Testaus

Testaus
Testaus

Kun koodi on kirjoitettu, sinun on testattava Roombaasi. Vaikka koodisi saattaa vaikuttaa oikealta, monet arvoistasi, erityisesti värin tai muodon osalta, on muutettava, jotta ne voivat tunnistaa oikein objektit, jotka haluat Roomban tunnistavan.

Vaihe 4: Tarkkaile visuaalisia lähtöjä

Huomaa visuaaliset lähdöt
Huomaa visuaaliset lähdöt
Huomioi visuaaliset lähdöt
Huomioi visuaaliset lähdöt

On hyvin selvää, oletko onnistuneesti ohjelmoinut Roomban sen visuaalisten tulosten perusteella.

Lähdöt sisältävät:

  • Muoton tunnistus: Roomban kyky erottaa muodot oikein löytääkseen oikeat mineraalit
  • Karkean maaston harjoitukset: Välttää kallioita tai pimeitä alueita
  • Manuaalinen tila: Live -syöttö ja mahdollisuus ohjata Roombaa
  • Kuvat: Kuvia mineraaleista
  • Elämä löydetty !: MatLab -tekstiruutu, joka osoittaa, että kasvi on tunnistanut orgaanisen elämän.

Tämä on opetusohjelmamme loppu, nauti uudesta Mars Expedition Roveristasi!

Suositeltava: