Kazalo:

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

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

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

Ta navodila vas bodo naučila, kako nastaviti iRobot Create s kodiranjem MatLab. Vaš robot bo imel možnost iskanja mineralov z razlikovanjem oblik, manevriranjem po razgibanem terenu s pomočjo senzorjev pečine in z možnostjo ročnega upravljanja prek živega vira.

1. korak: Zaloge

Zaloge
Zaloge

Za ta projekt boste potrebovali iRobot Create, ki je programabilna različica robotskega sesalnika Roomba. Robot je opremljen z vsemi senzorji, ki so potrebni za ta projekt, zlasti senzorji udarcev, senzorji pečine in senzorji "Light Bump". Potrebovali boste tudi Raspberry Pi in video kamero, ki se uporablja za brezžično komunikacijo, programiranje v živo in video vir v živo. Nazadnje boste potrebovali 3D natisnjen nosilec za Raspberry Pi in kamero.

2. korak: Razvijte kodiranje, ki bo zadovoljilo želeni rezultat

Razvijte kodiranje, ki bo zadovoljilo želene rezultate
Razvijte kodiranje, ki bo zadovoljilo želene rezultate

Ko povežete Roombo, boste morali ustvariti kodo Matlab, ki vam bo po želenih vhodih dala želene izhode.

Kodo si lahko ogledate tukaj:

%Projekt Roomba%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Opis problema: Ustvarite rover za pomoč ljudem med %raziskovanja/bivanja na Marsu. %Metoda rešitve: Poiščite organske (zelene) snovi z uporabo %svetlobnih odbijačev, senzorjev pečin in kamere, da preverite organske snovi. Dovolite %roverju, da krmili po neravnem terenu z uporabo odbijačev, senzorjev za klif %in senzorjev višine koles. Omogočite ljudem nadzor nad roverjem z %varne razdalje in ročno iskanje mineralov. choices = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Tri možnosti v pogovornem meniju Nastavitev = meni ('', izbire), če je Nastavitev> 0 %Če je izbrana možnost, vprašajte za potrditev uporabnika2 = {'Da', 'Ne'} %Ustvarite niz celic za "da" ali "ne "Izbira Potrdi = meni (['Izbrali ste' 'način izbire {Nastavitev}'". '], možnosti 2) %Potrdite izbiro uporabniške nastavitve, če potrdite == 1, če je nastavitev == 1 %Preverite, če je bila izbrana nastavitev "LIFE" i = 0 medtem ko je i == 0 r.setLEDDigits (num2str ('LIFE')) %Prikažite 'LIFE' na LED za i = 1: 100 r.setDriveVelocity (0,05) %Premaknite roombo naprej pri 0,05 m/sy = r.getCliffSensors %Pridobite in shranite vrednosti senzorja pečine v celični strukturi "y" l = r.getLightBumpers %Pridobite in shranite vrednosti svetlobnih udarcev v strukturi "f", če je l.levo> 100 %Preverite, ali je odbijač leve luči pokrit r.moveDistance (-0.05) %Premakni roombo nazaj za 0,05 metra r.turnAngle (20) %Zavrti roombo za 20 stopinj CCW img = r.getImage %Pridobite sliko iz fotoaparata Rasberry Pie na roomba rect = [100 0 150 150]; img = imcrop (img, rect) %obrezane slike, da se osredotoči na sredino rdeča = srednja (srednja (img (:,:, 1))) %povprečna intenzivnost rdeče zelena = srednja (srednja (img (:,:, 2))) %povprečna intenzivnost zelene barve modra = povprečna (povprečna (img (:,:, 3))) %povprečna intenzivnost modre barve, če je zelena> rdeča && zelena> modra %Preverite, ali je rastlina na sliki d = msgbox (['Življenje najdeno! ']); %Prikažite polje s sporočilom "Življenje najdeno!" počakajte (d); end elseif l.leftFront> 100 %Check is left/sprednji odbijač luči je pokrit r.moveDistance (-0,05) %Premakni roombo nazaj 0,05 metra img = r.getImage %Pridobite sliko iz kamere Rasberry Pie na roombi in jo shranite v spremenljivo 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %obrezovanja slike, da se osredotoči na sredino rdeča = povprečje (povprečje (img (:,:, 1))) %povprečna intenzivnost rdeče zelena = povprečje (povprečje (img (:,:, 2))) %povprečna intenzivnost zelene barve modra = povprečna (povprečna (img (:,:, 3))) %povprečna intenzivnost modre barve, če je zelena> rdeča && zelena> modra %Preverite, ali je rastlina na sliki d = msgbox (['Življenje najdeno! ']); %Prikažite polje s sporočilom "Življenje najdeno!" počakajte (d); end elseif l.leftCenter> 100 %Preverite, če je levi/sredinski odbijač pokrit r.moveDistance (-0,05) %Premaknite roombo nazaj 0,05 metra img = r.getImage %Pridobite sliko iz kamere Rasberry Pie na roombi in jo shranite v spremenljivko 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %obrezovanja slike, da se osredotoči na sredino rdeča = povprečje (povprečje (img (:,:, 1))) %povprečna intenzivnost rdeče zelena = povprečje (povprečje (img (:,:, 2))) %povprečna intenzivnost zelene barve modra = povprečna (povprečna (img (:,:, 3))) %povprečna intenzivnost modre barve, če je zelena> rdeča && zelena> modra %Preverite, ali je rastlina na sliki d = msgbox (['Življenje najdeno! ']); %Prikažite polje s sporočilom "Življenje najdeno!" počakajte (d); end elseif l.rightCenter> 100 %Preverite, ali je desni/sredinski odbijač pokrit r.moveDistance (-0.05) %Premaknite roombo nazaj 0,05 metra img = r.getImage %Pridobite sliko iz kamere Rasberry Pie na roombi in jo shranite v spremenljivko 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %obrezane slike, da se osredotoči na sredino rdeča = srednja (srednja (img (:,:, 1))) %povprečna intenzivnost rdeče zelena = srednja (srednja (img (:,:, 2))) %povprečna intenzivnost zelene barve modra = povprečna (povprečna (img (:,:, 3))) %povprečna intenzivnost modre barve, če je zelena> rdeča && zelena> modra %Preverite, ali je rastlina na sliki d = msgbox (['Življenje najdeno! ']); %Prikažite polje s sporočilom "Življenje najdeno!" počakajte (d); end elseif l.rightFront> 100 %Preverite, ali je desni/sprednji odbijač luči pokrit r.moveDistance (-0.05) %Premaknite roombo nazaj 0,05 metra img = r.getImage %Pridobite sliko iz kamere Rasberry Pie na roombi in jo shranite v spremenljivo 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %obrezovanja slike, da se osredotoči na sredino rdeča = povprečje (povprečje (img (:,:, 1))) %povprečna intenzivnost rdeče zelena = povprečje (povprečje (img (:,:, 2))) %povprečna intenzivnost zelene barve modra = povprečna (povprečna (img (:,:, 3))) %povprečna intenzivnost modre barve, če je zelena> rdeča && zelena> modra %Preverite, ali je rastlina na sliki d = msgbox (['Življenje najdeno! ']); %Prikažite polje s sporočilom "Življenje najdeno!" počakajte (d); end elseif l.right> 100 %Preverite, ali je desni odbijač pokrit r.moveDistance (-0.05) %Premaknite roombo nazaj 0,05 metra r.turnAngle (-20) %Rotate roomba 20 stopinj CW img = r.getImage %Get image from fotoaparat rasberry pie na roombi in shrani v spremenljivki 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %obrezane slike, da se osredotoči na sredino rdeča = srednja (srednja (img (:,:, 1))) %povprečna intenzivnost rdeče zelena = srednja (srednja (img (:,:, 2))) %povprečna intenzivnost zelene barve modra = povprečna (povprečna (img (:,:, 3))) %povprečna intenzivnost modre barve, če je zelena> rdeča && zelena> modra %Preverite, ali je rastlina na sliki d = msgbox (['Življenje najdeno! ']); %Prikažite polje s sporočilom "Življenje najdeno!" počakajte (d); end elseif y.leftFront <1500 %Preverite, ali je levi/sprednji del roombe izven pečine r.moveDistance (-0,1, 0,05) %Premaknite roombo nazaj 0,1 metra pri 0,05 m/s r.turnAngle (-5) %Rotate roomba 5 stopinje CW sicer, če je desno Spredaj <1500 %Preverite, ali je desni/sprednji del roombe izven pečine r.moveDistance (-0,1, 0,05) %Premaknite roombo nazaj 0,1 metra pri 0,05 m/s r.turnAngle (5) %Rotate roomba 5 stopinj CCW sicer, če je levo <1000 %Preverite, ali je leva stran roombe od pečine r.moveDistance (-0.05, 0.05) %Roomba premaknite nazaj 0,05 metra pri 0,05 m/s r.turnAngle (-10) %Rotate roomba 10 stopinj CW elseif y.right0 %Run, če pritisnete gumb, če Continue == 1 i = 0 %Nadaljujte z iskanjem življenja else i = 1 %End LIFE mode end end end elseif Nastavitev == 2 %Preverite, če je bila izbrana nastavitev "ROUGH TERRAIN" i = 0, medtem ko je i == 0 r.setLEDDigits (num2str ('RGH')) %Prikaz 'Rough' na LED zaslonu za i = 1: 1000 r.setDriveVelocity (0,05) %Nastavite hitrost pogona roomba na 0,05 m/sx = r.getBumpers %Pridobite in shranite vrednosti senzorja odbijača v strukturi "x" y = r.get CliffSensors %Pridobite in shranite vrednosti senzorja pečine v strukturi "y", če je x.right == 1 %Preverite, če je pritisnjen desni odbijač r.turnAngle (10) %Zavrtite roombo za 10 stopinj CCW drugače x.left == 1 %Preverite, če je levo odbijač je pritisnjen r.turnAngle (-10) %Zavrtite roombo za 10 stopinj CW sicer xi spredaj == 1 %Preverite, če je prednji odbijač pritisnjen r.turnAngle (20) %Zavrtite roombo za 20 stopinj CCW drugače x.rightWheelDrop == 1 % Preverite, če je desno kolo padlo r.turnAngle (-20) %Zavrtite roombo za 20 stopinj CW drugače, če x.leftWheelDrop == 1 %Preverite, ali je levo kolo padlo r.turnAngle (20) %Zavrtite roombo za 20 stopinj CCW drugače, če y.leftFront < 1500 %Preverite, ali je sprednji levi del roombe izven pečine r.moveDistance (-0.05, 0.05) %Premaknite roombo nazaj 0,05 metra pri 0,05 m/s r.turnAngle (-5) %Zavrtite roombo za 5 stopinj CW, sicer g. Desno spredaj < 1500 %Preverite, ali je desni sprednji del roombe izven pečine r.moveDistance (-0.05, 0.05) %Premaknite roombo nazaj 0,05 metra pri 0,05 m/s r.turnAngle (5) %Roomba zavrtite za 5 stopinj CCW sicer levo <1000 %Preverite, če je levi del o f roomba je izven pečine r.moveDistance (-0.05, 0.05)%Premaknite roombo nazaj 0,05 metra pri 0,05 m/s r.turnAngle (-10)%Zavrtite roombo za 10 stopinj CW drugače, če y.right0, če nadaljujete == 1 i = 0 %Nadaljuj po neravnem terenu else i = 1 %End end the end end end end else %Ročni način i = 0 r.setLEDDigits (num2str ('USER'))) %Prikaz 'USER' na LED zaslonu d = msgbox (['Puščične tipke - Premakni se; S - Stop Rover; ESC - Nadzor končnih uporabnikov; A - Poišči vir ']); počakajte (d); medtem ko je i == 0 r.showCamera %Odprite vir kamere Rasberry Pie v živo v ločenem oknu D = getkey (1) %Pridobite tipko za pridobivanje, shranite vrednost ASCII kot spremenljivko D, če je D == 30 %Preverite, ali ima puščica "gor" pritisnjeno r.setDriveVelocity (0,1) %Pošlji roombo naprej pri 0,2 m/s sicer, če je D == 28 %Preverite, če je bila pritisnjena puščica "levo" r.setDriveVelocity (0) %Ustavite roombo pri premikanju naprej ali nazaj r.turnAngle (15, 0,05) %Zavrtite roombo za 45 stopinj CCW pri 0,05 m/s drugače, če je D == 31 %Preverite, če je bila pritisnjena puščica navzdol r.setDriveVelocity (-0,1) %Premaknite roombo nazaj pri 0,2 m/s, sicer D == 29 % Preverite, ali je pritisnjena puščica "desno" r.setDriveVelocity (0) %Ustavite roombo pri premikanju naprej ali nazaj r.turnAngle (-15, 0,05) %Zavrtite roombo za 45 stopinj CW pri 0,05 m/s, sicer D == 27 %Preverite, če pritisnjena je bila tipka "esc" (pobeg) i = 1 %Spremeni vrednost spremenljivke "i" za izhod iz zanke d = msgbox ('Izhod iz "Uporabniškega nadzora"') %Uporabniku sporočite, da izstopa iz ročnega načina sicer Di = D 115 %Preverite, če je bila pritisnjena tipka "s" r.setDriveVelocity (0) %Ustavite roombo od gre naprej ali nazaj, če je D == 97 %Preverite, če je bil pritisnjen "a" image = r.getImage; imwrite (image, 'image.png') W = Razvrsti (slika) K = način (W), če je K == 3 d = msgbox ('Vir najden') %Prikaz, če je pravokotni vir zaznan čaka na (d); %Počakajte, da uporabnik zapre polje s sporočilom "d" elseif K == 0 d = msgbox ('Not Resource:(') %Prikažite, če pravokotni vir ni zaznan waitfor (d); %Počakajte, da uporabnik zapre polje s sporočilom "d" end else d = msgbox ('Ni veljaven vnos ključa.') %Prikaz, če uporabnik zapre meni "izberite nastavitev" waitfor (d); %Počakajte, da uporabnik zapre polje s sporočilom "d" end waitf (d); %Wait for uporabnik zapre okno s sporočilom "d" end end end else d = msgbox ('Nasvidenje') %Poslovi se, če so možnosti zaprte in konča waitfor (d);

3. korak: Testiranje

Testiranje
Testiranje

Ko bo vaša koda napisana, boste morali preizkusiti svojo Roombo. Čeprav se vaša koda morda zdi pravilna, bo treba številne vaše vrednosti, zlasti glede barve ali oblike, spremeniti, da boste lahko pravilno prepoznali predmete, za katere želite, da jih prepozna vaša Roomba.

4. korak: Opazujte vizualne izhode

Opazujte vizualne izhode
Opazujte vizualne izhode
Opazujte vizualne izhode
Opazujte vizualne izhode

Zelo očitno bo, ali ste Roombo uspešno programirali na podlagi njenih vizualnih izhodov.

Izhodi vključujejo:

  • Zaznavanje oblike: Sposobnost Roombe, da pravilno razlikuje oblike, da bi našel prave minerale
  • Manevri po grobem terenu: Izogiba se pečinam ali temnim območjem
  • Ročni način: prenos v živo in možnost upravljanja Roombe
  • Slike: Slike mineralov
  • Life Found !: besedilno polje MatLab, ki označuje, da je vaša rastlina identificirala organsko življenje.

To je konec naše vadnice, uživajte v svojem novem Mars Expedition Roverju!

Priporočena: