Satura rādītājs:
- 1. darbība: bibliotēku iegūšana
- 2. solis: programmu rakstīšana
- 3. darbība: kods
- 4. darbība: koda palaišana
Video: Mars Roomba projekts UTK: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
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:
Jūsu Roomba pārvēršana Mars Rover: 5 soļi
Pārvēršot savu Roomba par Mars Rover:
Robotu projekts UTK 2017: 3 soļi
Robotu projekts UTK 2017: Misija: Mūsu inženieru komandu ir pieņēmis darbā bezpeļņas fonds atvērtā pirmkoda tehnoloģiju attīstībai Froogle, lai izstrādātu novatoriskas Human Assisting Mars Rover.-Out komandas " rover " ir roomba, ko mēs kodējām, lai izpildītu sēriju
Roomba MATLAB projekts: 5 soļi
Roomba MATLAB projekts: Pašreizējais NASA plāns par Marsa roveri ir paredzēts, lai tas būtu datu savācējs un klīst apkārt Marsam, savācot augsnes paraugus, lai tos atgrieztu uz Zemes, lai zinātnieki varētu redzēt, vai uz tā ir bijušas iepriekšējās dzīvības formas. Planēta. Papildu
UTK EF 230 MarsRoomba projekts 2018. gada rudens: 5 soļi
UTK EF 230 MarsRoomba projekts 2018. gada rudens: Pašlaik Marsa roverus izmanto, lai savāktu datus uz Marsa virsmas, izmantojot dažādas metodes, līdz galam, lai uzzinātu vairāk par planētas potenciālu mikrobu dzīvē. Rovers datu izmantošanai galvenokārt izmanto fotografēšanas un augsnes analīzes rīkus
Roomba projekts: 5 soļi (ar attēliem)
Roomba projekts: šī pamācība tika izveidota, izpildot Dienvidfloridas universitātes Makecourse projekta prasības (www.makecourse.com). Šī pamācība aptvers visas nepieciešamās darbības un sastāvdaļas, kas nepieciešamas, lai saliktu manu Roomba projektu