Turinys:
- 1 žingsnis: reikmenys
- 2 žingsnis: sukurkite kodavimą, kad patenkintumėte pageidaujamus rezultatus
- 3 žingsnis: bandymas
- 4 žingsnis: stebėkite vaizdo išvestis
Video: „IRobot Create-Mars Expedition Rover Mark I“: 4 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Ši instrukcija mokys jus, kaip nustatyti „iRobot Create“naudojant „MatLab“kodavimą. Jūsų robotas galės ieškoti mineralų, išskirdamas figūras, manevruoti nelygią reljefą naudodamas uolų jutiklius, ir gali būti valdomas rankiniu būdu naudojant tiesioginį srautą.
1 žingsnis: reikmenys
Šiam projektui jums reikės „iRobot Create“, kuri yra programuojama „Roomba“dulkių siurblio versija. Robotas aprūpintas visais šiam projektui reikalingais jutikliais, ypač smūgių jutikliais, uolų jutikliais ir „Light Bump“jutikliais. Jums taip pat reikės „Raspberry Pi“ir vaizdo kameros, naudojamos belaidžiam ryšiui, tiesioginiam programavimui ir tiesioginiam vaizdo įrašui. Galiausiai jums reikės 3D spausdinto laikiklio „Raspberry Pi“ir fotoaparatui.
2 žingsnis: sukurkite kodavimą, kad patenkintumėte pageidaujamus rezultatus
Prijungę „Roomba“, turėsite sukurti „Matlab“kodą, kuris po norimų įvesties suteiks norimus rezultatus.
Kodą galima pamatyti čia:
%Roomba projektas%Brentenas Arnoldas (barnol15); Julianne Korn („qdp218“); Mike Heal (mheal) %4/11/19 %Problemos aprašymas: Sukurkite roverį, kuris padėtų žmonėms tiriant/apgyvendinant Marsą. %Sprendimo metodas: ieškokite organinių (žaliųjų) medžiagų naudodami %šviesos buferių, uolų jutiklių ir fotoaparato, kad patikrintumėte, ar nėra organinių medžiagų. Leiskite %roveriui važiuoti nelygiu reljefu naudojant buferius, uolų %jutiklius ir ratų aukščio jutiklius. Leiskite žmonėms valdyti roverį iš %saugaus atstumo ir rankiniu būdu ieškoti mineralų. pasirinkimai = {'LIFE', 'ROUGH TERRAIN', 'USER CONTROL'}; %Trys parinktys dialogo meniu Nustatymas = meniu ('', pasirinkimai), jei nustatymas> 0 %Jei pasirinkta parinktis, prašykite vartotojo patvirtinimo pasirinkimų2 = {'Taip', 'Ne'} %Sukurkite langelių masyvą „taip“arba „Ne“"pasirinkimas Patvirtinti = meniu (['Jūs pasirinkote" pasirinkimus {Nustatymas} "režimas.'], pasirinkimai2) %Patvirtinkite vartotojo nustatymo pasirinkimą, jei Patvirtinti == 1 jei Nustatymas == 1 %Patikrinkite, ar pasirinktas" LIFE "nustatymas i = 0, o i == 0 r.setLEDDigits (num2str („LIFE“)) %Rodyti „LIFE“šviesos diodo šviesoje, kai i = 1: 100 r.setDriveVelocity (0.05) %Perkelkite kambarį į priekį 0,05 m/sy = r.getCliffSensors %Gauti ir išsaugoti uolos jutiklių vertes ląstelių struktūroje "y" l = r.getLightBumpers %Gauti ir išsaugoti šviesos smūgių vertes struktūroje "f", jei l.left> 100 %Patikrinkite, ar kairysis šviesos buferis yra padengtas r.moveDistance (-0.05) %Perkelti „roomba“atgal 0,05 metro r.turnAngle (20) %Pasukti „roomba“20 laipsnių kampu į dešinę pusę img = r.getImage %Gauti vaizdą iš aviečių pyrago kameros „roomba rect“= [100 0 150 150]; img = imcrop (img, rect) %apkarpytas vaizdas, sutelkiant dėmesį į raudoną centrą = vidurkis (vidurkis (img (:,:, 1))) %vidutinis raudonos spalvos intensyvumas žalias = vidurkis (vidurkis (img (:,:, 2))) %vidutinis žalios spalvos intensyvumas mėlynas = vidurkis (vidurkis (img (:,:, 3))) %vidutinis mėlynos spalvos intensyvumas, jei žalias> raudonas ir žalias> mėlynas %Patikrinkite, ar augalas yra paveikslėlyje d = msgbox (['Gyvenimas rastas! ']); %Rodyti pranešimų laukelį, kuriame sakoma: „Gyvenimas rastas!“laukti (d); end elseif l. left 'rect = [100 0 150 150]; img = imcrop (img, rect) %apkarpytas vaizdas, skirtas sutelkti dėmesį į raudoną centrą = vidurkis (vidurkis (img (:,:, 1))) %vidutinis raudonos spalvos intensyvumas žalia = vidurkis (vidurkis (img (:,:, 2))) %vidutinis žalios spalvos intensyvumas mėlynas = vidurkis (vidurkis (img (:,:, 3))) %vidutinis mėlynos spalvos intensyvumas, jei žalias> raudonas ir žalias> mėlynas %Patikrinkite, ar augalas yra paveikslėlyje d = msgbox (['Gyvenimas rastas! ']); %Rodyti pranešimų laukelį, kuriame sakoma: „Gyvenimas rastas!“laukti (d); end elseif l.leftCenter> 100 %Patikrinkite, ar kairysis/centrinis šviesos buferis yra uždengtas r.moveDistance (-0.05) %Perkelkite „roomba“atgal 0,05 metro img = r.getImage %Gaukite vaizdą iš aviečių pyrago kameros „roomba“ir išsaugokite kintamajame 'img 'rect = [100 0 150 150]; img = imcrop (img, rect) %apkarpytas vaizdas, sutelkiant dėmesį į raudoną centrą = vidurkis (vidurkis (img (:,:, 1))) %vidutinis raudonos spalvos intensyvumas žalias = vidurkis (vidurkis (img (:,:, 2))) %vidutinis žalios spalvos intensyvumas mėlynas = vidurkis (vidurkis (img (:,:, 3))) %vidutinis mėlynos spalvos intensyvumas, jei žalias> raudonas ir žalias> mėlynas %Patikrinkite, ar augalas yra paveikslėlyje d = msgbox (['Gyvenimas rastas! ']); %Rodyti pranešimų laukelį, kuriame sakoma: „Gyvenimas rastas!“laukti (d); end elseif l.rightCenter> 100 %Patikrinkite, ar uždengtas dešinysis/centrinis šviesos buferis r.moveDistance (-0.05) %Perkelkite „roomba“atgal 0,05 m 'rect = [100 0 150 150]; img = imcrop (img, rect) %apkarpytas vaizdas, sutelkiant dėmesį į raudoną centrą = vidurkis (vidurkis (img (:,:, 1))) %vidutinis raudonos spalvos intensyvumas žalias = vidurkis (vidurkis (img (:,:, 2))) %vidutinis žalios spalvos intensyvumas mėlynas = vidurkis (vidurkis (img (:,:, 3))) %vidutinis mėlynos spalvos intensyvumas, jei žalias> raudonas ir žalias> mėlynas %Patikrinkite, ar augalas yra paveikslėlyje d = msgbox (['Gyvenimas rastas! ']); %Rodyti pranešimų laukelį, kuriame sakoma: „Gyvenimas rastas!“laukti (d); end elseif l.rightFront> 100 %Patikrinkite, ar uždengtas dešiniojo/priekinio žibinto buferis r.moveDistance (-0.05) %Perkelkite „roomba“atgal 0,05 m 'rect = [100 0 150 150]; img = imcrop (img, rect) %apkarpytas vaizdas, skirtas sutelkti dėmesį į raudoną centrą = vidurkis (vidurkis (img (:,:, 1))) %vidutinis raudonos spalvos intensyvumas žalia = vidurkis (vidurkis (img (:,:, 2))) %vidutinis žalios spalvos intensyvumas mėlynas = vidurkis (vidurkis (img (:,:, 3))) %vidutinis mėlynos spalvos intensyvumas, jei žalias> raudonas && žalias> mėlynas %Patikrinkite, ar augalas yra paveikslėlyje d = msgbox (['Gyvenimas rastas! ']); %Rodyti pranešimų laukelį, kuriame sakoma: „Gyvenimas rastas!“laukti (d); end elseif l.right> 100 %Patikrinkite, ar uždengtas dešinysis buferis r.moveDistance (-0.05) %Perkelkite kambarį atgal 0,05 m r.turnAngle (-20) %Pasukite kambarį 20 laipsnių C img = r.getImage %Gauti vaizdą iš aviečių pyrago kamera „roomba“ir laikoma kintamajame „img“rect = [100 0 150 150]; img = imcrop (img, rect) %apkarpytas vaizdas, skirtas sutelkti dėmesį į raudoną centrą = vidurkis (vidurkis (img (:,:, 1))) %vidutinis raudonos spalvos intensyvumas žalia = vidurkis (vidurkis (img (:,:, 2))) %vidutinis žalios spalvos intensyvumas mėlynas = vidurkis (vidurkis (img (:,:, 3))) %vidutinis mėlynos spalvos intensyvumas, jei žalias> raudonas ir žalias> mėlynas %Patikrinkite, ar augalas yra paveikslėlyje d = msgbox (['Gyvenimas rastas! ']); %Rodyti pranešimų laukelį, kuriame sakoma: „Gyvenimas rastas!“laukti (d); end elseif y.left Priekyje <1500 %Patikrinkite, ar kairioji/priekinė „roomba“dalis yra nuo uolos r.moveDistance (-0,1, 0,05) %Perkelkite „roomba“atgal 0,1 metro, esant 0,05 m/s r.turnAngle (-5) %Pasukite roomba 5 laipsnių CW kitaip, jei dešinysis Priekyje <1500 %Patikrinkite, ar dešinė/priekinė „roomba“dalis yra nuo uolos r.moveDistance (-0,1, 0,05) %Perkelkite „roomba“atgal 0,1 metro, esant 0,05 m/s apsisukimui. Kampas (5) %Pasukite „roomba 5“laipsnių CCW kitaip, jei kairėn <1000 %Patikrinkite, ar kairė kambario pusė yra nuo uolos r.moveDistance (-0,05, 0,05) %Perkelkite roomba atgal 0,05 m, esant 0,05 m/s apsisukimuiKampas (-10) %Pasukite roomba 10 laipsnių CW elseif y.right0 %Vykdyti, jei paspaudžiamas mygtukas, jei Tęsti == 1 i = 0 %Tęsti gyvenimo paiešką i = 0, o i == 0 r.setLEDDigits (num2str ('RGH')) %Rodyti „grubiai“LED ekrane, kai i = 1: 1000 r.setDriveVelocity (0,05) %Nustatykite „roomba“pavaros greitį į 0,05 m/sx = r.getBumpers %Gaukite ir saugokite buferio jutiklio vertes struktūroje "x" y = r.get CliffSensors %Gaukite ir išsaugokite uolos jutiklio vertes struktūroje „y“, jei x.right == 1 %Patikrinkite, ar paspaustas dešinysis buferis r.turnAngle (10) %Pasukite kambarį 10 laipsnių CCW kitaip x.left == 1 %Patikrinkite, ar kairėje buferis paspaudžiamas r.turnAngle (-10) %Pasukite kambarį 10 laipsnių CW kitaipif x.front == 1 %Patikrinkite, ar prispaustas priekinis buferis r.turnAngle (20) %Pasukite kambarį 20 laipsnių CCW elseif x.rightWheelDrop == 1 % Patikrinkite, ar dešinysis ratas nenukrito. 1500 %Patikrinkite, ar priekinė kairioji „Roomba“dalis nėra nuo uolos r.moveDistance (-0.05, 0.05) %Perkelkite „roomba“atgal 0.05 m, esant 0.05 m/s r.turnAngle (-5) %Pasukite „roomba“5 laipsniais pagal CW kryptį. 1500 %Patikrinkite, ar dešinė priekinė „Roomba“dalis yra ne nuo uolos. Judėjimas Atstumas (-0,05, 0,05) %Perkelkite „Roomba“atgal 0,05 metro, esant 0,05 m/s apsisukimui. %Patikrinkite, ar kairioji dalis o f roomba yra nuo uolos r.moveDistance (-0,05, 0,05)%Perkelkite roomba atgal 0,05 m, esant 0,05 m/s apsisukimui.kampas (-10)%Pasukite roomba 10 laipsnių CW kitaip, jei dešinėn 0, jei tęskite == 1 i = 0 %Tęsti nelygų reljefą kitaip i = 1 %Pabaigti nelygų reljefą, pabaigos pabaigą, kita Judėti; S - „Stop Rover“; ESC - galutinio vartotojo valdymas; A - Raskite šaltinį ']); laukti (d); o i == 0 r.showCamera %Atidaryti „Rasberry Pie“kameros tiesioginį kanalą atskirame lange D = getkey (1) %Vartotojo paspaustas nuskaitymo klavišas, išsaugoti ASCII reikšmę kaip kintamąjį D, jei D == 30 %Patikrinkite, ar rodyklė „aukštyn“buvo nuspaustas r.setDriveVelocity (0,1) %Siųsti roomba į priekį 0,2 m/s elseif D == 28 %Patikrinkite, ar buvo paspausta rodyklė „kairėn“r.setDriveVelocity (0) %Sustabdykite „roomba“judėjimą pirmyn arba atgal r.turnAngle (15), 0.05) %Pasukite „roomba“45 laipsnių kampu į kairę, esant 0,05 m/s, jei D == 31 %Patikrinkite, ar buvo paspausta rodyklė „žemyn“r.setDriveVelocity (-0,1) %Perkelkite „Roomba“atgal 0,2 m/s greičiu D == 29 % Patikrinkite, ar yra paspausta rodyklė „dešinėn“. buvo paspaustas klavišas „esc“(pabėgti) i = 1 %Pakeiskite kintamojo „i“vertę, kad išeitumėte iš ciklo. 115 %Patikrinkite, ar buvo paspaustas klavišas „s“r.setDriveVelocity (0) %Sustabdyti roomba nuo eiti į priekį arba atgal elseif D == 97 %Patikrinkite, ar buvo paspaustas "a" image = r.getImage; imwrite (vaizdas, 'image.png') W = Klasifikuoti (vaizdas) K = režimas (W), jei K == 3 d = msgbox ('Rasti ištekliai') %Rodyti, jei stačiakampis išteklius aptiktas laukti (d); %Palaukite, kol vartotojas uždarys pranešimų laukelį „d“elseif K == 0 d = msgbox ('Not Resource:(') %Rodyti, jei stačiakampis šaltinis neaptiktas laukti (d); %Palaukite, kol vartotojas uždarys pranešimų laukelį „d“end else d = msgbox ('Netinkamas rakto įvestis.') %Rodyti, jei vartotojas uždaro meniu "pasirinkti nustatymą" laukti (d); %Palaukite, kol vartotojas uždarys pranešimų laukelį "d" pabaigos laukimas (d); %Palaukite vartotojas turi uždaryti pranešimų laukelį „d“pabaigos pabaiga else d = msgbox ('Goodbye') %Atsisveikina, jei parinktys uždarytos pabaigos laukti (d);
3 žingsnis: bandymas
Kai jūsų kodas bus parašytas, turėsite išbandyti „Roomba“. Nors jūsų kodas gali atrodyti teisingas, daugelį reikšmių, ypač spalvos ar formos, reikės pakeisti, kad tinkamai atpažintumėte objektus, kuriuos norėtumėte, kad jūsų „Roomba“atpažintų.
4 žingsnis: stebėkite vaizdo išvestis
Bus labai akivaizdu, ar sėkmingai užprogramavote „Roomba“pagal jos vaizdinius rezultatus.
Išėjimai apima:
- Formos aptikimas: „Roomba“gebėjimas tinkamai atskirti figūras, kad surastų tinkamus mineralus
- Nelygaus reljefo manevrai: vengia uolų ar tamsių vietų
- Rankinis režimas: tiesioginis srautas ir galimybė valdyti „Roomba“
- Nuotraukos: mineralų nuotraukos
- Gyvenimas rastas !: MatLab teksto laukelis, reiškiantis, kad jūsų augalas identifikavo organinę gyvybę.
Tai mūsų pamokos pabaiga, mėgaukitės naujuoju „Mars Expedition Rover“!
Rekomenduojamas:
„Iron Man Mark II“šalmas: 4 žingsniai
„Iron Man Mark II“šalmas: „Casco réplica mark II“su 2 dalimis, „casco y pulsera unidos por por cadena que Conduce el cableado“, „alimentado“iš 4 baterijų „AA“akumuliatorių ir la parte posterior junto al microcontrolador y el switch de encendido. o apertė
„Ultimate Beer Pong Machine“- „PongMate CyberCannon Mark III“: 6 žingsniai (su nuotraukomis)
„PongMate CyberCannon Mark III“yra naujausia ir pažangiausia alaus teniso technologija, kuri kada nors buvo parduodama visuomenei. Su naujuoju „CyberCannon“bet kuris žmogus gali tapti labiausiai bijomu žaidėju prie alaus teniso stalo. Kaip tai p
Slave Trigger Flash Mark II: 6 žingsniai (su nuotraukomis)
Slave Trigger Flash Mark II: Šioje instrukcijoje paaiškinsiu, kaip sukurti tikrą (optinę) vergo blykstę su minimaliu komponentų kiekiu. Internete galima rasti daug sudėtingų dizainų, šis dizainas yra labai paprastas ir veikia gerai šviesioje ir silpnai apšviestoje aplinkoje
„IRobot Create“komandų modulio naudojimas naudojant „Linux“: 4 veiksmai
„IRobot Create“komandų modulio naudojimas su „Linux“: Kadangi „iRobot“nepateikė „Linux“vartotojams galimybės naudotis komandų moduliu, turėjau tai išsiaiškinti pats. Nebijokite, tai tikrai nėra sunku. Viskas, ką jums reikia padaryti, tai paleisti keletą scenarijų. Pradėkime, ar ne?
„Mark I Super Psyllium Passivia“garsiakalbiai: 6 žingsniai (su nuotraukomis)
„Mark I Super Psyllium Passivia“garsiakalbiai: Įkvėptas daugybės instrukcijų garsiakalbių dizaino, kas gali būti geresnis būdas patekti į garso meną, nei sukurti YAS (Dar vienas garsiakalbis)! Mes čia, „Regularity Audio Labs“, esame paprasti žmonės ir turėjome šiuos nuostabius tuščius konteinerius