Turinys:
- 1 žingsnis: bibliotekų gavimas
- 2 žingsnis: rašykite programas
- 3 žingsnis: kodas
- 4 žingsnis: paleiskite kodą
Video: „Mars Roomba“projektas UTK: 4 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
ATSAKOMYBĖS APRAŠYMAS: TAI TIKS TIK TAI, KAI ROOMBA NUSTATYTA A
LABAI KONKRETU BŪDU, ŠIĄ INSTRUKCIJĄ SUKURĖ IR NORĖJO NAUDOTI TENESIO MOKYTOJŲ IR FAKULTETO UNIVERSITETAS
Šis kodas naudojamas norint nustatyti „Roomba“paleisti vietoje parašytą ir išsaugotą kodą MATLAB. Tai neveiks, jei negalėsite gauti reikiamų bibliotekų iš Tenesio universiteto svetainės. Jei turite bibliotekų, galite jas panaudoti programuodami savo „Roomba“naudodami bibliotekos funkcijas. Ši instrukcija moko jus, kaip įdiegti bibliotekas, sukurti viso kodo aplanką ir kaip koduoti bei naudoti žemiau pateiktą programą.
Reikalingos medžiagos:
· „Roomba“
· MATLAB
· „Raspberry Pi“ir „Pi“fotoaparatas
1 žingsnis: bibliotekų gavimas
Inžinerijos svetainėje yra įrankių rinkinys/biblioteka, atsisiųskite ją ir įdėkite į naują aplanką. Šiame aplanke turi būti visi projekto darbo failai, nes bet kuri jūsų sukurtoje programoje naudojama funkcija turės nurodyti biblioteką. Kai tai padarysite, galite pradėti dirbti su savo programomis
2 žingsnis: rašykite programas
Programoje galima naudoti nemažai funkcijų, šias funkcijas galima pasiekti naudojant komandą „doc roomba“. Naudodamiesi šiomis funkcijomis, galite valdyti „Roomba“įvairiais būdais. Žemiau pateiktas kodas naudoja „guz“, šviesos juostos jutiklius, fotoaparato ir uolos jutiklius įvairiais būdais, kad sukurtų „Mars rover“. Mes panaudojome smūgio jutiklius, kad nustatytume, kada „Roomba“atsitrenkia į objektą, kai tai atsitiks, robotas apsisuks, apsisuks ir toliau judės. Prieš „Roomba“atsitrenkus į objektą, šviesos juosta aptiks objektą ir sulėtins „Roomba“greitį, kad kai jis atsitrenks į objektą, kad suaktyvintų smūgio jutiklį, „Roomba“bus mažiau pažeistas/paveiktas smūgio. Fotoaparatas ieško vandens ar lavos ant paviršiaus, jei nerandamas skystis, robotas toliau ieškos, jei bus rastas vanduo, robotas praneš žinutėmis operatoriams. Uolos jutikliai yra skirti sustabdyti robotą, jei jis artėja prie uolos. Jei robotas pajus skardį, jis apsisuks ir apsisuks, kad nenukristų.
3 žingsnis: kodas
Nukopijuokite ir įklijuokite jį į MATLAB failą, esantį tame pačiame aplanke kaip ir bibliotekos
functionMainRoombaFile (r)
r.setDriveVelocity (0,1, 0,1)
o tiesa % Infinte while ciklas, kad kodas veiktų
dontFall = cliffCheck (r) % Priskiria kintamąjį „dontFall“funkcijai „cliffCheck“
if dontFall % if teiginys turi būti tęsiamas kodu po to, kai „cliffCheck“bus baigtas
r.setDriveVelocity (0,1, 0,1) % Išlaiko Roomba judėjimą po to, kai „cliffCheck“yra baigtas
end % baigia „dontFall“if teiginį
buferis = bumpcheck (r) % Priskiria kintamąjį „buferis“funkcijai „bumpcheck“
jei buferio %, jei teiginys turi būti tęsiamas kodu po to, kai „bumpcheck“bus baigtas
r.setDriveVelocity (0,1, 0,1) % Išlaiko „Roomba“judėjimą po to, kai „bumpcheck“yra baigtas
end % baigia „buferį“, jei teiginys
skysčiai = LiquidCheck (r) % Priskiria kintamąjį „skysčiai“funkcijai „LiquidCheck“
jei skysčiai %, jei teiginys turi būti tęsiamas kodu po to, kai „LiquidCheck“bus baigtas
r.setDriveVelocity (0,1, 0,1) % Išlaiko „Roomba“judėjimą pasibaigus „LiquidCheck“
end % baigia „skysčiai“, jei teiginys
lightbumper = lightcheck (r) % Priskiria kintamąjį „lightbumper“funkcijai „lightcheck“
pauzė (0,1) % Trumpai pristabdykite, kad išvengtumėte nuolatinės ciklo iteracijos
end % baigiasi begalinis ciklas
pabaigos % pabaigos funkcija
funkcija buferis = bumpcheck (r) % Sukuria „bumpcheck“funkciją
bumpdata = r.getBumpers % Priskiria visus buferio duomenis kintamajam „bumpdata“
buferis = bumpdata.right || bumpdata.left || bumpdata.front % Sukuria saugomą kintamąjį „buferis“, skirtą įvairiems buferiams
if bumpdata.right> 0 % Jei teiginys sukelia skirtingas „roomba“funkcijas, jei buferis atsitrenkia
r.stop % Sustabdo Roomba
r.moveDistance (-0,3, 0,2) % Atverčia Roomba 0,3 m
r.turnAngle (90, 0,5) % Kaip įmanoma greičiau pasuka Roomba 90 laipsnių kampu
galas
jei bumpdata.front> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (randi (270), 0,5) % Kaip galima greičiau pasuka Roomba atsitiktiniu intervalu nuo 0 iki 270 laipsnių
galas
jei bumpdata.left> 0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (-90, 0,5) % Kaip įmanoma greičiau pasuka Roomba -90 laipsnių kampu
galas
galas
funkcija lightbumper = lightcheck (r) % Sukuria „lightcheck“funkciją
lightdata = r.getLightBumpers % Priskiria visus duomenis iš šviesos smūgio jutiklio į kintamąjį „lightdata“
lemputė = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Sukuria išsaugotą kintamąjį „lightbumper“skirtingiems šviesos buferiams
jei lemputė % Jei teiginys, kad būtų galima iškviesti lemputės duomenis iš viršaus
jei lightdata.left> 10 % Jei teiginys sukelia skirtingas kambario funkcijas, jei šviesos buferis jaučia daugiau nei 10 verčių
r.setDriveVelocity (0,05, 0,05) % Lėtina „Roomba“, kad pasiruoštų smūgiui
pabaiga % baigia pradinį if teiginį
jei lightdata.rightCenter> 10
r.setDriveVelocity (0,05, 0,05)
galas
jei šviesos duomenys.teisingas> 10
r.setDriveVelocity (0,05, 0,05)
galas
jei „lightdata.leftCenter“> 10
r.setDriveVelocity (0,05, 0,05)
galas
end % baigia „žibintą“, jei teiginys
end %baigia „lightcheck“funkciją
funkcija dontFall = cliffCheck (r) % Sukuria funkciją „cliffCheck“
duomenys = r.getCliffSensors; % Priskiria visus duomenis iš uolos jutiklio kintamiesiems „duomenims“
dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Sukuria saugomą kintamąjį „dontFall“skirtingiems uolų jutikliams
if dontFall % If teiginys, skirtas iškviesti uolos jutiklio duomenis iš viršaus
jei duomenys. kairė <1010 % Jei teiginys sukelia skirtingas „roomba“funkcijas, jei uolos jutiklis aptinka mažiau nei 1010 reikšmių
r.stop
r.moveDistance (-0,2, 0,2) % Atverčia Roomba 0,2 m
r.turnAngle (-90, 0,5) % Kaip įmanoma greičiau pasuka Roomba -90 laipsnių kampu
elseif data.leftFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Kaip įmanoma greičiau pasuka Roomba 90 laipsnių kampu
elseif data.rightFront <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Kaip įmanoma greičiau pasuka Roomba 90 laipsnių kampu
elseif duomenys.teisingai <1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle (90, 0,5) % Kaip įmanoma greičiau pasuka Roomba 90 laipsnių kampu
galas
galas
galas
funkcija skysčiai = LiquidCheck (r) % Sukuria funkciją „LiquidCheck“
o tikrasis %pradeda begalinę kalibravimo ciklą
img = r.getImage; % nuskaito fotoaparatą nuo roboto
image (img) % rodo paveikslėlį lango paveikslėlyje
red_mean = vidurkis (vidurkis (img (200, 150, 1))))% nuskaito vidutinį raudonų pikselių kiekį
blue_mean = vidurkis (vidurkis (img (200, 150, 3))))% nuskaito vidutinį mėlynų pikselių kiekį
skysčiai = raudona_prastas || blue_mean % Sukuria saugomą kintamąjį „skysčiai“skirtingiems spalvų kintamiesiems
jei skysčiai % If teiginys, norint iškviesti vaizdo duomenis iš viršaus
jei red_mean> 170 % Jei teiginys sukelia skirtingas kambario funkcijas, jei fotoaparatas mato didesnę nei 170 vidutinę raudoną spalvą
r.stop % sustabdo roomba
r.setLEDCenterColor (255) % nustato apskritimą raudonai
r.setLEDDigits (); % išvalyti ekraną
f = laukimo juosta (0, '*AUKŠČIŲJŲ ŽINIŲ*'); % sukuria laukimo juostą įkeliant pranešimą
r.setLEDDigits ('HOT'); % nustato LED ekraną „HOT“
pauzė (0,5) %Trumpa pauzė, kad perskaitytumėte pateiktą informaciją
r.setLEDDigits ('LAVA'); % nustato, kad LED ekranas išvestų „LAVA“
pauzė (0,5)
laukimo juosta (.33, f, '*AUKŠČIŲJŲ ŽINIŲ*'); %padidina laukimo juostą
r.setLEDDigits ('HOT');
pauzė (0,5)
r.setLEDDigits ('LAVA');
pauzė (0,5)
laukimo juosta (.67, f, '*AUKŠČIŲJŲ ŽINIŲ*'); % padidina laukimo juostą
r.setLEDDigits ('HOT');
pauzė (0,5)
r.setLEDDigits ('LAVA');
laukimo juosta (1, f, '*AUKŠČIŲJŲ ŽINIŲ*'); %užpildo laukimo juostą
pauzė (1)
close (f) %uždaro laukimo juostą
r.setLEDDigits (); % išvalo LED ekraną
uždaryti visus %Uždaro visus ankstesnius langus
ašys („Color“, „none“, „XColor“, „none“, „YColor“, „none“) % Išvalo ašių ir diagramos grafiko langą
y = 0,5; % nustato teksto y padėtį braižymo lange
x = 0,06; % nustato teksto x poziciją braižymo lange
title ('FROM MARS ROOMBA', 'fontsize', 32) % Prideda pavadinimą braižymo lange
quadeqtxt = 'PAVOJINGA LAVA'; % Nustato kintamąjį „quadeqtxt“į išvestį 0
tekstas (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % parodo quadeq tekstą braižymo lange
r.moveDistance (-0,2, 0,2) %apverčia kambarį 0,2 m
r.turnAngle (180, 0,5) %kuo greičiau pasuka kambarį 180 laipsnių kampu
r.setLEDCenterColor (128, 128); % nustato „Roomba“centro šviesos diodą oranžine spalva
uždaryti visus %uždaro likusius atidarytus langus
elseif blue_mean> 175 % Jei teiginys sukelia skirtingas kambario funkcijas, jei fotoaparatas mato didesnę nei 175 vidutinę mėlyną spalvą
r.stop % sustabdo roomba
r.setLEDCenterColor (255) % nustato apskritimą raudonai
r.setLEDDigits (); % išvalyti ekraną
f = laukimo juosta (0, '*AUKŠČIŲJŲ ŽINIŲ*'); % sukuria laukimo juostą įkeliant pranešimą
r.setLEDDigits ('LOOK'); % nustato, kad LED ekranas išvestų „LOOK“
pauzė (0,5) %Trumpa pauzė, kad perskaitytumėte pateiktą informaciją
r.setLEDDigits („WATR“); % nustato, kad LED ekranas išvestų „WATR“
pauzė (0,5)
laukimo juosta (.33, f, '*AUKŠČIŲJŲ ŽINIŲ*'); %padidina laukimo juostą
r.setLEDDigits ('LOOK');
pauzė (0,5)
r.setLEDDigits („WATR“);
pauzė (0,5)
laukimo juosta (.67, f, '*AUKŠČIŲJŲ ŽINIŲ*'); % padidina laukimo juostą
r.setLEDDigits ('LOOK');
pauzė (0,5)
r.setLEDDigits („WATR“);
laukimo juosta (1, f, '*AUKŠČIŲJŲ ŽINIŲ*'); %užpildo laukimo juostą
pauzė (1)
close (f) %uždaro laukimo juostą
r.setLEDDigits (); % išvalo LED ekraną
uždaryti visus %Uždaro visus ankstesnius langus
ašys („Color“, „none“, „XColor“, „none“, „YColor“, „none“) % Išvalo ašių ir diagramos grafiko langą
y = 0,5; % nustato teksto y padėtį braižymo lange
x = 0,06; % nustato teksto x poziciją braižymo lange
title ('FROM MARS ROOMBA', 'fontsize', 32) % Prideda pavadinimą braižymo lange
quadeqtxt = 'RASTAS VANDENS'; % Nustato kintamąjį „quadeqtxt“į išvestį 0
tekstas (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % parodo quadeq tekstą braižymo lange
r.moveDistance (-0,2, 0,2) %apverčia kambarį 0,2 m
r.turnAngle (180, 0,5) %kuo greičiau pasuka kambarį 180 laipsnių kampu
r.setLEDCenterColor (128, 128); % nustato „Roomba“centro šviesos diodą oranžine spalva
uždaryti visus %uždaro likusius atidarytus langus
end %baigia „red_mean“, jei teiginys
end %baigia „skysčiai“, jei teiginys
end % uždaro begalinį ciklo laiką
end % baigiasi funkcija „LiquidCheck“
4 žingsnis: paleiskite kodą
Nukopijavę ir įklijavę kodą į MATLAB, turite prisijungti prie „Roomba“. Prijungę „Roomba“, turite pavadinti kintamąjį r. Funkcijos naudoja kintamąjį r, kai nurodoma „Roomba“, todėl „Roomba“turi būti apibrėžta kaip kintamasis r. Paleidus kodą, „Roomba“turėtų veikti taip, kaip nurodyta.
Rekomenduojamas:
„Roomba“pavertimas „Mars Rover“: 5 žingsniai
„Roomba“pavertimas „Mars Rover“:
Robotų projektas UTK 2017: 3 žingsniai
Robotų projektas „UTK 2017“: Misija: Mūsų inžinierių komandą pasamdė ne pelno siekiantis atviro kodo technologijų kūrimo fondas „Froogle“, kad sukurtų novatoriškas „Human Assisting Mars Rover.-Out“komandas „rover " yra „roomba“, kurią kodavome vykdyti serijai
„Roomba MATLAB“projektas: 5 žingsniai
„Roomba MATLAB“projektas: Dabartinis NASA planas, skirtas roveriui „Mars“, yra tai, kad jis bus duomenų rinkėjas ir klaidžioja aplink Marsą, renka dirvožemio mėginius, kad juos sugrąžintų į Žemę, kad mokslininkai galėtų pamatyti, ar egzistavo ankstesnės gyvybės formos. planeta. Papildomas
„Roomba“projektas: 5 žingsniai (su nuotraukomis)
„Roomba“projektas: šis nurodymas buvo sukurtas vykdant Pietų Floridos universiteto „Makecourse“projekto reikalavimą (www.makecourse.com). Ši instrukcija apims visus būtinus veiksmus ir komponentus, reikalingus mano „Roomba“projektui surinkti
USB degiklis! Šis projektas gali sudegti per plastiką / medieną / popierių (įdomus projektas taip pat turi būti labai plonas medis): 3 žingsniai
USB degiklis! Šis projektas gali sudegti per plastiką / medieną / popierių (įdomus projektas taip pat turi būti labai plonas medis): NEDARYKITE ŠIO NAUDOTI USB! iš visų komentarų sužinojau, kad tai gali pakenkti jūsų kompiuteriui. mano kompiuteris gerai. Naudokite 600 mA 5v telefono įkroviklį. Aš tai naudoju ir jis veikia gerai, ir niekas negali būti sugadintas, jei naudosite apsauginį kištuką, kad sustabdytumėte maitinimą