Përmbajtje:

Projekti Mars Roomba UTK: 4 hapa
Projekti Mars Roomba UTK: 4 hapa

Video: Projekti Mars Roomba UTK: 4 hapa

Video: Projekti Mars Roomba UTK: 4 hapa
Video: Быстрая укладка плитки на стены в санузле. ПЕРЕДЕЛКА ХРУЩЕВКИ от А до Я #27 2024, Korrik
Anonim
Projekti Mars Roomba UTK
Projekti Mars Roomba UTK
Projekti Mars Roomba UTK
Projekti Mars Roomba UTK

Mohimi: Kjo do të punojë vetëm nëse dhoma është e vendosur në

SHUMY M SPNYREC SPECIFIKE, K INT IN UDHUCTZUESE SHT KRIJUAR DHE MENDUAR T BE P USRDORET NGA UNIVERSITETI I NXUDNSVE DHE FAKULTETIT NEN TENENCE

Ky kod përdoret për të krijuar një Roomba për të ekzekutuar kodin e shkruar dhe ruajtur në vend në MATLAB. Kjo nuk do të funksionojë nëse nuk jeni në gjendje të merrni bibliotekat e nevojshme nga faqja e internetit e Universitetit të Tennessee. Nëse keni biblioteka, atëherë mund t'i përdorni ato për të programuar Roomba -n tuaj duke përdorur funksionet në bibliotekë. Ky Instructable ju mëson se si të instaloni bibliotekat, të krijoni një dosje për të gjithë kodin dhe si të kodoni dhe përdorni programin që kemi dhënë më poshtë.

Materialet e kërkuara:

· Roomba

· MATLAB

· Kamera Raspberry Pi dhe Pi

Hapi 1: Marrja e bibliotekave

Në uebfaqen inxhinierike ofrohet një kuti veglash/bibliotekë, shkarkojeni dhe vendoseni në një dosje të re. Kjo dosje duhet të përmbajë të gjithë skedarët e punës së projektit, pasi çdo funksion i përdorur në një program që bëni do t'i duhet t'i referohet bibliotekës. Pasi ta keni bërë këtë, mund të filloni të punoni në programet tuaja

Hapi 2: Shkrimi i programeve

Ka mjaft funksione që mund të përdoren në program, këto funksione mund të arrihen duke përdorur komandën "doc roomba". Duke përdorur këto funksione, ju mund të kontrolloni Roomba -n tuaj në shumë mënyra të ndryshme. Kodi i dhënë më poshtë përdor sensorët e përplasjes, sensorët e shiritit të dritës, kamerën dhe sensorët e shkëmbinjve në mënyra të ndryshme për të krijuar një rover mars. Ne përdorëm sensorët e përplasjes për të zbuluar kur Roomba godet një objekt, kur kjo ndodh roboti do të kthehet mbrapsht, do të kthehet dhe do të vazhdojë të lëvizë. Para se Roomba të godasë një objekt, drita e dritës do të zbulojë objektin dhe do të ngadalësojë Roomba -n, kështu që kur të përplaset me objektin për të aktivizuar sensorin e goditjes, Roomba do të jetë më pak i dëmtuar/prekur nga ndikimi. Kamera kërkon ujë ose lavë në sipërfaqe, nëse nuk ka lëng të gjetur atëherë roboti do të vazhdojë të kërkojë, nëse gjendet pak ujë atëherë roboti do t’i dërgojë mesazh operatorëve. Sensorët e shkëmbit janë krijuar për të ndaluar robotin nëse i afrohet një shkëmbi. Nëse roboti ndjen një shkëmb ai do të kthehet mbrapsht dhe do të kthehet për të shmangur rënien.

Hapi 3: Kodi

Kopjoni dhe ngjisni këtë në një skedar MATLAB që ndodhet në të njëjtën dosje me bibliotekat

funksionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

ndërsa e vërtetë % Infinte ndërsa lak për të mbajtur kodin në punë

dontFall = cliffCheck (r) % Cakton ndryshoren 'dontFall' në funksionin 'cliffCheck'

if dontFall % if deklarata për të vazhduar në kod pas përfundimit të 'cliffCheck'

r.setDriveVelocity (0.1, 0.1) % Mban Roomba në lëvizje pasi 'cliffCheck' të ketë përfunduar

fund % përfundon 'dontFall' if statement

bumper = bumpcheck (r) % Cakton variablin 'parakolp' në funksionin 'bumpcheck'

nëse parakolp % if deklarata për të vazhduar në kod pasi të ketë përfunduar 'kontrollimi i bumpcheck'

r.setDriveVelocity (0.1, 0.1) % Mban Roomba në lëvizje pasi të ketë përfunduar 'kontrollimi i gabimeve'

fund % përfundon 'parakolp' nëse deklarata

lëngje = LiquidCheck (r) % Cakton variablin 'lëngje' në funksionin 'LiquidCheck'

nëse lëngjet % nëse deklarata për të vazhduar në kod pasi të ketë përfunduar "LiquidCheck"

r.setDriveVelocity (0.1, 0.1) % Mban Roomba të lëvizë pasi "LiquidCheck" të ketë përfunduar

fund % përfundon 'lëngje' nëse deklarata

lightbumper = lightcheck (r) % Cakton variablin 'lightbumper' në funksionin 'lightcheck'

pauzë (0.1) % Pauzë e shkurtër për të shmangur përsëritjen e vazhdueshme të lakut

fund % përfundon pafund ndërsa lak

fundi % përfundon funksionin

funksion bumper = bumpcheck (r) % Krijon funksionin 'bumpcheck'

bumpdata = r.getBumpers % Cakton të gjitha të dhënat nga parakolpi në ndryshoren 'bumpdata'

parakolp = bumpdata.djathtas || bumpdata.left || bumpdata.front % Krijon një ndryshore të ruajtur, 'bumper', për parakolpët e ndryshëm

nëse bumpdata.right> 0 % Nëse deklarata të shkaktojë funksione të ndryshme të dhomës ndodh nëse Parakolp përplaset

r.ndal % Ndalon Roomba

r.moveDistanca (-0.3, 0.2) % Kthen dhomën Roomba 0.3m

r.turnAngle (90, 0.5) % Rrotullon Roomba 90 gradë sa më shpejt që të jetë e mundur

fund

nëse bumpdata.front> 0

r.ndaloj

r.moveDistanca (-0.3, 0.2)

r.turnAngle (randi (270), 0.5) % Rrotullon Roomba në një interval të rastit midis 0 dhe 270 gradë sa më shpejt që të jetë e mundur

fund

nëse bumpdata.left> 0

r.ndaloj

r.moveDistanca (-0.3, 0.2)

r.turnAngle (-90, 0.5) % Rrotullon Roomba -90 gradë sa më shpejt që të jetë e mundur

fund

fund

funksioni lightbumper = lightcheck (r) % Krijon funksionin 'lightcheck'

lightdata = r.getLightBumpers % Cakton të gjitha të dhënat nga sensori i përplasjes së dritës në 'lightdata' të ndryshueshme

lightbumper = lightdata.left || lightdata.djathtas || lightdata.rightCenter || lightdata.leftCenter % Krijon një ndryshore të ruajtur, 'lightbumper', për parakolpët e ndryshëm të dritës

if lightbumper % If deklarata për të thirrur të dhënat e lightbumper nga lart

nëse lightdata.left> 10 % Nëse deklarata shkakton funksione të ndryshme të dhomës ndodh nëse parakolpi i dritës ndjen më shumë se 10 vlera

r.setDriveVelocity (0.05, 0.05) % Ngadalëson dhomën për t'u përgatitur për përplasje

fund % përfundon deklaratën fillestare if

nëse lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

fund

nëse lightdata.djathtas> 10

r.setDriveVelocity (0.05, 0.05)

fund

nëse lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

fund

fund % përfundon 'lightbumper' if statement

fund %përfundon funksionin e kontrollit të dritës

funksioni dontFall = cliffCheck (r) % Krijon funksionin 'cliffCheck'

të dhëna = r.getCliffSensorë; % Cakton të gjitha të dhënat nga sensori i shkëmbit në 'të dhëna' të ndryshueshme

dontFall = data.left <1020 || të dhëna.majtas Përpara <1020 || data.djathtas <1020 || data.right <1020 % Krijon një ndryshore të ruajtur, 'dontFall', për sensorët e ndryshëm të shkëmbinjve

if dontFall % If deklarata për të thirrur të dhënat e sensorit të shkëmbit nga lart

nëse të dhënat.majtas <1010 % Nëse deklarata që shkakton funksione të ndryshme të dhomës ndodh nëse sensori i shkëmbit ndjen më pak se 1010 vlera

r.ndaloj

r.moveDistanca (-0.2, 0.2) % Kthen dhomën Roomba 0.2m

r.turnAngle (-90, 0.5) % Rrotullon Roomba -90 gradë sa më shpejt që të jetë e mundur

elseif data.leftP front <1010

r.ndaloj

r.moveDistanca (-0.3, 0.2)

r.turnAngle (90, 0.5) % Rrotullon Roomba 90 gradë sa më shpejt që të jetë e mundur

të dhëna elseif.djathtas <1010

r.ndaloj

r.moveDistanca (-0.3, 0.2)

r.turnAngle (90, 0.5) % Rrotullon Roomba 90 gradë sa më shpejt që të jetë e mundur

të dhëna elseif.drejta <1010

r.ndaloj

r.moveDistanca (-0.3, 0.2)

r.turnAngle (90, 0.5) % Rrotullon Roomba 90 gradë sa më shpejt që të jetë e mundur

fund

fund

fund

funksionin e lëngjeve = LiquidCheck (r) % Krijon funksionin 'LiquidCheck'

ndërsa %e vërtetë fillojnë lak të pafund për kalibrimin

img = r.getImage; % lexon kamerën e fikur të robotit

imazhi (img) % tregon imazhin në një dritare me figura

red_mean = mesatarja (mesatarja (img (200, 150, 1)))% lexon sasinë mesatare të pikselave të kuq

blu_mean = mesatarja (mesatarja (img (200, 150, 3)))% lexon sasinë mesatare të pikselave blu

lëngjet = mjeti i kuq || blue_mean % Krijon një ndryshore të ruajtur, 'lëngje', për ndryshoret e ndryshme të ngjyrave

nëse lëngjet % If statement për të thirrur të dhënat e figurës nga lart

nëse red_mean> 170 % Nëse deklarata që shkakton funksione të ndryshme të dhomës ndodh nëse kamera sheh një ngjyrë të kuqe mesatare më të madhe se 170

r.ndal % ndalon roomba

r.setLEDCenterColor (255) % vendos rrethin në ngjyrë të kuqe

r.setLEDDigjet (); % pastroni ekranin

f = shirit pritjeje (0, '*MESAZH HYR*'); % krijon një shirit pritjeje për një mesazh ngarkimi

r.setLEDDigrit ('Nxehtë'); % vendos ekranin LED në dalje 'HOT'

pauzë (0.5) %Pushim i shkurtër për të lexuar informacionin e shpërndarë

r.setLEDDigrit ('LAVA'); % vendos ekran LED në dalje 'LAVA'

pauzë (0.5)

shirit pritjeje (.33, f, '*MESAZH HYRS*'); %krijon një rritje në shiritin e pritjes

r.setLEDDigrit ('Nxehtë');

pauzë (0.5)

r.setLEDDigrit ('LAVA');

pauzë (0.5)

shirit pritjeje (.67, f, '*MESAZH HYRS*'); % krijon një rritje në shiritin e pritjes

r.setLEDDigrit ('Nxehtë');

pauzë (0.5)

r.setLEDDigrit ('LAVA');

shirit pritjeje (1, f, '*MESAZH HYR*'); %plotëson shiritin e pritjes

pauzë (1)

mbyll (f) %mbyll shiritin e pritjes

r.setLEDDigjet (); % pastron ekranin LED

mbyll të gjitha %Mbyll të gjitha dritaret e mëparshme

akset ("Ngjyra", "asnjë", "XColor", "asnjë", "YColor", "asnjë") % Pastron dritaren e komplotit të akseve dhe tabelës

y = 0.5; % vendos pozicionin y të tekstit në dritaren e vizatimit

x = 0.06; % vendos pozicionin x të tekstit në dritaren e vizatimit

titulli ('NGA MARS ROOMBA', 'fontsize', 32) % Shton një titull në dritaren e vizatimit

quadeqtxt = 'LAVA E RREZIKUT'; % Vendos ndryshoren 'quadeqtxt' në daljen 0

tekst (x, y, quadeqtxt, 'interpretues', 'latex', 'fontsize', 36); % shfaq tekstin katror në dritaren e vizatimit

r.moveDistanca (-0.2, 0.2) %përmbys dhomën 0.2m

r.turnAngle (180, 0.5) %e kthen dhomën 180 gradë sa më shpejt që të jetë e mundur

r.setLEDCenterColor (128, 128); % vendos LED -in e qendrës së dhomës në portokalli

mbyll të gjitha %mbyll dritaret e mbetura të hapura

elseif blue_mean> 175 % Nëse deklarata që shkakton funksione të ndryshme të dhomës ndodh nëse kamera sheh një ngjyrë blu mesatare më të madhe se 175

r.ndal % ndalon roomba

r.setLEDCenterColor (255) % vendos rrethin në ngjyrë të kuqe

r.setLEDDigjet (); % pastroni ekranin

f = shirit pritjeje (0, '*MESAZH HYR*'); % krijon një shirit pritjeje për një mesazh ngarkimi

r.setLEDDigrit ('SHIKO'); % e vendos ekranin LED në dalje "SHIKO"

pauzë (0.5) %Pushim i shkurtër për të lexuar informacionin e shpërndarë

r.setLEDDigits ('WATR'); % vendos ekran LED në dalje 'WATR'

pauzë (0.5)

shirit pritjeje (.33, f, '*MESAZH HYRS*'); %krijon një rritje në shiritin e pritjes

r.setLEDDigrit ('SHIKO');

pauzë (0.5)

r.setLEDDigits ('WATR');

pauzë (0.5)

shirit pritjeje (.67, f, '*MESAZH HYR*'); % krijon një rritje në shiritin e pritjes

r.setLEDDigits ('SHIKO');

pauzë (0.5)

r.setLEDDigits ('WATR');

shirit pritjeje (1, f, '*MESAZH HYR*'); %plotëson shiritin e pritjes

pauzë (1)

mbyll (f) %mbyll shiritin e pritjes

r.setLEDDigjet (); % pastron ekranin LED

mbyll të gjitha %Mbyll të gjitha dritaret e mëparshme

akset ("Ngjyra", "asnjë", "XColor", "asnjë", "YColor", "asnjë") % Pastron dritaren e komplotit të akseve dhe tabelës

y = 0.5; % vendos pozicionin y të tekstit në dritaren e vizatimit

x = 0.06; % vendos pozicionin x të tekstit në dritaren e vizatimit

titulli ('NGA MARS ROOMBA', 'fontsize', 32) % Shton një titull në dritaren e vizatimit

quadeqtxt = 'UJI I GJETUR'; % Vendos ndryshoren 'quadeqtxt' në daljen 0

tekst (x, y, quadeqtxt, 'interpretues', 'latex', 'fontsize', 36); % shfaq tekstin katror në dritaren e vizatimit

r.moveDistanca (-0.2, 0.2) %përmbys dhomën 0.2m

r.turnAngle (180, 0.5) %e kthen dhomën 180 gradë sa më shpejt që të jetë e mundur

r.setLEDCenterColor (128, 128); % vendos LED -in e qendrës së dhomës në portokalli

mbyll të gjitha %mbyll dritaret e mbetura të hapura

fund %përfundon 'red_mean' nëse deklarata

fund %përfundon 'lëngje' nëse deklarata

fund % mbyll pafund ndërsa loop

fundi % përfundon funksionin 'LiquidCheck'

Hapi 4: Drejtimi i Kodit

Pasi të keni kopjuar dhe ngjitur kodin në MATLAB, duhet të lidheni me Roomba. Pasi Roomba është e lidhur ju duhet të emërtoni ndryshoren r. Funksionet përdorin ndryshoren r kur i referohen Roomba, kështu që Roomba duhet të përcaktohet si ndryshorja r. Pas ekzekutimit të kodit Roomba duhet të funksionojë sipas udhëzimeve.

Recommended: