Sisukord:
- Samm: tarvikud
- Samm: arendage soovitud tulemuse rahuldamiseks kodeerimine
- 3. samm: testimine
- 4. samm: jälgige visuaalseid väljundeid
Video: IRobot Create-Mars Expedition Rover Mark I: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
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
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
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
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
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:
Black Lives on oluline elektrooniliste kerivate nimede märk: 5 sammu
Black Lives Matter Elektrooniliselt kerivate nimede märk: kampaaniad #perekonnanimi, #ütlejanimi ja #ütle nende nimi annavad teadlikkust mustanahaliste inimeste nimedele ja lugudele, kes on rassistliku politseivägivalla ohvriks langenud, ning julgustab rassilise õigluse propageerimist. Lisateavet nõudmiste kohta ja
Raudmehe Mark II kiiver: 4 sammu
Iron Man Mark II kiiver: Casco réplica mark II, 2 osa, casco y pulsera unidos por cadena que Conduce El Cableado, Alimentado por 4 patareid AA ubicadas ja la parte posterior junto al microcontrolador y el switch de encendido. y apert
Elektriline LED -märk: 4 sammu
Elektriline LED -märk: Halloween on lähenemas. Kas teil on mõtteid kaunistamisest ja riietumisest? See on suurepärane, kui teil on eksklusiivne elektriline led -märk. Seetõttu arutame täna, kuidas sellist elektrilist märki valmistada
Elektrooniline märk LED vilkuv robotmärk - jootekomplekt: 11 sammu
Elektroonilise märgi LED -i vilkuv robotimärk - jootekomplekt: seda artiklit sponsoreerib uhkelt PCBWAY. PCBWAY valmistab kõrgekvaliteedilisi PCB -de prototüüpe inimestele kogu maailmas. Proovige seda ise ja hankige PCBWAY -lt 10 suurepärase kvaliteediga 10 PCB -d vaid 5 dollari eest, aitäh PCBWAY. Robadge#1, mille töötasin välja
IRobot Create käsumooduli kasutamine Linuxiga: 4 sammu
IRobot Create käsumooduli kasutamine Linuxiga: Kuna iRobot ei ole Linuxi kasutajatele käsumooduli kasutamist võimaldanud, pidin selle ise välja mõtlema. Ärge kartke, see pole üldse raske. Kõik, mida pead tegema, on käivitada paar skripti. Alustame, eks?