Բովանդակություն:

Mars Roomba Project UTK: 4 քայլ
Mars Roomba Project UTK: 4 քայլ

Video: Mars Roomba Project UTK: 4 քայլ

Video: Mars Roomba Project UTK: 4 քայլ
Video: EF 230 Roomba Project 2024, Հուլիսի
Anonim
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK
Mars Roomba Project UTK

ՀՐԱՊԱՐԱԿՈ:ԹՅՈՆ. ՍԱ ՄԻԱՅՆ ԿՇԱՌԵԼ, ԵԹԵ ՌՈMՄԲԱԸ ՄԵԿՆԱՐԿՎԵԼ Ա

ՇԱՏ ՀԱՏՈAYԿ AYԱՆԱՊԱՐՀ, ԱՅՍ ՈSTRՍՈԻՉԸ ՍՏԵՎԵԼ Է ԵՎ ՄՏԱՎԵԼ Է ՕԳՏԱԳՈՐՎԵԼ ՏԵՆԵՍԻԱՅԻ ՈՍԱՆՈՆԵՐԻ ԵՎ ՖԱԿՈTԼՏԵՏԻ ՀԱՄԱԼՍԱՐԱՆՈՄ:

Այս կոդը օգտագործվում է Roomba- ի ստեղծման համար `MATLAB- ում տեղական գրված և պահպանված ծածկագիրը գործարկելու համար: Սա չի աշխատի, եթե չկարողանաք ստանալ անհրաժեշտ գրադարաններ Թենեսիի համալսարանի կայքից: Եթե ունեք գրադարաններ, ապա կարող եք դրանք օգտագործել `ձեր սեփական Roomba- ն ծրագրավորելու համար` օգտագործելով գրադարանի գործառույթները: Այս Instructable- ը սովորեցնում է ձեզ, թե ինչպես տեղադրել գրադարանները, ստեղծել թղթապանակ բոլոր ծածկագրերի համար և ինչպես կոդավորել և օգտագործել մեր ներքևում տրված ծրագիրը:

Պահանջվող նյութեր.

· Ռոմեբա

· MATLAB

· Ազնվամորի Պի և Պի տեսախցիկ

Քայլ 1: Գրադարանների ձեռքբերում

Ինժեներական կայքում կա գործիքատուփ/գրադարան, ներբեռնեք և տեղադրեք նոր թղթապանակի մեջ: Այս թղթապանակը պետք է պարունակի նախագծի աշխատանքի բոլոր ֆայլերը, քանի որ ձեր պատրաստած ծրագրում օգտագործվող ցանկացած գործառույթ պետք է հղում կատարի գրադարանին: Դա անելուց հետո կարող եք սկսել աշխատել ձեր ծրագրերի վրա

Քայլ 2: Writրագրերի գրառում

Կան բավականին շատ գործառույթներ, որոնք կարող են օգտագործվել ծրագրում, այդ գործառույթներին կարելի է հասնել ՝ օգտագործելով «doc roomba» հրամանը: Օգտագործելով այս գործառույթները, դուք կարող եք վերահսկել ձեր Roomba- ն շատ տարբեր եղանակներով: Ստորև բերված ծածկագիրը մարսագնաց ստեղծելու համար տարբեր եղանակներով օգտագործում է հարվածի սենսորներ, լուսադիոդային սենսորներ, տեսախցիկ և ժայռերի տվիչներ: Մենք հարվածների սենսորների միջոցով հայտնաբերեցինք, թե երբ Roomba- ն հարվածում է ինչ -որ առարկայի, երբ դա տեղի ունենա, ռոբոտը կվերադառնա, կշրջվի և կշարունակի շարժվել: Մինչև Roomba- ն հարվածում է որևէ առարկայի, լուսային սանդղակը կբացահայտի օբյեկտը և կդանդաղեցնի Roomba- ն, այնպես որ երբ այն բախվի առարկայի հետ ՝ հարվածի սենսորը ակտիվացնելու համար, Roomba- ն ավելի քիչ կվնասվի/կազդի ազդեցությունից: Տեսախցիկը մակերեսին ջուր կամ լավա է փնտրում, եթե հեղուկ չգտնվի, ապա ռոբոտը կշարունակի որոնումները, եթե ջուր գտնվի, ապա ռոբոտը օպերատորներին կուղարկի հաղորդագրություն: Clայռի տվիչները նախատեսված են ռոբոտին կանգնեցնելու համար, եթե այն մոտենա ժայռին: Եթե ռոբոտը զգում է ժայռի ժայռը, այն կշրջվի և կշրջվի, որպեսզի չընկնի:

Քայլ 3: Կոդ

Պատճենեք և տեղադրեք այն MATLAB ֆայլում, որը գտնվում է գրադարանների հետ նույն թղթապանակում

functionMainRoombaFile (r)

r.setDriveVelocity (0.1, 0.1)

իսկ ճշմարիտ % Infinte while loop ՝ ծածկագիրը գործարկելու համար

dontFall = cliffCheck (r) % «cliffCheck» գործառույթին նշանակում է «dontFall» փոփոխական

if dontFall % if «cliffCheck» - ի ավարտից հետո կոդով շարունակելու մասին հայտարարությունը

r.setDriveVelocity (0.1, 0.1) % Շարունակում է Roomba- ն շարժվել «cliffCheck» - ի ավարտից հետո

end % ավարտում է «dontFall» if հայտարարությունը

bumper = bumpcheck (r) % Վերագրում է «bumper» փոփոխականին «bumpcheck» գործառույթին

եթե բամպեր % if «bumpcheck» - ից հետո կոդով անցնելու մասին հայտարարությունը ավարտված է

r.setDriveVelocity (0.1, 0.1) % Շարունակում է Roomba- ն շարժվել «bumpcheck» - ի ավարտից հետո

end % ավարտում է «բամպերը» if հայտարարությունը

հեղուկներ = LiquidCheck (r) % Վերագրում է փոփոխական «հեղուկներ» «LiquidCheck» գործառույթին

եթե հեղուկներ % if հայտարարությունը «LiquidCheck» - ի ավարտից հետո կոդով անցնելու մասին

r.setDriveVelocity (0.1, 0.1) % Շարունակում է Roomba- ն շարժվել «LiquidCheck» - ի ավարտից հետո

վերջ % ավարտում է «հեղուկները», եթե հայտարարությունը

lightbumper = lightcheck (r) % Վերագրում է «lightbumper» փոփոխականին «lightcheck» գործառույթին

դադար (0.1) % Կարճ դադար `օղակի շարունակական կրկնությունից խուսափելու համար

end % ավարտվում է անվերջ, իսկ հանգույցը

end % ավարտի գործառույթը

գործառույթը bumper = bumpcheck (r) % Ստեղծում է «bumpcheck» գործառույթ

bumpdata = r.getBumpers % Հանձնարարում է բոլոր տվյալները բամպերից «bumpdata» փոփոխականին

բամպեր = bumpdata.right || bumpdata.left || bumpdata.front % Ստեղծում է պահված փոփոխական ՝ «բամպեր», տարբեր բամպերների համար

եթե bumpdata.right> 0 % Եթե հայտարարությունը առաջացնի սենյակի տարբեր գործառույթներ, եթե բամպերը բախվի

r.stop % Կանգնում է Roomba- ին

r.moveDistance (-0.3, 0.2) % Հակադարձում է Roomba 0.3 մ

r.turnAngle (90, 0.5) % Հնարավորինս արագ պտտում է Roomba- ն 90 աստիճանով

վերջ

եթե bumpdata.front> 0

ռ. դադարեցնել

r.moveDistance (-0.3, 0.2)

r.turnAngle (randi (270), 0.5) % Պտտում է Roomba- ն 0 -ից 270 աստիճանի միջև հնարավորինս արագ

վերջ

եթե bumpdata.left> 0

ռ. դադարեցնել

r.moveDistance (-0.3, 0.2)

r.turnAngle (-90, 0.5) % Հնարավորինս արագ պտտում է Roomba -90 աստիճանով

վերջ

վերջ

գործառույթը lightbumper = lightcheck (r) % Ստեղծում է «lightcheck» գործառույթ

lightdata = r.getLightBumpers % Վերագրում է բոլոր տվյալները լուսային հարվածի սենսորից փոփոխական «lightdata» - ին

lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Ստեղծում է պահվող փոփոխական ՝ «lightbumper» ՝ տարբեր լուսային բամպերների համար

if lightbumper % If հայտարարություն ՝ վերևից զանգահարելու համար lightbumper- ի տվյալները

եթե lightdata.left> 10 % Եթե հայտարարությունը առաջացնում է սենյակի տարբեր գործառույթներ, եթե լույսի բամպերը զգում է 10 -ից մեծ արժեքներ

r.setDriveVelocity (0.05, 0.05) % Դանդաղեցնում է roomba- ն ՝ հարվածի պատրաստվելու համար

end % ավարտում է սկզբնական if հայտարարությունը

եթե lightdata.rightCenter> 10

r.setDriveVelocity (0.05, 0.05)

վերջ

եթե lightdata.right> 10

r.setDriveVelocity (0.05, 0.05)

վերջ

եթե lightdata.leftCenter> 10

r.setDriveVelocity (0.05, 0.05)

վերջ

end % ավարտում է «lightbumper» if հայտարարությունը

end %ավարտում է lightcheck գործառույթը

գործառույթը dontFall = cliffCheck (r) % Ստեղծում է «cliffCheck» գործառույթը

տվյալներ = r.getCliffSensors; % Iffայռի սենսորից բոլոր տվյալները վերագրում է փոփոխական «տվյալներին»

dontFall = data.left <1020 || data.left Առաջինը <1020 || data.rightF Front <1020 || data.right <1020 % Ստեղծում է պահվող փոփոխական ՝ «dontFall», տարբեր ժայռերի տվիչների համար

if dontFall % If հայտարարություն `զանգահարելու ժայռի տվիչի տվյալները վերևից

եթե տվյալները. ձախ <1010 % Եթե հայտարարությունը առաջացնում է սենյակի տարբեր գործառույթներ, եթե ժայռի սենսորը զգում է 1010 -ից պակաս արժեքներ

ռ. դադարեցնել

r.moveDistance (-0.2, 0.2) % Հակադարձում է Roomba 0.2 մ

r.turnAngle (-90, 0.5) % Հնարավորինս արագ պտտում է Roomba -90 աստիճանով

elseif data.left Առաջինը <1010

ռ. դադարեցնել

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Հնարավորինս արագ պտտում է Roomba- ն 90 աստիճանով

elseif data.rightF Front <1010

ռ. դադարեցնել

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Հնարավորինս արագ պտտում է Roomba- ն 90 աստիճանով

elseif data.right <1010

ռ. դադարեցնել

r.moveDistance (-0.3, 0.2)

r.turnAngle (90, 0.5) % Հնարավորինս արագ պտտում է Roomba- ն 90 աստիճանով

վերջ

վերջ

վերջ

գործառույթ հեղուկներ = LiquidCheck (r) % Ստեղծում է «LiquidCheck» գործառույթը

իսկ ճշմարիտ %-ը սկսում է անվերջ հանգույց ՝ չափագրման համար

img = r.getImage; % -ը կարդում է ռոբոտի տեսախցիկը

image (img) % -ը ցույց է տալիս պատկերը պատկերի պատուհանում

red_mean = միջին (միջին (միջին (img (200, 150, 1))))% -ը կարդում է կարմիր պիքսելների միջին քանակը

blue_mean = միջին (միջին (միջին (img (200, 150, 3))))% -ը կարդում է կապույտ պիքսելների միջին քանակը

հեղուկներ = կարմիր_միջոց || blue_mean % Ստեղծում է պահվող փոփոխական ՝ «հեղուկներ» ՝ տարբեր գույնի փոփոխականների համար

եթե հեղուկներ % If հայտարարություն, որը կոչում է պատկերի տվյալները վերևից

եթե red_mean> 170 % Եթե հայտարարությունը առաջացնում է սենյակի տարբեր գործառույթներ, եթե տեսախցիկը տեսնում է 170 -ից ավելի միջին կարմիր գույն

r.stop % կանգնում է roomba- ին

r.setLEDCenterColor (255) % -ը շրջան է դնում կարմիր գույնի

r.setLEDDigits (); % մաքրել էկրանը

f = սպասման վահանակ (0, '*ՄՈCOՏՔԻ ՀՈESSՅՍԸ' '); % -ը ստեղծում է հաղորդագրության բեռնման սպասման տող

r.setLEDDigits ('HOT'); % -ը LED էկրանը դնում է «HOT» ելքի վրա

դադար (0,5) %Համառոտ Դադարեցվել տեղեկատվությունը կարդալու համար

r.setLEDDigits («LAVA»); % -ը LED էկրան է դնում «LAVA» ելքի վրա

դադար (0.5)

սպասասեղան (.33, f, '*ՄՈCOՏՔԻ ՈESSԵՐՁ*'); %-ը ստեղծում է սպասման տողի աճ

r.setLEDDigits ('HOT');

դադար (0.5)

r.setLEDDigits («LAVA»);

դադար (0.5)

սպասասեղան (.67, f, '*ՄՈCOՏՔԻ ՈESSԵՐՁ*'); % -ը ստեղծում է սպասման տողի աճ

r.setLEDDigits ('HOT');

դադար (0.5)

r.setLEDDigits («LAVA»);

սպասասեղան (1, զ, '*ՄՈCOՏՔԻ ՀՈESSՅՍԸ'); %-ը լրացնում է սպասասեղանը

դադար (1)

փակել (զ) %փակում է սպասասեղանը

r.setLEDDigits (); % մաքրում է LED էկրանը

փակել բոլորը %Փակում է բոլոր նախորդ պատուհանները

առանցքներ («Գույն», «ոչ», «XColor», «ոչ», «YColor», «ոչ») % Մաքրում է առանցքների և գծապատկերի գծապատկերի պատուհանը

y = 0.5; % -ը սահմանում է տեքստի y- դիրքը գծապատկերման պատուհանում

x = 0.06; % -ը սահմանում է տեքստի x- դիրքը գծապատկերման պատուհանում

վերնագիր ('MARS ROOMBA- ից', 'fontsize', 32) % Ավելացնում է վերնագիր գծագրման պատուհանում

quadeqtxt = 'ՎՏԱՆԳԱՎՈՐ ԼԱՎԱ'; % «Quadeqtxt» փոփոխականը դնում է 0 ելքի վրա

տեքստ (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % -ը ցուցադրում է քառակուսի տեքստը գծագրման պատուհանում

r.moveDistance (-0.2, 0.2) %-ը շրջում է սենյակը 0.2 մ

r.turnAngle (180, 0.5) %-ը հնարավորինս արագ պտտում է սենյակը 180 աստիճանով

r.setLEDCenterColor (128, 128); % -ը roomba կենտրոնի LED- ն սահմանում է նարնջագույն

փակել բոլոր %-ը փակում է մնացած բաց պատուհանները

elseif blue_mean> 175 % Եթե հայտարարությունը առաջացնում է սենյակի տարբեր գործառույթներ, եթե տեսախցիկը տեսնում է 175 -ից մեծ միջին կապույտ գույն

r.stop % կանգնում է roomba- ին

r.setLEDCenterColor (255) % -ը շրջան է դնում կարմիր գույնի

r.setLEDDigits (); % մաքրել էկրանը

f = սպասման վահանակ (0, '*ՄՈCOՏՔԻ ՀՈESSՅՍԸ' '); % -ը ստեղծում է հաղորդագրության բեռնման սպասման տող

r.setLEDDigits ('ՆԱՅԵԼ'); % -ը LED էկրանը դնում է «LOOK» ելքի վրա

դադար (0.5) %Համառոտ Դադարեցվել տեղեկատվության ընթերցումը

r.setLEDDigits ('WATR'); % -ը LED էկրանը դնում է «WATR» ելքի վրա

դադար (0.5)

սպասասեղան (.33, f, '*ՄՈCOՏՔԻ ՈESSԵՐՁ*'); %-ը ստեղծում է սպասման տողի աճ

r.setLEDDigits ('ՆԱՅԵԼ');

դադար (0.5)

r.setLEDDigits ('WATR');

դադար (0.5)

սպասասեղան (.67, f, '*ՄՈCOՏՔԻ ՈESSԵՐՁ*'); % -ը ստեղծում է սպասման տողի աճ

r.setLEDDigits ('ՆԱՅԵԼ');

դադար (0.5)

r.setLEDDigits ('WATR');

սպասասեղան (1, զ, '*ՄՈCOՏՔԻ ՀՈESSՅՍԸ'); %-ը լրացնում է սպասասեղանը

դադար (1)

փակել (զ) %փակում է սպասասեղանը

r.setLEDDigits (); % մաքրում է LED էկրանը

փակել բոլորը %Փակում է բոլոր նախորդ պատուհանները

առանցքներ («Գույն», «ոչ», «XColor», «ոչ», «YColor», «ոչ») % Մաքրում է առանցքների և գծապատկերի գծապատկերի պատուհանը

y = 0.5; % -ը սահմանում է տեքստի y- դիրքը գծապատկերման պատուհանում

x = 0,06; % -ը սահմանում է տեքստի x- դիրքը գծապատկերման պատուհանում

վերնագիր ('MARS ROOMBA- ից', 'fontsize', 32) % Ավելացնում է վերնագիր գծագրման պատուհանում

quadeqtxt = 'Գտնված ջուր'; % «Quadeqtxt» փոփոխականը դնում է 0 ելքի վրա

տեքստ (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % -ը ցուցադրում է քառակուսի տեքստը գծագրման պատուհանում

r.moveDistance (-0.2, 0.2) %-ը շրջում է սենյակը 0.2 մ

r.turnAngle (180, 0.5) %-ը հնարավորինս արագ պտտում է սենյակը 180 աստիճանով

r.setLEDCenterColor (128, 128); % -ը roomba կենտրոնի LED- ն սահմանում է նարնջագույն

փակել բոլոր %-ը փակում է մնացած բաց պատուհանները

end %ավարտվում է 'red_mean' if հայտարարությունը

վերջ %ավարտում է «հեղուկները», եթե հայտարարությունը

end % -ը փակում է անվերջ, իսկ loop- ը

end % ավարտում է գործառույթը 'LiquidCheck'

Քայլ 4: Գործարկեք ծածկագիրը

MATLAB կոդը պատճենելուց և տեղադրելուց հետո դուք պետք է միանաք Roomba- ին: Երբ Roomba- ն միացված է, դուք պետք է անվանեք r փոփոխականը: Ֆունկցիաներն օգտագործում են r փոփոխականը Roomba- ին անդրադառնալիս, ուստի Roomba- ն պետք է սահմանվի որպես r փոփոխական: Կոդը գործարկելուց հետո Roomba- ն պետք է աշխատի ըստ ցուցումների:

Խորհուրդ ենք տալիս: