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

IRobot Create-Mars Expedition Rover Mark I: 4 քայլ
IRobot Create-Mars Expedition Rover Mark I: 4 քայլ

Video: IRobot Create-Mars Expedition Rover Mark I: 4 քայլ

Video: IRobot Create-Mars Expedition Rover Mark I: 4 քայլ
Video: Посадка Марсохода Perseverance- История Изнутри 2024, Հուլիսի
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Այս հրահանգը կսովորեցնի ձեզ, թե ինչպես ստեղծել 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- ը:

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