Sisukord:

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

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

Video: IRobot Create-Mars Expedition Rover Mark I: 4 sammu
Video: What Artificial Intelligence thinks thinks the last day on earth might look like..| scary| 😮‍💨😰😱 2024, Juuli
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

See juhend õpetab teile, kuidas seadistada iRobot Create MatLabi kodeeringu abil. Teie robotil on võimalus otsida mineraale, eristades kujundeid, manööverdada ebatasasel maastikul kaljuandurite abil ja tal on võimalus otseülekande kaudu käsitsi juhtida.

Samm: tarvikud

Tarvikud
Tarvikud

Selle projekti jaoks vajate iRobot Create'i, mis on Roomba robottolmuimeja programmeeritav versioon. Robot on varustatud kõigi selle projekti jaoks vajalike anduritega, eriti põrkumisanduritega, kaljuanduritega ja "Light Bump" anduritega. Teil on vaja ka Raspberry Pi ja videokaamerat, mida kasutatakse traadita side, reaalajas programmeerimise ja reaalajas videovoo jaoks. Lõpuks vajate 3D -prinditud kinnitust Raspberry Pi ja kaamera jaoks.

Samm: arendage soovitud tulemuse rahuldamiseks kodeerimine

Arendage soovitud tulemuse rahuldamiseks kodeerimist
Arendage soovitud tulemuse rahuldamiseks kodeerimist

Kui olete oma Roomba ühendanud, peate looma Matlabi koodi, mis annab teile soovitud väljundid pärast soovitud sisendeid.

Koodi saab näha siit:

%Roomba projekt%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal) %4/11/19 %Probleemi kirjeldus: Looge kulgur, et aidata inimesi Marsi uurimise/asustamise ajal. %Lahendusmeetod: otsige orgaanilist (rohelist) ainet, kasutades %kergeid kaitseraudi, kaljuandureid ja kaamerat, et kontrollida orgaanilist ainet. Luba %-il roveril põrkeraudade, kalju %andurite ja ratta kõrguse andurite abil ebatasasel maastikul liikuda. Luba inimestel juhtida roverit %turvalise kauguse kaugusel ja otsida käsitsi mineraale. options = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Dialoogimenüü kolm valikut Setting = menu ('', options) if Setting> 0 %Kui valitud valik küsi kasutaja kinnitusvalikuid2 = {'Yes', 'No'} %Loo lahtrimassiiv jah või Ei "valik Kinnita = menüü (['Valisite"' valikud {Setting} '"režiim.'], valikud2) %Kinnitage kasutaja seadete valik, kui Kinnita == 1 kui seade == 1 %Kontrollige, kas seade" LIFE "on valitud i = 0, samas kui i == 0 r.setLEDDigits (num2str ('LIFE')) %Kuvab 'LIFE' LED -i korral, kui i = 1: 100 r.setDriveVelocity (0.05) %Liigutage roomba edasi kiirusel 0,05 m/sy = r.getCliffSensors %Kaljuanduri väärtuste hankimine ja salvestamine rakustruktuuris "y" l = r.getLightBumpers %Otsige ja salvestage kergete löökide väärtused struktuuris "f", kui l.left> 100 %Kontrollige, kas vasakpoolne põrkeraud on kaetud r.moveDistance (-0.05) %Roomba tahapoole nihutamine 0,05 meetrit r.turnAngle (20) %Roomba pööramine 20 kraadi CCW img = r.getImage %Hangi pilt vaarika pirukakaamerast ruumis rect = [100 0 150 150]; img = imcrop (img, rect) %kärpimispilt, et keskenduda punasele keskele = keskmine (keskmine (img (:,:, 1))) %keskmine punane intensiivsus roheline = keskmine (keskmine (img (:,:, 2))) %keskmine roheline intensiivsus sinine = keskmine (keskmine (img (:,:, 3))) %keskmine sinine intensiivsus, kui roheline> punane && roheline> sinine %Kontrollige, kas taim on pildil d = msgbox (['Elu leitud! ']); %Kuva sõnumikast "Elu leitud!" ootama (d); end elseif l.leftFront> 100 %Kontrollige, kas vasak/esitulede kaitseraud on kaetud 'rect = [100 0 150 150]; img = imcrop (img, rect) %kärpimispilt, et keskenduda punasele keskele = keskmine (keskmine (img (:,:, 1))) %keskmine punane intensiivsus roheline = keskmine (keskmine (img (:,:, 2))) %keskmine roheline intensiivsus sinine = keskmine (keskmine (img (:,:, 3))) %keskmine sinine intensiivsus, kui roheline> punane && roheline> sinine %Kontrollige, kas taim on pildil d = msgbox (['Elu leitud! ']); %Kuva sõnumikast "Elu leitud!" ootama (d); end elseif l.leftCenter> 100 %Kontrollige, kas vasak-/keskvalgusti kaitseraud on kaetud r.moveDistance (-0,05) %Liigutage roomba tahapoole 0,05 meetrit 'rect = [100 0 150 150]; img = imcrop (img, rect) %kärpimispilt, et keskenduda punasele keskele = keskmine (keskmine (img (:,:, 1))) %keskmine punane intensiivsus roheline = keskmine (keskmine (img (:,:, 2))) %keskmine roheline intensiivsus sinine = keskmine (keskmine (img (:,:, 3))) %keskmine sinine intensiivsus, kui roheline> punane && roheline> sinine %Kontrollige, kas taim on pildil d = msgbox (['Elu leitud! ']); %Kuva sõnumikast "Elu leitud!" ootama (d); end elseif l.rightCenter> 100 %Kontrollige, kas parempoolne/keskvalgusti kaitseraud on kaetud r.moveDistance (-0,05) %Liigutage roomba tahapoole 0,05 meetrit 'rect = [100 0 150 150]; img = imcrop (img, rect) %kärpitud pilt, et keskenduda punasele keskele = keskmine (keskmine (img (:,:, 1))) %keskmine punane intensiivsus roheline = keskmine (keskmine (img (:,:, 2))) %keskmine roheline intensiivsus sinine = keskmine (keskmine (img (:,:, 3))) %keskmine sinine intensiivsus, kui roheline> punane && roheline> sinine %Kontrollige, kas taim on pildil d = msgbox (['Elu leitud! ']); %Kuva sõnumikast "Elu leitud!" ootama (d); end elseif l.rightFront> 100 %Kontrollige, kas parempoolne/esitulede kaitseraud on kaetud 'rect = [100 0 150 150]; img = imcrop (img, rect) %kärpitud pilt, et keskenduda punasele keskele = keskmine (keskmine (img (:,:, 1))) %keskmine punane intensiivsus roheline = keskmine (keskmine (img (:,:, 2))) %keskmine roheline intensiivsus sinine = keskmine (keskmine (img (:,:, 3))) %keskmine sinine intensiivsus, kui roheline> punane && roheline> sinine %Kontrollige, kas taim on pildil d = msgbox (['Elu leitud! ']); %Kuva sõnumikast "Elu leitud!" ootama (d); end elseif l.right> 100 %Kontrollige, kas parempoolne põrkeraud on kaetud vaarika pirukakaamera roomba ja salvestage muutujaga 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %kärpimispilt, et keskenduda punasele keskele = keskmine (keskmine (img (:,:, 1))) %keskmine punane intensiivsus roheline = keskmine (keskmine (img (:,:, 2))) %keskmine roheline intensiivsus sinine = keskmine (keskmine (img (:,:, 3))) %keskmine sinine intensiivsus, kui roheline> punane && roheline> sinine %Kontrollige, kas taim on pildil d = msgbox (['Elu leitud! ']); %Kuva sõnumikast "Elu leitud!" ootama (d); end elseif y.leftFront <1500 %Kontrollige, kas roomba vasak/eesmine osa on kaljult r.moveDistance (-0,1, 0,05) %Liigutage roomba tahapoole 0,1 meetrit 0,05 m/s r.turnAngle (-5) %Pööra roomba 5 kraad CW muu kui paremal Esikülg <1500 %Kontrollige, kas roomba parem/eesmine osa on kaljult r.moveDistance (-0,1, 0,05) %Liigutage roomba tahapoole 0,1 meetrit kiirusel 0,05 m/s kraadi CCW muu kui vasakul <1000 %Kontrollige, kas roomba vasak külg ei ole kaljult r.move CW elseif y.right0 %Käivita, kui nuppu vajutatakse, kui Jätka == 1 i = 0 %Jätkake elu otsimist i = 1 %LIFE -režiimi lõpp end end end else Setting == 2 %Kontrollige, kas seade "ROUGH TERRAIN" on valitud i = 0, samas kui i == 0 r.setLEDDigits (num2str ('RGH')) %Kuvab 'Kare' LED -ekraanil, kui i = 1: 1000 r.setDriveVelocity (0,05) %Seadistage roomba ajami kiiruseks 0,05 m/sx = r.getBumpers %Otsige ja salvestage kaitseraua anduri väärtused struktuuri "x" y = r.get CliffSensors %Leidke ja salvestage kaljuanduri väärtused struktuuris "y", kui x.right == 1 %Kontrollige, kas parempoolne kaitseraud on vajutatud kaitseraud on vajutatud r.turnAngle (-10) %Pööra roomba 10 kraadi CW elseif x.front == 1 %Kontrolli, kas esikaitseraud on vajutatud r.turnAngle (20) %Pööra roomba 20 kraadi CCW elseif x.rightWheelDrop == 1 % Kontrollige, kas parem ratas on langenud r.turnAngle (-20) %Pööra roomba 20 kraadi CW elseif x.leftWheelDrop == 1 %Kontrollige, kas vasak ratas on kukkunud r.turnAngle (20) %Pööra ruumi 20 kraadi CCW muu kui vasakule ees < 1500 %Kontrollige, kas roomba eesmine vasakpoolne osa on kalju r.move kaugusel 1500 %Kontrollige, kas roomba parempoolne esiosa ei ole kaljult r.moveKaugus (-0,05, 0,05) %Liigutage roomba tahapoole 0,05 meetrit 0,05 m/s pöördel.nurk (5) %Pöörake roomba 5 kraadi CCW vasakule <1000 %Kontrollige, kas vasak osa on o f roomba ei ole kaljult r.move %Jätka ebatasasel maastikul muidu i = 1 %Lõpeta ebatasane maastik otsa lõpp muidu %Käsirežiim i = 0 r.setLEDDigits (num2str ('USER')) %Kuva 'USER' LED -ekraanil d = msgbox (['Nooleklahvid - Liiguta; S - peatage Rover; ESC - lõppkasutaja kontroll; A - leidke ressurss ']); ootama (d); samas i == 0 r.showCamera %Ava vaarikapiruka kaamera otseülekanne eraldi aknas D = getkey (1) %Kasutaja vajutatud allalaadimisnupp, salvesta ASCII väärtus muutujana D, kui D == 30 %Kontrolli, kas nool "üles" on vajutatud r.setDriveVelocity (0,1) %Saada roomba edasi kiirusega 0,2 m/s elseif D == 28 %Kontrollige, kas vasakpoolset noolt on vajutatud r.setDriveVelocity (0) %Peatage roomba liikumine edasi või tagasi, 0,05) %Pöörake roomba 45 kraadi CCW kiirusel 0,05 m/s elseif D == 31 %Kontrollige, kas "alla" noolt on vajutatud r.setDriveVelocity (-0,1) %Liigutage Roomba tahapoole kiirusel 0,2 m/s Kontrollige, kas "paremat" noolt on vajutatud. vajutati klahvi "esc" (escape) 115 %Kontrollige, kas klahvi "s" on vajutatud r.setDriveVelocity (0) %Peata roomba alates edasi või tagasi minek muidu D == 97 %Kontrollige, kas "a" on vajutatud image = r.getImage; imwrite (pilt, 'image.png') W = Klassifitseeri (pilt) K = režiim (W), kui K == 3 d = msgbox ('Leitud ressurss') %Kuvatakse, kui ristkülikukujuline ressurss tuvastatakse ootamiseks (d); %Oodake, kuni kasutaja sulgeb sõnumikasti "d" elseif K == 0 d = msgbox ('Not Resource:(') %Kuvatakse, kui ristkülikukujulist ressurssi ei tuvastatud ootab (d); %Oodake, kuni kasutaja sulgeb sõnumikasti "d" end else d = msgbox ('Pole kehtiv klahvisisend.') %Kuvatakse, kui kasutaja sulgeb menüü "vali säte" ootab (d); %Oota, kuni kasutaja sulgeb sõnumikasti "d" lõpeta ootamine (d); %oota kasutaja sulgeb sõnumikasti "d" lõpp -lõpp muidu d = msgbox ('Goodbye') %Jätab hüvasti, kui suvandid on suletud lõpus oota (d);

3. samm: testimine

Testimine
Testimine

Kui teie kood on kirjutatud, peate oma Roomba testima. Kuigi teie kood võib tunduda õige, tuleb palju teie väärtusi, eriti värvi või kuju osas, muuta, et õigesti ära tunda objektid, mida soovite, et teie Roomba tuvastaks.

4. samm: jälgige visuaalseid väljundeid

Jälgige visuaalseid väljundeid
Jälgige visuaalseid väljundeid
Jälgige visuaalseid väljundeid
Jälgige visuaalseid väljundeid

On väga ilmne, kas olete Roomba visuaalsete väljundite põhjal edukalt programmeerinud või mitte.

Väljundite hulka kuuluvad:

  • Kuju tuvastamine: Roomba oskus kujundeid õigesti eristada, et leida õiged mineraalid
  • Kareda maastiku manöövrid: väldib kaljusid või pimedaid alasid
  • Käsirežiim: otseülekanne ja võimalus Roomba juhtimiseks
  • Pildid: Pildid mineraalidest
  • Elu leitud !: tekstikast MatLab, mis näitab, et teie taim on tuvastanud orgaanilise elu.

Sellega on meie õpetus lõppenud, nautige oma uut Mars Expedition Roverit!

Soovitan: