Turinys:

„Mars Roomba“projektas UTK: 4 žingsniai
„Mars Roomba“projektas UTK: 4 žingsniai

Video: „Mars Roomba“projektas UTK: 4 žingsniai

Video: „Mars Roomba“projektas UTK: 4 žingsniai
Video: AMA record with community manager Oleg. PARALLEL FINANCE 2024, Lapkritis
Anonim
„Mars Roomba“projektas UTK
„Mars Roomba“projektas UTK
„Mars Roomba“projektas UTK
„Mars Roomba“projektas UTK

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: