Orodha ya maudhui:

Robo-Fundi: Hatua 8
Robo-Fundi: Hatua 8

Video: Robo-Fundi: Hatua 8

Video: Robo-Fundi: Hatua 8
Video: HIZI HAPA TIMU 8 BORA ZILIZO INGIA HATUA YA ROBO FINALY | 16 BORA ILIKUWA BALAA SANA 2024, Novemba
Anonim
Robo-Fundi
Robo-Fundi

Fikiria kwa sekunde kuwa wewe ni mmoja wa wanaanga wanaotua kwenye Mars. Una mambo milioni ya kufanya, sampuli za kuchukua, majaribio ya kukimbia, data ya kukusanya, lakini mara moja au mara mbili kwa siku unahitaji kukimbia kuzunguka kwa makao na / au moduli za utafiti ambazo unaishi na kufanya kazi kuzikagua. Ni muhimu, mtu anapaswa kuhakikisha kuwa kitu hicho kiko katika hali nzuri, kwamba maelfu ya vipande na sehemu zinafanya kazi na ziko mahali. Lakini vipi ikiwa kungekuwa na msaidizi wa kiotomatiki kukuondolea baadhi ya majukumu hayo. Je! Ikiwa kungekuwa na robot ndogo ambayo inaweza kuzunguka ndani ya moduli ili kuhakikisha kuwa kila kitu kiko mahali, kinafanyakazi, na salama.

Robo-Fundi kuwaokoa.

Kwa kweli, nambari hii inamdhibiti Robo-Fundi kwani inafuata njia nyembamba ya rangi ardhini. Itafuata njia hii hadi itakapopata makutano katika njia au zamu, ambayo itasababisha picha ipigwe kwa usindikaji wa picha ili kumruhusu Robo-Fundi kufanya uamuzi wa wapi aende baadaye. Sensorer mapema na sensorer mapema hufanya kazi kumlinda Robo-Fundi kutoka uharibifu, na sensorer mapema hutawala wakati picha ya uchunguzi itapigwa. Wote kwa pamoja, Robo-Fundi ameundwa kuzunguka katika moduli za Mar, akiachilia muda wa wanaanga wakati akifanya kazi ya msingi ya ukaguzi, akihitaji tu mchango wa kibinadamu wakati unapata kitu kibaya.

Tena kama onyo, hii ni kazi inayoendelea. Nambari, kama ilivyo, inafanya kazi lakini ina hiccups, haswa kwa kuwa kuna programu nyingi zinazoingiliana zinazohusika. Pia, ili mradi huu ufanye kazi katika ujumbe halisi wa Mars, roboti itahitaji kujengwa kwa kusudi maalum, kwa hivyo tena nadhani hii ni "uthibitisho wa dhana" ya kujenga.

Kuna mambo kadhaa ambayo utahitaji kupata hii na kuendesha. Utahitaji programu ya bei ghali, vifurushi vya msaada kwa programu hiyo, na msingi mdogo wa usimbuaji. Kama mimi ni mwanafunzi, na nambari zingine za sakafu ya chini zimetolewa (kwa raspberry pi), sitazungumza haswa juu ya usanidi. Unaweza kupata viungo vyote vya nambari hiyo ya msingi hapa chini. Wacha tufike kwenye orodha ya vifaa.

Vifaa

  • Raspberry Pi (tulitumia toleo la 3)
  • iRobot ®
  • aina fulani ya kifaa cha kushikilia kuweka Raspberry Pi iliyounganishwa na Robo-Fundi
  • Kamera ya Raspberry Pi (haijalishi ni aina gani, kwa muda mrefu ina mwelekeo mzuri wa kiatomati na azimio la picha)
  • aina fulani ya kusimama au holster ili kuweka kamera ikitazama mbele kwa Robo-Fundi
  • nyenzo ya kutumia kama ukanda, nyeupe (au rangi nyepesi sana), ambayo imeshikiliwa sakafuni salama. Inahitaji kuwa pana kidogo kuliko nafasi kati ya sensorer mbili za mbele za mwamba.
  • Ishara 4 zilizo na maandishi makubwa sana (yaliyochapishwa juu yake maneno IMAGE, RIGHT, BACK, na LEFT)
  • Karatasi za karatasi zenye rangi (angalau tatu na ikiwezekana nyekundu, kijani kibichi na hudhurungi)

Programu

  • Matlab (2018a na 2017b zote zilitumika na zinaonekana kuwa na tofauti kidogo)
  • Kifurushi cha Raspberry Pi cha Matlab
  • Nambari ya Raspberry Pi ya unganisho na Matlab (unganisha na nambari ya chanzo iliyotolewa hapa chini)
  • Kitufe cha Usindikaji wa Picha cha Matlab (huwezi kufanya mradi huu bila kisanduku cha zana)
  • Hiari: Matlab Mobile imewekwa kwenye simu yako, ambayo nitaelezea baadaye

Hatua ya 1: Kuweka Vifaa

ef.engr.utk.edu/ef230-2018-08/projects/roo…

Hiki ni kiunga cha nambari ya msingi ili kuhakikisha kuwa iRobot ® inaweza kuwasiliana na Matlab, pamoja na mafunzo ya kimsingi. Kama nilivyosema hapo awali, sitafunika sehemu hii maalum kwa kuwa mafunzo yamewekwa vizuri tayari. Nitataja kwamba ukishafuata hatua kwenye kiunga, unaweza kutumia amri ya "hati" ya Matlab kutazama habari zilizojumuishwa. Hasa:

doc roomba

Na hatua moja muhimu zaidi.

Unapopakua faili kutoka kwa kiunga hapo juu, ZIWEKE KWENYE Folda NILIELEZA HAPO JUU, kwani Matlab inahitaji faili zinazozalishwa na watumiaji ziwe kwenye folda inayofanya kazi sasa.

Na hiyo nje ya njia, wacha tuende kwenye nambari.

Hatua ya 2: Kupata Sensorer zote hizo

Kupata sensorer zote hizo
Kupata sensorer zote hizo
Kupata Sensorer zote hizo
Kupata Sensorer zote hizo

Chukua sekunde na upe iRobot® ukaguzi. Ni vizuri kujua ni wapi hizi zina wazo la pembejeo ambazo Robo-Fundi anapokea, na utaweza kujua ni kwanini kitu hicho kinazunguka kwenye miduara badala ya kufuata njia utakayoweka (hii inaweza au huenda haikutokea). Kwa kweli utaona sensorer kubwa ya mapema mbele. Sensorer za mwamba ni ngumu zaidi kuona, utahitaji kuipindua na utafute windows nne za wazi za plastiki karibu na ukingo wa mbele. Sensorer za nuru nyepesi zimefichwa zaidi, lakini kwa sasa itatosha kusema moja kwa moja kwenye bendi nyeusi inayong'aa inayozunguka mbele ya iRobot®, iliyo mbele ya bar ya sensorer ya mapema.

Kuna sensorer za kushuka kwa gurudumu, lakini hizi hazitumiki katika mradi huu, kwa hivyo tutaendelea kupima sensorer.

Hatua ya 3: Upimaji wa Kuweka Vigezo

Kujaribu Kuweka Vigezo
Kujaribu Kuweka Vigezo

Kabla ya kumtuma Robo-Fundi kwenda kufanya kazi hiyo, tunahitaji kujua quirks zake maalum na safu za sensorer. Kwa kuwa kila iRobot ® ni tofauti kidogo na inabadilika juu ya maisha ya roboti, tunahitaji kujua jinsi sensorer zinasoma juu ya maeneo ambayo itafanya kazi. Njia rahisi zaidi ya kufanya hivyo ni kukuwekea njia nyembamba ya rangi (Nilitumia vipande vya karatasi nyeupe ya kuchapisha lakini kitu chochote chenye rangi nyembamba kitafanya) juu ya uso ambao Robo-Fundi atafanya kazi.

Anzisha Matlab na ufungue hati mpya. Okoa hati KWENYE KIWANGO HICHO NILIELEZEA MAPEMA na uipe jina lo lote unalotaka (jaribu kuiweka fupi hata hivyo, kwani jina la faili hii litakuwa jina la kazi). Washa roboti na utumie usanidi wa kutofautisha wa roomba kutoka kwa mafunzo, ukichapa amri kwenye dirisha la amri.

Hakikisha Raspberry Pi imechomekwa kwenye iRobot® na kompyuta yako imeunganishwa na unganisho sawa la mtandao. Utatumia wakati mdogo kuchora nywele zako kujaribu kujua ni kwanini Matlab haitaungana

r = roomba (nambari uliyoweka)

"R" inayobadilika katika hali hii sio lazima, unaweza kuiita chochote unachotaka, lakini inafanya maisha iwe rahisi kutumia herufi moja inayobadilika.

Njia ikiisha kusanidiwa, na roomba imeunganishwa kwa mafanikio, weka Robo-Fundi wa baadaye ambapo moja au mbili ya sensorer ya mwamba iko juu ya njia. Kwa wazi hiyo inamaanisha wengine wawili au watatu wako juu ya uso uliochagua.

Sasa anza sensorer za jaribio na amri:

r.jaribioSensors

Kumbuka kwamba "r." Ni tofauti uliyoelezea hapo awali, kwa hivyo ikiwa sio 'r' badilisha 'r.' kwa chochote ulichoamua. Hii italeta skrini ya sensorer ya mtihani na tani ya maelezo.

Kwa mradi huu zingatia lightBumpers, bumpers, na sehemu za mwamba. Sogeza fundi wa Robo karibu uhakikishe kutazama jinsi sensorer hubadilika juu ya nyuso tofauti, au jinsi kitu kinahitajika kuwa karibu ili maadili ya ligthBumper ibadilike, nk Weka nambari hizi akilini (au uziandike) kwa sababu utasikia zinahitaji ziweke vigezo kwa sekunde.

Hatua ya 4: Kuanzisha Msimbo

Kwanza kabisa utakuwa unaunda kazi. Niliiita "njia" lakini tena, jina sio lazima, lakini nitakuwa nikilitaja kama "njia" kuanzia sasa.

Sehemu ya juu ya nambari ni kusanidi chaguzi za kuingiza watumiaji. Inaunda orodha ambazo zitatumika katika orodha ya orodha na kisha huleta sanduku la mazungumzo ya orodha. Hii inamruhusu mtumiaji kuchagua ni rangi gani ya njia anayotaka kufuata, ambayo inacheza baadaye.

orodha = {'Nyekundu', 'Bluu', 'Kijani'}

problist = {'Casualty, Save Image', 'Component Out of Place, Save Image', 'Inatarajiwa, Endelea'} pathcolor = listdlg ('PromptString', 'Select a Path Color',… 'SelectionMode', 'single', 'ListString', orodha) prob = 0; dereva = ;

Vigeuzi vya "prob" na "driv" vinahitaji kutangazwa hapa kwani vitatumika ndani ya kazi kuu wakati wa kitanzi, lakini tena, ikiwa unataka kubadilisha jina la aina yoyote au ubadilishe chaguo za orodha, ni sawa ikiwa wewe ni thabiti katika nambari yote.

Hatua ya 5: Juu ya Kitanzi cha Wakati: Sensorer za Bump za Kimwili

Sehemu ya juu ya kitanzi ina mantiki ya sensorer ya mapema. Kimsingi, wakati Robo-Fundi akiingia kwenye kitu anasimama (au kwa sensorer ya mbele mapema inaunga mkono mita 0.1), kisha inajiweka yenyewe kuchukua picha. Lets kufunika kasi na sehemu ya kudhibiti nafasi kwanza.

Ikiwa ulijaribu sensorer zote kwenye Robo-Fundi katika hatua zilizopita, utajua kuwa sensorer za mapema zina thamani ya mantiki (0 au 1) na sifuri inayowakilisha nafasi ya kawaida, isiyoshinikizwa ya sensa. Weka hiyo akilini kwa nambari.

wakati kweli% kuu wakati kitanzi% hupokea habari bumper S = r.getBumpers ikiwa S. kushoto ~ = 0 r.stop elseif S. right ~ = 0 r.stop elseif S.front ~ = 0 r. stop end

Hii ndio sehemu ya msingi "ikiwa inapiga kitu, simama". Ikiwa sensorer hugundua mgongano, basi huenda kwenye sehemu inayofuata ya nambari, ambayo inasoma nafasi ya Robo-Fundi kupata picha.

ikiwa S. kushoto ~ = 0% ikiwa kitanzi kinachukua maelezo mengi na inalinganisha kamera kwa picha r.turnAngle (5) pause (0.5) img = r.getImage% inachukua picha na kuonyesha picha (img)% dialog box prob = listdlg (' PromptString ',' Tumepata kikwazo kisichotarajiwa, Tafadhali Tambua '…,' SelectionMode ',' single ',' ListString ', problist) kingine ikiwa S.right ~ = 0 r.turnAngle (-5) pause (0.5) img = r. picha ya kupataImage (img) prob = listdlg ('PromptString', 'Imepata Kikwazo kisichotarajiwa, Tafadhali Tambua'…, 'SelectionMode', 'single', 'ListString', problist) Pause (0.5) img = r.getImage image (img) prob = orodha

Kimsingi, mara tu picha ikichukuliwa sanduku lingine la mazungumzo litaonekana na chaguzi tatu. Chaguo mbili za kwanza huhifadhi picha kwenye folda iliyoainishwa, ambayo nitashughulikia baadaye, wakati chaguo la tatu linafunga tu kisanduku cha mazungumzo na inaendelea kupitia kitanzi. Ikiwa huwezi kukumbuka chaguzi, angalia hatua ya awali.

Sasa niliingiza sehemu ya nambari kati ya sehemu ya sensorer mapema na sehemu ya kuokoa picha. Hii inachukua maadili ya lightBumper na kuweka kasi ya gari hadi mita 0.025 / sekunde (polepole sana), ambayo sio lazima lakini inamkata Robo-Fundi kugonga vitu na mwishowe kuvunja sensorer za mapema.

L = r.getLightBumpers ikiwa L. kushoto> 100 || L. kushotoFront> 100 || Mbele> kulia> 100 || L. kulia> 100 driv = 0.025 r.setDriveVelocity (0.025) driv nyingine = mwisho wa 0.1

Hii itakuwa sehemu ambayo maadili uliyoyaona (na kwa matumaini uliandika) mapema yataanza

"L. (upande na mwelekeo wa sensa)> 100" ilitokana na maadili niliyoona, kwa hivyo ikiwa uchunguzi wako ni tofauti, badilisha nambari hizi. Wazo ni kwamba ikiwa Robo-Fundi anahisi kitu cha sentimita chache mbele yake, kitapungua, zaidi ya hapo sio lazima.

Sehemu inayofuata ni mahali ambapo picha zinahifadhiwa baadaye.

% ikiwa chaguo la kwanza au la pili lilichaguliwa katika mazungumzo ya prob, huhifadhi picha ikiwa prob == 1% ikiwa kitanzi kinajenga maelezo ya faili kwa picha, inaandika na timestamp t = saa; jina la msingi = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folda = 'E: / UTK / Madarasa / kuanguka 18 / ef230 / irobot / picha'; fullFileName = faili kamili (folda, jina la msingi); imwrite (img, fullFileName) funga Kielelezo 1 pause (2) kingine ikiwa prob == 2 t = saa; jina la msingi = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folda = 'E: / UTK / Madarasa / kuanguka 18 / ef230 / irobot / picha'; fullFileName = faili kamili (folda, jina la msingi); imwrite (img, fullFileName) funga Kielelezo 1 pause (2) mwisho

Majina yote ya faili na maeneo ambayo picha zimehifadhiwa ni za hiari. Nilichagua folda ambayo imewekwa ndani ya folda ya roomba niliyoiunda katika hatua ya utangulizi, lakini inaweza kuwa mahali popote utakapochagua. Pia, picha zinahifadhiwa na muhuri wa wakati, lakini hiyo sio lazima sana (ingawa itakuwa muhimu kwa dhana ya ujumbe wa Mars).

Pamoja na sensorer za mapema zilizofunikwa, tunaweza kuhamia kwenye sensorer za mwamba na njia ifuatayo.

Hatua ya 6: Kufuata Njia

Nambari ya sensorer ya mwamba imewekwa ili kulinganisha maadili ya maadili mawili ya sensorer ya mbele na mbili. Utahitaji kubadilisha maadili haya (labda) kulingana na maadili yako yaliyozingatiwa. Labda utahitaji pia kuhariri maadili haya baada ya majaribio machache kukimbia na kuyabadilisha kulingana na taa iliyoko, wakati wa siku (kulingana na eneo la jaribio lililoangaziwa vizuri) au wakati windows windows ni chafu.

Kabla ya kufika kwenye nambari ya sensorer ya mwamba hata hivyo, kuna sehemu fupi ya nambari niliyoingiza ili kufuta data isiyo ya lazima kutoka Matlab. Sehemu hii haihitajiki, lakini niliitumia kupunguza uhifadhi unaohitajika kuendesha programu.

clear img clear t jina la msingi la wazi waziFileName wazi folda

Sehemu inayofuata ya nambari ni nyama ya mradi huo. Inaruhusu Robo-Fundi kufuata njia nyembamba ya rangi ambayo imewekwa sakafuni. Kwa kifupi, inajaribu kujiendesha kwa hivyo sensorer mbili za mbele za mwamba ziko juu ya kizingiti, kulingana na maadili yako yaliyozingatiwa, na inaruhusu programu kuanza hatua za usindikaji picha baadaye.

C = r.getCliffSensors% ikiwa kitanzi kinafuata bendi ya rangi (nyeupe) ikiwa C. leftFront> 2000 && C. RightFront> mwongozo wa njia ya moja kwa moja 2000 r. kushoto r.urnAngle (-2.5) mwingineif C. kushotoFront> 2000 && C. RightFront <2000% inageuka kushoto ikiwa roboti inakwenda mbali sana kulia r. TurnAngle (2.5) mwingineif C. kushotoFront <2000 && C. rightFront 100 || | L. kushotoFront> 100 || L. kulia Mbele> 100 || L. kulia> 100 img = r.getImage end% hundi ili kuona ikiwa kuna bend katika njia ikiwa C. kushoto> 2800 && C. kulia <2800 r. TurnAngle (2.5) mwingineif C. kushoto 2800 r.urnAngle (- 2.5) mwisho% mmiliki wa mahali kwa utambuzi wa picha ya njia ('GETTING IMAGE') mwisho wa mwisho

Kumbuka kwamba majina anuwai niliyochagua ni ya hiari, lakini tena nadhani inafanya maisha iwe rahisi kutumia vigeu vya herufi moja inapowezekana

Kuelezea sehemu ya kati ya nambari, wakati sensorer mbili za mbele zinakimbia pembeni ya njia (linapokuja njia ya makutano au inapofika mwisho wa njia) inaonekana kuona ikiwa kuna kitu mbele yake. Utahitaji kuweka kitu chini mwishoni mwa njia au kwenye makutano yoyote ili hii ifanye kazi.

Mara tu picha imechukuliwa hutumia utambuzi wa picha ili kubaini nini cha kufanya. Kuna mmiliki wa mahali katika sehemu hii ya nambari pia:

mmiliki wa mahali kwa utambuzi wa picha ya njia ('KUPATA TASWIRA')

Nilitumia hii kwa sasa kwa sababu nilitaka kuzungumza haswa juu ya maandishi na usindikaji wa rangi ambayo hufanyika, ambayo iko katika hatua inayofuata.

Hatua ya 7: Usindikaji wa Picha

Kuna sehemu mbili kwa usindikaji wa picha. Kwanza ni utambuzi wa rangi, ambayo huhesabu ukubwa wa rangi kwenye picha kuamua ikiwa itaendelea kutambulika kwa maandishi au la. Mahesabu ya rangi yanategemea chaguo gani lilifanywa kwenye kisanduku cha mazungumzo cha kwanza mwanzoni (nilitumia nyekundu, bluu, kijani lakini unaweza kuchagua rangi yoyote unayotaka, ilimradi maadili ya wastani ya ukali wa rangi yanaweza kutambuliwa na Kamera ya Raspberry Pi).

img = r.getImage img = imcrop (img, [0 30 512 354]) imgb = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) nyekundu = maana (maana (imgb (:,:, 1))); g = maana (maana (imgb (:,:, 2))); b = maana (maana (imgb (:,:, 3)));

Hii ndio kuangalia kwa nguvu. Hii itatumika katika sehemu inayofuata kuamua inachotaka kufanya.

ikiwa nyekundu> g && nyekundu> b ikiwa pathcolor == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img) ikiwa R. Words {1} == IMAGE || R. Words {2} == TASWIRA || R. Words {3} == IMAGE t = saa; jina la msingi = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folda = 'E: / UTK / Madarasa / kuanguka 18 / ef230 / irobot / picha'; fullFileName = faili kamili (folda, jina la msingi); imwrite (img, fullFileName) pause (2) mwingine ikiwa R. Words {1} == HAKI || R. Words {2} == HAKI || R. Words {3} == RIGHT r.turnAngle (-75) elseif R. Words {1} == LEFT || R. Words {2} == KUSHOTO || R. Words {3} == KUSHOTO r.turnAngle (75) mwingineif R. Words {1} == NYUMA || R. Words {2} == NYUMA || R. Words {3} == NYUMA r.turnAngle (110) mwisho mwingine r.turnAngle (110) mwisho mwisho

Sehemu hii huamua ikiwa rangi iliyochaguliwa kwenye kisanduku cha mazungumzo ya kwanza inafanana na rangi ambayo kamera inaona. Ikiwa inaendesha utambuzi wa maandishi. Inaonekana kuona ni neno lipi (IMAGE, BACK, RIGHT au LEFT) linaloonekana halafu linageuka (kulia na kushoto), linazunguka (kwa nyuma) au linapiga picha na kuliokoa kwa njia ile ile kama hapo awali.

Nimetoa sehemu moja tu ya nambari kwa rangi tofauti

Kuruhusu nambari kutambua bluu na kijani, nakili tu nambari hiyo na ubadilishe kuangalia kwa mantiki juu ya sehemu na uweke "pathcolor == (namba)" ili kuendana na chaguzi za rangi kutoka kwenye kisanduku cha mazungumzo ya juu (kwa nambari kama inavyoonyeshwa, bluu itakuwa 2 na kijani itakuwa 3).

Hatua ya 8: Bidhaa iliyokamilishwa

Bidhaa iliyokamilishwa
Bidhaa iliyokamilishwa

Sasa Robo-Fundi anapaswa kuvuta karibu moduli za misheni ya Mars na aripoti kwa wanaanga wakati kitu chochote kiko mahali pake.

Kumbuka, sensorer ya mwamba na maadili ya lightBumper yanahitaji kubadilishwa kuwa kile maadili yako yaliyozingatiwa ni. Pia, kutokana na uzoefu nimeona ni bora kujaribu mradi huu kwenye sakafu yenye rangi nyeusi na ni bora zaidi ikiwa sakafu hiyo haionyeshi. Hii inapata tofauti kuongezeka kati ya njia na sakafu ambayo inafanya uwezekano mkubwa kwamba Robo-Fundi ataifuata kwa usahihi.

Natumahi kuwa umefurahiya kuanzisha msaidizi mdogo wa misheni ya Mars, na uwe na raha ya kujenga.

Ilipendekeza: