Բովանդակություն:
- Քայլ 1: Պաշարներ
- Քայլ 2. Մշակել կոդավորում `ցանկալի արդյունքը բավարարելու համար
- Քայլ 3: Փորձարկում
- Քայլ 4: Դիտեք տեսողական արդյունքները
Video: IRobot Create-Mars Expedition Rover Mark I: 4 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Այս հրահանգը կսովորեցնի ձեզ, թե ինչպես ստեղծել iRobot Ստեղծեք ՝ օգտագործելով MatLab կոդավորումը: Ձեր ռոբոտը հնարավորություն կունենա հանքանյութեր որոնել ՝ տարբերելով ձևերը, մանևրելու խորդուբորդ տեղանքը ժայռերի տվիչների միջոցով և հնարավորություն կունենա ձեռքով կառավարել կենդանի սնուցման միջոցով:
Քայլ 1: Պաշարներ
Այս նախագծի համար ձեզ հարկավոր կլինի iRobot Create, որը Roomba ռոբոտի փոշեկուլի ծրագրավորվող տարբերակ է: Ռոբոտը հագեցած է այս նախագծի համար անհրաժեշտ բոլոր սենսորներով, մասնավորապես `հարվածի, ժայռի սենսորներով և« Light Bump »տվիչներով: Ձեզ նույնպես անհրաժեշտ կլինի Raspberry Pi և տեսախցիկ, որոնք օգտագործվում են անլար կապի, կենդանի ծրագրավորման և կենդանի տեսաֆիլմերի համար: Ի վերջո, ձեզ հարկավոր կլինի 3D տպված լեռ ՝ Raspberry Pi- ի և տեսախցիկի համար:
Քայլ 2. Մշակել կոդավորում `ցանկալի արդյունքը բավարարելու համար
Roomba- ն միացնելուց հետո ձեզ հարկավոր է ստեղծել Matlab կոդ, որը կտա ձեր ցանկալի ելքերը ձեր ցանկալի մուտքերից հետո:
Կոդը կարելի է տեսնել այստեղ ՝
%Roomba Project Brenten Arnold (barnol15); Julուլիանա Կորն (qdp218); Mike Heal (mheal) %4/11/19 %Խնդրի նկարագրություն. Ստեղծեք մարսագնաց, որը կօգնի մարդկանց Մարսի հետազոտության/բնակության ժամանակ: Լուծման մեթոդը. Օրգանական (կանաչ) նյութ որոնեք լուսային բամպերների, ժայռերի տվիչների և տեսախցիկի միջոցով `օրգանական նյութերի առկայությունը ստուգելու համար: Թույլ տվեք %rover- ին շրջել կոպիտ տեղանքով `բամպերների, ժայռերի սենսորների և անիվների բարձրության սենսորների միջոցով: Թույլ տվեք մարդկանց վերահսկել մոլորակագնացը %անվտանգ հեռավորությունից և ձեռքով որոնել օգտակար հանածոներ: ընտրություններ = {'LIFE', 'ROUGH TERrain', 'USER CONTROL'}; %Երեք տարբերակ երկխոսության ընտրացանկում Կարգավորում = ընտրացանկ ('', ընտրանքներ), եթե Կարգավորում> 0 %Եթե ընտրված տարբերակը խնդրեք օգտվողի հաստատման ընտրանքներ 2 = {'Այո', 'Ոչ'} %Ստեղծեք բջջային զանգված «այո» կամ «ոչ "ընտրություն Հաստատել = ընտրացանկ (['Դուք ընտրեցիք' 'ընտրանքներ {Կարգավորում}'" ռեժիմ. '], ընտրանքներ 2) %Հաստատեք օգտվողի կարգավորումների ընտրությունը, եթե Հաստատեք == 1 եթե Կարգավորումը == 1 %Ստուգեք, արդյոք ընտրվել է "ԿՅԱՆՔ" կարգավորումը i 0 %Առբերեք և պահեք ժայռի տվիչների արժեքները բջիջի կառուցվածքում «y» l = r.getLightBumpers %Առբերեք և պահեք «f» կառուցվածքում թեթև հարվածի արժեքները, եթե l. Ձախ> 100 %Ստուգեք, արդյոք լուսադիոդային բամպերը ծածկված է r.moveDistance (-0.05) %Տեղափոխել սենյակը հետընթաց 0,05 մետր r.turnAngle (20) %Պտտել սենյակը 20 աստիճան CCW img = r.getImage %Ստանալ պատկեր ազնվամորու կարկանդակ տեսախցիկից roomba rect = [100 0 150 150]; img = imcrop (img, rect) %բերքի պատկերը կենտրոնացնելու համար կարմիր կենտրոնը = միջին (միջին (միջին (img (,,:, 1))) %կանաչ միջին ինտենսիվություն կապույտ = միջին (միջին (միջին (img (:,,, 3))) %միջին կապույտ ինտենսիվություն, եթե կանաչ> կարմիր && կանաչ> կապույտ %Ստուգեք, արդյոք բույսը նկարում է d = msgbox (['Life found! ']); %Displayուցադրել հաղորդագրությունների տուփ `« Կյանքը գտնված է »գրությամբ: սպասել (դ); end elseif l.leftF Front> 100 %Չեկը մնացել է/առջևի լուսարձակող բամպերը ծածկված է r.move Հեռավորություն (-0.05) %Տեղափոխել սենյակը հետընթաց 0.05 մետր img = r.getImage %Ստանալ պատկերը ազնվամորու կարկանդակ տեսախցիկից roomba- ում և պահել փոփոխական 'img- ում 'rect = [100 0 150 150]; img = imcrop (img, rect) %բերքի պատկերը կենտրոնացնելու համար կարմիր կենտրոնը = միջին (միջին (միջին (img (,,:, 1))) %կանաչ միջին ինտենսիվություն կապույտ = միջին (միջին (միջին (img (:,,, 3))) %միջին կապույտ ինտենսիվություն, եթե կանաչ> կարմիր && կանաչ> կապույտ %Ստուգեք, արդյոք բույսը նկարում է d = msgbox (['Life found! ']); %Displayուցադրել հաղորդագրությունների տուփ ՝ «Կյանքը գտնված է» գրությամբ: սպասել (դ); end elseif l.leftCenter> 100 %Ստուգեք, արդյոք լուսավորված է ձախ/կենտրոնի լույսի բամպերը r.move Հեռավորություն (-0.05) %Տեղափոխեք սենյակը հետընթաց 0.05 մետր img = r.getImage %Ստացեք պատկեր ազնվամորու կարկանդակ տեսախցիկից roomba- ում և պահեք փոփոխական 'img- ում 'rect = [100 0 150 150]; img = imcrop (img, rect) %բերքի պատկերը կենտրոնացնելու համար կարմիր կենտրոնը = միջին (միջին (միջին (img (,,:, 1))) %կանաչ միջին ինտենսիվություն կապույտ = միջին (միջին (միջին (img (:,,, 3))) %միջին կապույտ ինտենսիվություն, եթե կանաչ> կարմիր && կանաչ> կապույտ %Ստուգեք, արդյոք բույսը նկարում է d = msgbox (['Life found! ']); %Displayուցադրել հաղորդագրությունների տուփ `« Կյանքը գտնված է »գրությամբ: սպասել (դ); end elseif l.rightCenter> 100 %Ստուգեք, արդյոք աջ/կենտրոնի լուսարձակող բամպերը ծածկված է r.move Հեռավորություն (-0.05) %Տեղափոխեք սենյակը հետընթաց 0.05 մետր img = r.getImage %Ստացեք պատկեր ազնվամորու կարկանդակ տեսախցիկից roomba- ում և պահեք փոփոխական 'img- ում 'rect = [100 0 150 150]; img = imcrop (img, rect) %բերքի պատկերը կենտրոնացնելու համար կարմիր կենտրոնը = միջին (միջին (միջին (img (,,:, 1))) %միջին կանաչ ինտենսիվություն կապույտ = միջին (միջին (միջին (img (:,,, 3))) %միջին կապույտ ինտենսիվություն, եթե կանաչ> կարմիր և & կանաչ> կապույտ %Ստուգեք, արդյոք բույսը պատկերված է d = msgbox (['Կյանքը գտնվեց! ']); %Displayուցադրել հաղորդագրությունների տուփ `« Կյանքը գտնված է »գրությամբ: սպասել (դ); end elseif l.right Առջև> 100 %Ստուգեք, արդյոք աջ/առջևի լույսի բամպերը ծածկված է r.move Հեռավորություն (-0.05) %Տեղափոխեք սենյակը հետընթաց 0.05 մետր img = r.getImage %Ստացեք պատկեր ազնվամորու կարկանդակ տեսախցիկից roomba- ում և պահեք փոփոխական 'img- ում 'rect = [100 0 150 150]; img = imcrop (img, rect) %բերքի պատկերը կենտրոնացնելու համար կարմիր կենտրոնը = միջին (միջին (միջին (img (,,:, 1))) %կանաչ միջին ինտենսիվություն կապույտ = միջին (միջին (միջին (img (:,,, 3))) %միջին կապույտ ինտենսիվություն, եթե կանաչ> կարմիր && կանաչ> կապույտ %Ստուգեք, արդյոք բույսը նկարում է d = msgbox (['Life found! ']); %Displayուցադրել հաղորդագրությունների տուփ `« Կյանքը գտնված է »գրությամբ: սպասել (դ); end elseif l.right> 100 %Ստուգեք, արդյոք լուսապաշտպան աջ բամպերը ծածկված է r.move Հեռավորություն (-0.05) %Տեղափոխեք սենյակը ետ 0.05 մետր r.turnAngle (-20) %Պտտեք սենյակը 20 աստիճան CW img = r.getImage %Ստացեք պատկեր ազնվամորու կարկանդակ տեսախցիկ roomba- ում և պահեք փոփոխական 'img' rect = [100 0 150 150]; img = imcrop (img, rect) %բերքի պատկերը կենտրոնացնելու համար կարմիր կենտրոնը = միջին (միջին (միջին (img (,,:, 1))) %կանաչ միջին ինտենսիվություն կապույտ = միջին (միջին (միջին (img (:,,, 3))) %միջին կապույտ ինտենսիվություն, եթե կանաչ> կարմիր && կանաչ> կապույտ %Ստուգեք, արդյոք բույսը նկարում է d = msgbox (['Life found! ']); %Displayուցադրել հաղորդագրությունների տուփ `« Կյանքը գտնված է »գրությամբ: սպասել (դ); end elseif y.left Առջև <1500 %Ստուգեք, արդյոք սենյակի ձախ/առջևի հատվածը ժայռից դուրս է r.move Հեռավորություն (-0.1, 0.05) %Տեղափոխեք սենյակը 0,1 մետր հետընթաց 0,05 մ/վ արագությամբ: շուռ աստիճաններ CW այլ ° CCW CWişte i = 0 i = 0 r.getBumpers %Առբերեք և պահեք բամպերի տվիչների արժեքները «x» կառուցվածքում y = r.get CliffSensors %Առբերեք և պահեք ժայռերի տվիչների արժեքները «y» կառուցվածքում, եթե x.right == 1 %Ստուգեք, արդյոք աջ բամպերը սեղմված է r.turnAngle (10) %Պտտել սենյակը 10 աստիճան CCW elseif x.left == 1 %Ստուգեք, եթե մնացել է բամպերը սեղմված է r.turnAngle (-10) %Պտտել սենյակը 10 աստիճան CW այլապես x.front == 1 %Ստուգեք, արդյոք առջևի բամպերը սեղմված է r.turnAngle (20) %Պտտել սենյակը 20 աստիճան CCW այլապես x.rightWheelDrop == 1 % Ստուգեք, արդյոք աջ անիվն ընկել է r.turnAngle (-20) %Պտտել սենյակը 20 աստիճան CW այլապես x.leftWheelDrop == 1 %Ստուգումը ձախ անիվն ընկել է r.turnAngle (20) %Պտտել սենյակը 20 աստիճան CCW այլապես y.leftFront < 1500 %Ստուգեք, թե արդյոք սենյակի առջևի ձախ հատվածը ժայռից դուրս է r.move Հեռավորություն (-0.05, 0.05) %Տեղափոխեք սենյակը 0.05 մետր հետընթաց 0.05 մ/վ արագությամբ: 1500 %Ստուգեք, թե արդյոք սենյակի աջ առջևի հատվածը ժայռից դուրս է r.move Հեռավորություն (-0.05, 0.05) %Տեղափոխել սենյակը 0.05 մետր հետընթաց 0.05 մ/վ արագությամբ: %Ստուգեք, եթե ձախ հատվածը o f roomba- ն ժայռից դուրս է r.move Հեռավորություն (-0.05, 0.05)%Տեղափոխել սենյակը հետընթաց 0.05 մետր 0.05 մ/վ արագությամբ r.turnAngle (-10)%Պտտել roomba 10 աստիճան CW elseif y.right0 եթե Շարունակել == 1 i = 0 %Շարունակել կոպիտ տեղանքը այլ i = 1 %Ավարտել կոպիտ տեղանքի վերջը վերջ ուրիշը %Ձեռնարկի ռեժիմ i = 0 r.setLEDDigits (num2str ('USER')) %LED Display- ում ցուցադրել 'USER' d = msgbox (['Arrow Keys - Տեղափոխել; S - Stop Rover; ESC - վերջնական օգտագործողի վերահսկում; Ա - Տեղադրեք ռեսուրս ']); սպասել (դ); մինչդեռ i == 0 r.showCamera %Բացել ազնվամորու կարկանդակի տեսախցիկի կենդանի հոսքը առանձին պատուհանում D = getkey (1) %Օգտվողի կողմից սեղմված ստացման ստեղնը, ASCII արժեքը պահպանել որպես փոփոխական D, եթե D == 30 %Ստուգեք, արդյոք «վեր» սլաքը ունի սեղմված է r.setDriveVelocity (0.1) %roombaba- ն առաջ ուղարկել 0.2 մ/վ արագությամբ այլապես D == 28 %Ստուգեք, արդյոք սեղմված է «ձախ» սլաքը r.setDriveVelocity (0) %Stop roomba- ն առաջ կամ հետընթաց r.turnAngle (15), 0.05) %Պտտել սենյակը 45 աստիճան CCW 0,05 մ/վ արագությամբ այլ դեպքում D == 31 %Ստուգել, արդյոք սեղմված է «ներքևի» սլաքը r.setDriveVelocity (-0.1) %Տեղափոխել սենյակը հետ ՝ 0.2 մ/վ արագությամբ, այլապես D == 29 % Ստուգեք, արդյոք սեղմված է «աջ» սլաքը r.setDriveVelocity (0) %Դադարեցնել roomba- ն առաջ կամ հետընթաց r.turnAngle (-15, 0.05) %Պտտել սենյակը 45 աստիճան CW 0,05 մ/վ արագությամբ, այլապես D == 27 % «esc» (փախուստ) ստեղնը սեղմված էր i = 1 %Փոփոխել «i» փոփոխականի արժեքը ՝ դուրս գալով օղակից d = msgbox ('Exiting "User Control"')) %Օգտվողին տեղեկացրեք, որ այլ կերպ դուրս է գալիս մեխանիկական ռեժիմը, եթե D == 115 %Ստուգեք, արդյոք «s» ստեղնը սեղմված է r.setDriveVelocity (0) %Stop roomba from առաջ կամ հետընթաց elseif D == 97 %Ստուգեք, արդյոք «a» - ն սեղմված է image = r.getImage; imwrite (image, 'image.png') W = Դասակարգել (պատկերը) K = ռեժիմ (W), եթե K == 3 d = msgbox ('Resource found') %Displayուցադրել, եթե ուղղանկյուն ռեսուրսը հայտնաբերել է սպասողականություն (d); %Սպասեք, մինչև օգտվողը փակի «d» հաղորդագրության տուփը այլապես K == 0 d = msgbox ('Resource:(') %Displayուցադրեք, եթե ուղղանկյուն ռեսուրսը չբացահայտվի սպասեք (d); %Սպասեք մինչև օգտվողը փակի «d» հաղորդագրության տուփը end else d = msgbox ('Ոչ վավեր բանալին.') %Displayուցադրել, եթե օգտվողը փակի «ընտրել կարգավորումը» ընտրացանկը սպասեք (d); %Սպասեք, մինչև օգտվողը փակի «d» հաղորդագրության տուփը, սպասեք (d); %Սպասեք օգտվողը փակի հաղորդագրության տուփը "d" end end end else d = msgbox ('Goodbye') %Հրաժեշտ է տալիս, եթե ընտրանքները փակվեն սպասման համար (d);
Քայլ 3: Փորձարկում
Երբ ձեր կոդը գրված է, դուք պետք է փորձարկեք ձեր Roomba- ն: Չնայած ձեր ծածկագիրը կարող է ճիշտ թվալ, ձեր արժեքներից շատերը, հատկապես գույնի կամ ձևի, պետք է փոխվեն, որպեսզի կարողանաք ճիշտ ճանաչել այն օբյեկտները, որոնք կցանկանայիք, որ ձեր Roomba- ն նույնականացներ:
Քայլ 4: Դիտեք տեսողական արդյունքները
Շատ ակնհայտ կլինի `դուք հաջողությամբ ծրագրավորե՞լ եք ձեր Roomba- ն` հիմնվելով նրա տեսողական արդյունքների վրա:
Արդյունքները ներառում են.
- Ձևի հայտնաբերում. Roomba- ի ունակությունը ճիշտ տարբերակել ձևերը `ճիշտ հանքանյութեր գտնելու համար
- Կոպիտ տեղանքի վարժություններ. Խուսափում է ժայռերից կամ մութ տարածքներից
- Ձեռնարկի ռեժիմ. Կենդանի հոսք և Roomba- ն վերահսկելու ունակություն
- Նկարներ. Հանքանյութերի նկարներ
- Կյանքը գտնվեց. MatLab տեքստային տուփ, որը նշանակում է, որ ձեր բույսը ճանաչել է օրգանական կյանքը:
Սա մեր ձեռնարկի ավարտն է: Վայելեք ձեր նոր Mars Expedition Rover- ը:
Խորհուրդ ենք տալիս:
Iron Man Mark II սաղավարտ ՝ 4 քայլ
Iron Man Mark II սաղավարտ. յ ապեր
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: 6 քայլ (նկարներով)
The Ultimate Beer Pong Machine - PongMate CyberCannon Mark III: Ներածություն PongMate CyberCannon Mark III- ը գարեջրի պոնգի տեխնոլոգիայի ամենաթարմ և առաջադեմ կտորն է, որը երբևէ վաճառվել է հանրությանը: Նոր CyberCannon- ով ցանկացած մարդ կարող է դառնալ գարեջրի պոնգի սեղանի ամենասարսափելի խաղացողը: Ինչպե՞ս է սա
Slave Trigger Flash Mark II: 6 քայլ (նկարներով)
Slave Trigger Flash Mark II. Այս հրահանգով ես կբացատրեմ, թե ինչպես պատրաստել իրական (օպտիկական) ստրուկի ձգան բռնկում նվազագույն բաղադրիչներով: Կան բազմաթիվ բարդ ձևեր, որոնք կարող եք գտնել ինտերնետում, այս դիզայնը շատ պարզ է և աշխատում է լավ լուսավոր և թույլ լուսավոր միջավայրում
Localino Tracks Roomba IRobot, Maps the Environment and Allows Control. 4 քայլ
Localino- ն հետևում է Roomba IRobot- ին, Քարտեզներ շրջակա միջավայրի վրա և թույլ է տալիս վերահսկել. Այս ուսանելի ուսուցման բացատրությունը, որը բացատրում է HIL վերահսկողությունը
Mark I Super Psyllium Passivia Բարձրախոսներ. 6 քայլ (նկարներով)
Mark I Super Psyllium Passivia բարձրախոսներ. Ոգեշնչված հրահանգների վրա պատրաստված բարձրախոսների նախագծերից, ինչպիսի՞ ավելի լավ միջոց է մտնել Ձայնի արվեստի մեջ, քան YAS (Եվս մեկ խոսնակ) դարձնելը: Մենք կանոնավոր մարդիկ ենք այստեղ Regularity Audio Labs- ում և ունեինք այս հրաշալի դատարկ տարաները ցրված