Satura rādītājs:

Mars Roomba projekts UTK: 4 soļi
Mars Roomba projekts UTK: 4 soļi

Video: Mars Roomba projekts UTK: 4 soļi

Video: Mars Roomba projekts UTK: 4 soļi
Video: Обнаружение скрытого UAP? | Выжить в черной дыре с Ави Лоэбом Obnaruzheniye skrytogo UAP? Avi Loebom 2024, Novembris
Anonim
Projekts Mars Roomba UTK
Projekts Mars Roomba UTK
Projekts Mars Roomba UTK
Projekts Mars Roomba UTK

ATRUNA: TAS TIKS DARĪTS TIKAI, JA ROOMBA IR IESTATĪTA A

ĻOTI KONKRĒTS VEIDS, ŠO INSTRUKCIJU TIKA IZVEIDOT UN PAREDZĒT IZMANTOT TENESES STUDENTU UN FAKULTĀTES UNIVERSITĀTE

Šis kods tiek izmantots, lai iestatītu Roomba, lai palaistu lokāli rakstītu un saglabātu kodu MATLAB. Tas nedarbosies, ja nevarat iegūt nepieciešamās bibliotēkas no Tenesī Universitātes vietnes. Ja jums ir bibliotēkas, varat tās izmantot, lai programmētu savu Roomba, izmantojot bibliotēkas funkcijas. Šī pamācība māca jums, kā instalēt bibliotēkas, izveidot mapi visam kodam un kā kodēt un izmantot tālāk sniegto programmu.

Nepieciešamie materiāli:

· Roomba

· MATLAB

· Aveņu Pi un Pi kamera

1. darbība: bibliotēku iegūšana

Inženierzinātņu vietnē ir nodrošināta rīkkopa/bibliotēka, lejupielādējiet to un ievietojiet to jaunā mapē. Šajā mapē jābūt visiem projekta darba failiem, jo jebkurai funkcijai, ko izmanto jūsu izveidotajā programmā, būs jāatsaucas uz bibliotēku. Kad esat to izdarījis, varat sākt strādāt ar savām programmām

2. solis: programmu rakstīšana

Programmā var izmantot diezgan daudz funkciju, šīm funkcijām var piekļūt, izmantojot komandu "doc roomba". Izmantojot šīs funkcijas, jūs varat kontrolēt savu Roomba daudzos dažādos veidos. Tālāk sniegtajā kodā tiek izmantoti trieciena sensori, gaismas joslas sensori, kameras un klints sensori, lai izveidotu marsa braucēju. Mēs izmantojām trieciena sensorus, lai noteiktu, kad Roomba ietriecas objektā, kad tas notiek, robots atgriežas, apgriežas un turpina kustēties. Pirms Roomba ietriecas kādā objektā, gaismas josla atpazīs objektu un palēninās Roomba darbību, lai tad, kad tas atsitīsies pret objektu, lai aktivizētu trieciena sensoru, Roomba būtu mazāk bojāta/trieciena ietekmēta. Kamera meklē ūdeni vai lavu uz virsmas; ja šķidrums nav atrasts, robots turpinās meklēt, ja ir atrasts ūdens, robots nosūtīs ziņu operatoriem. Klints sensori ir paredzēti, lai apturētu robotu, ja tas tuvojas klintij. Ja robots sajūt klinti, tas atgriezīsies un apgriezīsies, lai nenokristu.

3. darbība: kods

Kopējiet un ielīmējiet to MATLAB failā, kas atrodas tajā pašā mapē kā bibliotēkas

functionMainRoombaFile (r)

r.setDriveVelocity (0,1, 0,1)

kamēr true % Infinte while loop, lai kods darbotos

dontFall = cliffCheck (r) % Piešķir mainīgajam 'dontFall' funkcijai 'cliffCheck'

if dontFall % if paziņojums, lai turpinātu kodu pēc “cliffCheck” pabeigšanas

r.setDriveVelocity (0,1, 0,1) % saglabā Roomba kustību pēc tam, kad ir pabeigta “cliffCheck”

end % beidz 'dontFall' if paziņojumu

buferis = bumpcheck (r) % Piešķir mainīgajam 'buferi' funkcijai 'bumpcheck'

ja buferis %, ja paziņojums, lai turpinātu kodu pēc “bumpcheck” pabeigšanas

r.setDriveVelocity (0,1, 0,1) % saglabā Roomba kustību pēc tam, kad ir pabeigta pārbaude

end % beidz 'buferi', ja paziņojums

šķidrumi = LiquidCheck (r) % Piešķir mainīgajiem šķidrumiem funkciju "LiquidCheck"

ja šķidrumi %, ja paziņojums turpināt kodu pēc “LiquidCheck” ir pabeigts

r.setDriveVelocity (0,1, 0,1) % saglabā Roomba kustību pēc tam, kad ir pabeigta funkcija “LiquidCheck”

end % beidz “šķidrumus”, ja paziņojums

lightbumper = lightcheck (r) % Piešķir mainīgajam 'lightbumper' funkciju 'lightcheck'

pauze (0,1) % Īsā pauze, lai izvairītos no nepārtrauktas cilpas iterācijas

end % beidzas bezgalīgi, kamēr cilpa

end % beidzas funkcija

funkcija buferis = bumpcheck (r) % Izveido funkciju "bumpcheck"

bumpdata = r.getBumpers % Piešķir visus bufera datus mainīgajam "bumpdata"

buferis = bumpdata.right || bumpdata.left || bumpdata.front % Izveido saglabātu mainīgo, buferi, dažādiem buferiem

ja bumpdata.right> 0 % Ja paziņojums izraisa dažādas telpas funkcijas, ja buferis tiek sasists

r.stop % Aptur Roomba

r.moveDistance (-0,3, 0,2) % Reverss Roomba 0,3m

r.turnAngle (90, 0,5) % Pagriež Roomba par 90 grādiem pēc iespējas ātrāk

beigas

ja bumpdata.front> 0

r. apstāties

r.moveDistance (-0,3, 0,2)

r.turnAngle (randi (270), 0,5) % Pēc iespējas ātrāk pagriež Roomba nejaušā intervālā starp 0 un 270 grādiem

beigas

ja bumpdata.left> 0

r. apstāties

r.moveDistance (-0,3, 0,2)

r.turnAngle (-90, 0,5) % Pagriež Roomba -90 grādus pēc iespējas ātrāk

beigas

beigas

funkcija lightbumper = lightcheck (r) % Izveido "lightcheck" funkciju

lightdata = r.getLightBumpers % Piešķir visus datus no gaismas trieciena sensora mainīgajam 'lightdata'

gaismas buferis = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Izveido saglabātu mainīgo “lightbumper” dažādiem gaismas buferiem

ja gaismas buferis % Ja paziņojums, lai izsauktu gaismas bufera datus no augšas

ja lightdata.left> 10 % Ja apgalvojums izraisa dažādas telpas funkcijas, ja gaismas buferis uztver vairāk nekā 10 vērtības

r.setDriveVelocity (0,05, 0,05) % Palēnina Roomba darbību, lai sagatavotos triecienam

end % beidz sākotnējo if paziņojumu

ja lightdata.rightCenter> 10

r.setDriveVelocity (0,05, 0,05)

beigas

ja gaismas dati.pareizi> 10

r.setDriveVelocity (0,05, 0,05)

beigas

ja lightdata.leftCenter> 10

r.setDriveVelocity (0,05, 0,05)

beigas

end % beidz "lightbumper", ja paziņojums

end %beidz lightcheck funkciju

funkcija dontFall = cliffCheck (r) % Izveido funkciju 'cliffCheck'

dati = r.getCliffSensors; % Piešķir visus datus no klints sensora mainīgajiem 'datiem'

dontFall = dati.pa kreisi <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020 % Izveido saglabātu mainīgo “dontFall” dažādiem klints sensoriem

if dontFall % If paziņojums, lai izsauktu klints sensora datus no augšas

ja dati.pa kreisi <1010 % Ja apgalvojums izraisa dažādas telpas funkcijas, ja klints sensors uztver mazāk par 1010 vērtībām

r. apstāties

r.moveDistance (-0,2, 0,2) % Reverss Roomba 0,2 m

r.turnAngle (-90, 0,5) % Pagriež Roomba -90 grādus pēc iespējas ātrāk

elseif data.leftFront <1010

r. apstāties

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Pagriež Roomba par 90 grādiem pēc iespējas ātrāk

elseif data.rightFront <1010

r. apstāties

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Pagriež Roomba par 90 grādiem pēc iespējas ātrāk

elseif dati.pareizi <1010

r. apstāties

r.moveDistance (-0,3, 0,2)

r.turnAngle (90, 0,5) % Pagriež Roomba par 90 grādiem pēc iespējas ātrāk

beigas

beigas

beigas

funkciju šķidrumi = LiquidCheck (r) % Izveido funkciju "LiquidCheck"

kamēr patiesie %sāk bezgalīgu cilpu kalibrēšanai

img = r.getImage; % nolasa kameru no robota

attēls (img) % parāda attēlu skaitļu logā

red_mean = vidējais (vidējais (img (200, 150, 1))))% nolasa sarkano pikseļu vidējo daudzumu

blue_mean = vidējais (vidējais (img (200, 150, 3))))% nolasa vidējo zilo pikseļu daudzumu

šķidrumi = red_mean || blue_mean % Izveido saglabātu mainīgo “šķidrumi” dažādiem krāsu mainīgajiem

ja šķidrumi % Ja paziņojums, lai izsauktu attēla datus no augšas

ja red_mean> 170 % Ja apgalvojums izraisa dažādas telpas funkcijas, ja kamera redz vidējo sarkano krāsu vairāk nekā 170

r.stop % aptur roomba

r.setLEDCenterColor (255) % iestata apli sarkanā krāsā

r.setLEDDigits (); % notīrīt displeju

f = gaidīšanas josla (0, '*IENĀKOŠĀ ZIŅA*'); % izveido gaidīšanas joslu ziņojuma ielādēšanai

r.setLEDDigits ('KARSTS'); % iestata LED displeju uz izvadi "HOT"

pauze (0,5) %Īsa pauze, lai lasītu izkliedēto informāciju

r.setLEDDigits ('LAVA'); % iestata LED displeju uz izvadi 'LAVA'

pauze (0,5)

gaidīšanas josla (.33, f, '*IENĀKOŠĀ ZIŅA*'); %palielina gaidīšanas joslas palielinājumu

r.setLEDDigits ('KARSTS');

pauze (0,5)

r.setLEDDigits ('LAVA');

pauze (0,5)

gaidīšanas josla (.67, f, '*IENĀKOŠĀ ZIŅA*'); % palielina gaidīšanas joslas palielinājumu

r.setLEDDigits ('KARSTS');

pauze (0,5)

r.setLEDDigits ('LAVA');

gaidīšanas josla (1, f, '*IENĀKOŠĀ ZIŅA*'); %aizpilda gaidīšanas joslu

pauze (1)

aizvērt (f) %aizver gaidīšanas joslu

r.setLEDDigits (); % notīra LED displeju

aizvērt visu %Aizver visus iepriekšējos logus

asis (“Krāsa”, “nav”, “XColor”, “nav”, “YColor”, “nav”) % Notīra asu un diagrammas diagrammas logu

y = 0,5; % iestata teksta y pozīciju zīmēšanas logā

x = 0,06; % iestata teksta x pozīciju zīmēšanas logā

title ('FROM MARS ROOMBA', 'fontsize', 32) % Pievieno zīmējuma logam virsrakstu

quadeqtxt = 'BĪSTAMA LAVA'; % Iestata mainīgo 'quadeqtxt' uz izvadi 0

teksts (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % attēlo quadeq tekstu zīmēšanas logā

r.moveDistance (-0,2, 0,2) %apgriež roomba par 0,2 m

r.turnAngle (180, 0,5) %pagriež istabu par 180 grādiem pēc iespējas ātrāk

r.setLEDCenterColor (128, 128); % nosaka Roomba centra gaismas diode oranžā krāsā

aizvērt visus %aizver atlikušos atvērtos logus

elseif blue_mean> 175 % Ja apgalvojums izraisa dažādas telpas funkcijas, ja kamera redz vidējo zilo krāsu vairāk nekā 175

r.stop % aptur roomba

r.setLEDCenterColor (255) % iestata apli sarkanā krāsā

r.setLEDDigits (); % notīrīt displeju

f = gaidīšanas josla (0, '*IENĀKOŠĀ ZIŅA*'); % izveido gaidīšanas joslu ziņojuma ielādēšanai

r.setLEDDigits ('LOOK'); % iestata LED displeju uz “LOOK”

pauze (0,5) %Īsa pauze, lai lasītu izkliedēto informāciju

r.setLEDDigits ('WATR'); % iestata LED displeju uz izvadi "WATR"

pauze (0,5)

gaidīšanas josla (.33, f, '*IENĀKOŠĀ ZIŅA*'); %palielina gaidīšanas joslas palielinājumu

r.setLEDDigits ('LOOK');

pauze (0,5)

r.setLEDDigits ('WATR');

pauze (0,5)

gaidīšanas josla (.67, f, '*IENĀKOŠĀ ZIŅA*'); % palielina gaidīšanas joslas palielinājumu

r.setLEDDigits ('LOOK');

pauze (0,5)

r.setLEDDigits ('WATR');

gaidīšanas josla (1, f, '*IENĀKOŠĀ ZIŅA*'); %aizpilda gaidīšanas joslu

pauze (1)

aizvērt (f) %aizver gaidīšanas joslu

r.setLEDDigits (); % notīra LED displeju

aizvērt visu %Aizver visus iepriekšējos logus

asis (“Krāsa”, “nav”, “XColor”, “nav”, “YColor”, “nav”) % Notīra asu un diagrammas diagrammas logu

y = 0,5; % iestata teksta y pozīciju zīmēšanas logā

x = 0,06; % iestata teksta x pozīciju zīmēšanas logā

title ('FROM MARS ROOMBA', 'fontsize', 32) % Pievieno zīmējuma logam virsrakstu

quadeqtxt = 'FOUND WATER'; % Iestata mainīgo 'quadeqtxt' uz izvadi 0

teksts (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % zīmēšanas logā parāda quadeq tekstu

r.moveDistance (-0,2, 0,2) %apvērš roomba 0,2 m

r.turnAngle (180, 0,5) %pagriež istabu par 180 grādiem pēc iespējas ātrāk

r.setLEDCenterColor (128, 128); % nosaka Roomba centra gaismas diode oranžā krāsā

aizvērt visus %aizver atlikušos atvērtos logus

end %beidz paziņojumu “red_mean”

end %beidz “šķidrumus”, ja paziņojums

end % slēdz bezgalīgu cilpu

end % beidzas funkcija 'LiquidCheck'

4. darbība: koda palaišana

Kad kods ir nokopēts un ielīmēts MATLAB, izveidojiet savienojumu ar Roomba. Kad Roomba ir pievienots, jums jānosauc mainīgais r. Funkcijas izmanto mainīgo r, atsaucoties uz Roomba, tāpēc Roomba ir jādefinē kā mainīgais r. Pēc koda palaišanas Roomba jādarbojas, kā norādīts.

Ieteicams: