Turinys:

„IRobot Create-Mars Expedition Rover Mark I“: 4 žingsniai
„IRobot Create-Mars Expedition Rover Mark I“: 4 žingsniai

Video: „IRobot Create-Mars Expedition Rover Mark I“: 4 žingsniai

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

Š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

Prekės
Prekės

Š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

Sukurkite kodavimą norimiems rezultatams patenkinti
Sukurkite kodavimą norimiems rezultatams patenkinti

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

Testavimas
Testavimas

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

Stebėkite vaizdo išvestis
Stebėkite vaizdo išvestis
Stebėkite vaizdo išvestis
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: