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

Տիեզերագնացներին օժանդակող Roomba: 4 քայլ
Տիեզերագնացներին օժանդակող Roomba: 4 քայլ

Video: Տիեզերագնացներին օժանդակող Roomba: 4 քայլ

Video: Տիեզերագնացներին օժանդակող Roomba: 4 քայլ
Video: Հանդիպում Ռալֆ Յիրիկյանի հետ 2024, Նոյեմբեր
Anonim
Տիեզերագնացներին օժանդակող Roomba
Տիեզերագնացներին օժանդակող Roomba

Այս նախագիծը պատրաստված է iRobot- ի 2 -րդ տարբերակի Raspberry Pi 3 -ի օգտագործմամբ: MATLAB- ն օգտագործվում է ռոբոտին ծրագրելու համար `հատուկ ցուցումներին հետևելու համար` օգտագործելով իր տվիչներն ու տեսախցիկը: Սենսորներն ու տեսախցիկներն օգտագործվում են տիեզերագնացին հաջորդող հատուկ առաջադրանքներ կատարելու և նրան ինչ -որ բան սխալ լինելու դեպքում կապ հաստատելու համար:

Քայլ 1: Անհրաժեշտ մասեր

Անհրաժեշտ մասեր
Անհրաժեշտ մասեր
Անհրաժեշտ մասեր
Անհրաժեշտ մասեր
Անհրաժեշտ մասեր
Անհրաժեշտ մասեր
Անհրաժեշտ մասեր
Անհրաժեշտ մասեր

1. iRobot Ստեղծել տարբերակ 2

IRobot Create- ը այս ծրագրի ամենաէական մասն է, քանի որ այն ծրագրավորելի է և կարող է հիանալի ներկայացում լինել իրական տիեզերագնացների համար, որոնք հետևում են տիեզերագնացներին և հետագայում օգնում նրանց:

2. Ազնվամորի Պի 3

Այս նախագծի համար օգտագործվող ծրագրավորվող Raspberry Pi- ն էր: Կոդը նախատեսված է Pi- ի համար, իսկ Pi- ի կցված տարբերակը 3 -ն է (մոդել B): Այլ ծրագրավորվող տախտակներ, ինչպիսիք են arduino- ն, կարող են օգտագործվել, սակայն arduino- ն և այլ տախտակների մեծ մասը կպահանջեն այլ կոդավորում, քան նկարագրված է մեկ այլ քայլում:

3. Raspberry Pi Camera Module

Այս նախագծի համար անհրաժեշտ Raspberry Pi- ի միակ կողմնակի կապը Camera Module- ն է: Տեսախցիկի մոդուլը այս նախագծի անբաժանելի մասն է, քանի որ roomba- ն միայն առաջադրանքներ կկատարի `հիմնվելով տեսախցիկի մեջ տեսածի վրա:

4. MATLAB 2018 ա

MATLAB- ի երկրորդ ամենավերջին տարբերակը ՝ 2018a- ն, օգտագործվել է այս տեղադրման մեջ ներգրավված կոդավորման համար: Ամենայն հավանականությամբ, MATLAB- ի շատ այլ տարբերակներ կաշխատեն դրա հետ, քանի որ roomba- ի ծրագրավորումը որոշ ժամանակ գոյություն ունի

Քայլ 2: Ֆայլեր և տեսախցիկի կազմաձևում

Ֆայլեր և տեսախցիկի կազմաձևում
Ֆայլեր և տեսախցիկի կազմաձևում

1. Raspberry Pi և Camera միացումներ սենյակին

  • Pi- ն iRobot- ին կարող է միանալ անմիջապես միկրո USB- ով: Դա այն ամենն է, ինչ պետք է պատրաստ լինի օգտագործման համար: Այնուամենայնիվ, խորհուրդ է տրվում, որ այն ապահով տեղադրվի սենյակի վրա, ինչպես ցույց է տրված նկարներում մինչ այժմ ներկայացված ողջ ընթացքում:
  • Տեսախցիկն անմիջական կապ ունի Raspberry Pi- ի հետ, և մեծապես խորհուրդ է տրվում, որ ինչ -որ բան գնվի կամ պատրաստվի, որպեսզի տեսախցիկն ուղղակի բարձր պահի: Տեսախցիկին իրական իմաստ չկա, եթե այն հնարավոր չէ պահել տեղում ՝ ցույց տալու այն, ինչ տեսնում է սենյակը:

2. Ֆայլեր

  • Ամեն ինչ կարգավորելուց և միացնելուց հետո համոզվեք, որ ռոբոտը վերակայված է և պատրաստ է գնալ ՝ միասին պահելով «Տեղ» և «Նավահանգիստ» կոճակները 10 վայրկյան:
  • Այստեղ է, որ առաջին հերթին անհրաժեշտ է MATLAB- ը: Roomba- ի ֆայլերը պետք է նախ տեղադրվեն, և այն, ինչ անհրաժեշտ է այս ֆայլերի համար, գործարկելն է ՝ այս հղման վրա տրված ծածկագիրը.
  • https://ef.engr.utk.edu/ef230-2017-08//projects/ro…

Քայլ 3. Roomba- ի նախնական փորձարկում

Շատ նախնական ստուգումներ պետք է կատարվեն սենյակի վրա `համոզվելու, որ այն աշխատում է:

1. Համոզվեք, որ միացված եք նույն WiFi ցանցին, ինչ roomba- ն: Առանց դրա, դուք երբեք չեք կապվի MATLAB- ի միջոցով:

2. Պարզեք, թե որ համարին է հատկացված ձեր roomba- ն, որպեսզի կարողանաք միանալ ձեր ընտրած սենյակին: Օրինակ, եթե ձեր roomba- ի համարը 30 է, դուք դրան միանում եք ՝ MATLAB- ի հրամանի պատուհանում մուտքագրելով roomba (30):

3. Սենյակը կարելի է կառավարել MATLAB- ի կառուցվածքների միջոցով: Օրինակ, եթե roomba (30) - ի համար ձեր կոդը սահմանեք «r» փոփոխականը, ռոբոտը կարող է առաջ շարժվել r.moveDistance հրամանով (0.2, 0.1):

4. Կան բազմաթիվ տարբեր հրամաններ, որոնք կարելի է հաղորդել roomba- ին, և դրանք կարելի է տեսնել ՝ հրամանի պատուհանում մուտքագրելով «doc roomba»:

5. Լույսի, հարվածի և ժայռի ընթերցման համար նախատեսված սենսորները կարող են ընթերցվել ՝ օգտագործելով «doc roomba» - ում նշված հրամանները, բայց սենսորային տվյալները տեսնելու մշտական, կոկիկ ընտրացանկ ունենալու միջոցը կարելի է տեսնել «r.testSensors» - ի միջոցով: '.

6. Այս ամենը փորձարկելուց հետո ռոբոտի պատկերը հավաքող ծրագրակազմը կարող է օգտագործվել կարված նկարները կարդալու և տեսնելու համար: Դրա հիմնական կոդը կլինի img = r.getImage և imshow (img);.

7. Նկարի RGB արժեքները կարելի է գտնել red_mean = միջին (միջին (միջին (img (:,,, 1))) կոդերով:

green_mean = միջին (միջին (միջին (img (:,:, 2))); և կապույտ_միջոց = միջին (միջին (միջին (img (:,:, 3)));.

Քայլ 4: Օրինակ MATLAB կոդ

Օրինակ MATLAB կոդ
Օրինակ MATLAB կոդ

Այս պահին, դուք այժմ պատրաստ եք օգտագործել սենսորներն ու պատկերը վերցնող ծրագրակազմը ՝ ձեր սեփական պտույտը ստեղծելու համար Մարդու օգնության նախատիպի Mars Rover- ի վրա: Մեր օրինակը տիեզերագնացին հետևելն է ՝ հետևելով սպիտակ գույնին և շարժվելով դեպի այն: Ռոբոտը կտա ազդանշան, եթե նրա տվիչները կարդում են բարձր արժեքներ, որպեսզի տիեզերագնացը կարողանա վերականգնել ռոբոտին, եթե այն խրված է, կամ գնա վերցրու այն և նորից տեղադրի, եթե այն խրված է ժայռի վրա: Այնուամենայնիվ, այն միայն կարդում է այս սխալները, քանի դեռ այն տեսնում է սպիտակ: Առանց տեսնելու սպիտակ գույնը, ռոբոտը կմտնի սխալի ռեժիմ: Isրագրված է երկու տարբեր տեսակի էլ. Եթե նա տեսնում է տիեզերագնացի մաշկի գույնը, դա ակնհայտորեն լավ չէ, ուստի այն կզգուշացնի տան հիմքը, եթե տիեզերագնացը մաշկը ցուցադրի կոստյումի անսարքությամբ: Մյուս հաղորդագրությունը պատրաստ է, եթե տիեզերագնացն ուղղակի անհետանա տեսադաշտից: Եթե տեսախցիկների համար սպիտակ կամ մաշկի գույն չկա, ռոբոտը կշրջվի և կուղարկի մեկ այլ, բայց այլ էլ. Նկարները, որտեղ սենյակը չի կարող տեսնել տիեզերագնացին, կուղարկվեն էլ. Մեր նախագծի ծածկագիրը ներկայացված է ստորև.

i = 1:.1: 3 img = r.getImage; պատկեր (img) red_mean = միջին (միջին (միջին (img (:,:, 1))); green_mean = միջին (միջին (միջին (img (:,:, 2))); blue_mean = միջին (միջին (միջին (img (:,:, 3))); եթե red_mean> 110 && red_mean 110 && blue_mean 110 && green_mean0 || bump.left> 0 || bump.front> 0 r.beep () r.beep () r.beep () r.stop elseif cliff.left <10 || cliff.left Առաջինը <10 || cliff.right Առջև <10 || ժայռ. right700 || light.left Առաջինը> 700 || light.leftCenter> 700 || light.rightCenter> 700 || light.rightF Front> 700 || լույս setDriveVelocity (.3,.2) r. դադարեցնել վերջը, եթե կանաչ_գույնը <35 && blue_mean <35 %մաշկի գույնը ցույց է տալիս (անհրաժեշտ է ճշգրտել տիեզերագնացների մաշկի գույնի հիման վրա) r.beep (); r. beep (); r. beep (); փոստ = '[email protected]'; %ուղարկում է նամակ, որը ցույց է տալիս, որ հայցը անջատված է psswd = 'yeah'; հյուրընկալող = 'smtp.gmail.com'; նավահանգիստ = '465'; emailto = '[email protected]'; m_subject = 'առարկա'; m_text = 'թեստ'; setpref («Ինտերնետ», «E_mail», փոստ); setpref («Ինտերնետ», «SMTP_Server», հաղորդավար); setpref («Ինտերնետ», «SMTP_Username», փոստ); setpref ('ինտերնետ', 'SMTP_Password', psswd); props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', փոստ); props.setProperty ('mail.smtp.host', հաղորդավար); props.setProperty ('mail.smtp.port', նավահանգիստ); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.port', նավահանգիստ); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (emailto, «Help!», «Տիեզերագնացների համազգեստը անջատված է», img); վերջ, եթե red_mean 135 || կանաչ_միջոց 135 || blue_mean 135 համար j = 1: 2 %, եթե սպիտակ գույնը չի կարող գտնվել ռոբոտի կողմից r.turnAngle (360) mail = '[email protected]'; psswd = 'այո'; հյուրընկալող = 'smtp.gmail.com'; նավահանգիստ = '465'; emailto = '[email protected]'; m_subject = 'առարկա'; m_text = 'թեստ'; setpref («Ինտերնետ», «E_mail», փոստ); setpref («Ինտերնետ», «SMTP_Server», հաղորդավար); setpref («Ինտերնետ», «SMTP_Username», փոստ); setpref ('ինտերնետ', 'SMTP_Password', psswd); props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', փոստ); props.setProperty ('mail.smtp.host', հաղորդավար); props.setProperty ('mail.smtp.port', նավահանգիստ); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.port', նավահանգիստ); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (emailto, «Help!», «Տիեզերագնացը չի գտնվում», img); r.stop ավարտել end end end

Ակնհայտ է, որ այստեղ խառնաշփոթ է, բայց պատճենելուց հետո այն պետք է դուրս գա: Դրա համար գաղտնաբառերը և էլ.

Այնուամենայնիվ, մեր օրինակը այս ռոբոտի հետ խառնվելու բազմաթիվ եղանակներից մեկն է, որպեսզի այն համապատասխանի բոլորին: Շատ տարբեր անելիքներ կան, որոնք կարող եք ինքներդ ձեզ հարմարեցնել:

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