Satura rādītājs:

Robo-tehniķis: 8 soļi
Robo-tehniķis: 8 soļi

Video: Robo-tehniķis: 8 soļi

Video: Robo-tehniķis: 8 soļi
Video: 25 крутых военных машин на работе в вооруженных силах США 2024, Jūlijs
Anonim
Robo-tehniķis
Robo-tehniķis

Uz brīdi iedomājieties, ka esat viens no astronautiem, kas nolaižas uz Marsa. Jums ir jādara miljons lietu, jāņem paraugi, jāveic eksperimenti, jāapkopo dati, bet vienu vai divas reizes dienā jums jāskrien pa apdzīvotajiem un/vai izpētes moduļiem, kuros dzīvojat un strādājat, lai tos pārbaudītu. Tas ir nepieciešams, kādam ir jāpārliecinās, ka lieta ir labā stāvoklī, ka visi tūkstošiem gabalu un detaļu darbojas un ir savās vietās. Bet ko darīt, ja būtu automatizēts palīgs, kas atbrīvotu jūs no dažiem šiem pienākumiem. Ko darīt, ja moduļu iekšpusē varētu pārvietoties mazs robots, lai pārliecinātos, ka viss ir savās vietās, darbojas un ir drošībā.

Robo-tehniķis palīgā.

Būtībā šis kods kontrolē Robo-tehniķi, kad tas iet pa gaišu ceļu uz zemes. Tā ies šo ceļu, līdz atradīs ceļa krustojumu vai pagriezienu, kas liks uzņemt fotoattēlu attēlu apstrādei, lai ļautu robotehniķim pieņemt lēmumu, kur doties tālāk. Gaismas trieciena un trieciena sensori aizsargā Robo-tehniķi no bojājumiem, un trieciena sensori kontrolē diagnostikas fotoattēla uzņemšanu. Kopumā Robo-tehniķis ir paredzēts, lai tuvinātu Mar moduļus, atbrīvojot astronautu laiku, veicot pārbaudes pamatuzdevumu, tikai aicinot iesaistīties cilvēkos, ja tas atrod kaut ko nepareizu.

Atkal kā brīdinājums, tas ir darbs. Kods, kāds tas ir, darbojas, taču tam ir žagas, jo īpaši tāpēc, ka ir iesaistītas vairākas programmas, kas pārklājas. Turklāt, lai šis projekts darbotos reālā Marsa misijā, šim konkrētajam mērķim būtu jāveido robots, tāpēc es atkal domāju, ka šī ir "koncepcijas pierādījuma" būve.

Ir dažas lietas, kas jums būs nepieciešamas, lai to sāktu darboties. Jums būs nepieciešama dārga programma, šīs programmas atbalsta pakotnes un neliels kodēšanas priekšstats. Tā kā esmu students un daži pirmā stāva kodi ir sniegti (aveņu pi), es īpaši nerunāšu par iestatīšanu. Visas šī pamata koda saites varat atrast zemāk. Pāriesim pie materiālu saraksta.

Aparatūra

  • Raspberry Pi (mēs izmantojām 3. versiju)
  • iRobot ®
  • kaut kāda turēšanas ierīce, lai Raspberry Pi būtu piestiprināta pie Robo-tehniķa
  • Raspberry Pi kamera (nav svarīgi, kāda veida, ja vien tai ir labs autofokuss un attēla izšķirtspēja)
  • kaut kāds statīvs vai maciņš, lai kamera būtu vērsta uz priekšu Robo-tehniķim
  • materiāls, ko izmantot kā sloksni, balts (vai ļoti gaišs), kas ir stingri turēts pie grīdas. Tam jābūt nedaudz platākam par atstarpi starp diviem priekšējiem klints sensoriem.
  • 4 zīmes ar ļoti lielu tekstu (ar vārdiem IMAGE, RIGHT, BACK un LEFT)
  • Krāsaina papīra lapas (vismaz trīs un vēlams sarkanas, zaļas un zilas)

Programmatūra

  • Matlab (tika izmantoti gan 2018a, gan 2017b, un šķiet, ka tiem nav lielas atšķirības)
  • Raspberry Pi atbalsta pakotne Matlab
  • Raspberry Pi kods savienojumam ar Matlab (saite uz avota kodu, kas sniegts zemāk)
  • Attēlu apstrādes rīkkopa Matlab (jūs gandrīz nevarat paveikt šo projektu bez instrumentu kopas)
  • IZVĒLES: Matlab Mobile ir instalēts jūsu tālrunī, ko es paskaidrošu vēlāk

1. darbība. Aparatūras iestatīšana

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

Šī ir pamata koda saite, lai nodrošinātu, ka iRobot® var sazināties ar Matlab, kā arī pamata apmācība. Kā jau teicu iepriekš, es neaptveršu šo konkrēto daļu, jo apmācība jau ir ļoti labi izklāstīta. Es pieminēšu, ka pēc tam, kad esat veicis saitē norādītās darbības, varat izmantot Matlab komandu "doc", lai apskatītu iekļauto informāciju. Konkrēti:

doktors Roomba

Un vēl viens ļoti svarīgs punkts.

Kad lejupielādējat failus no iepriekš minētās saites, IEVIETOJIET tos iepriekš aprakstītajā mapē, jo Matlab pieprasa, lai lietotāja ģenerētie faili atrastos pašreizējā darba mapē.

Kad tas nenotiks, pāriesim pie koda.

2. darbība: visu šo sensoru atrašana

Visu šo sensoru atrašana
Visu šo sensoru atrašana
Visu šo sensoru atrašana
Visu šo sensoru atrašana

Pagaidiet sekundi un pārbaudiet iRobot®. Ir labi zināt, kur tie atrodas, tāpēc jums ir priekšstats par Robo-tehniķa ievadīto informāciju, un jūs varēsit saprast, kāpēc lieta griežas apļos, nevis iet iestatīto ceļu (tas var vai varbūt tas nav noticis). Jūs acīmredzot redzēsit lielo fizisko trieciena sensoru priekšpusē. Klints sensorus ir nedaudz grūtāk saskatīt, jums tas jāapgriež un jāmeklē četri, caurspīdīgi plastmasas logi pie priekšējās malas. Gaismas trieciena sensori ir vēl vairāk paslēpti, taču pagaidām pietiks, ja tiešraidē spīdīgajā melnajā joslā runās ap iRobot® priekšpusi, kas atrodas fiziskā trieciena sensora joslas priekšpusē.

Ir riteņu kritiena sensori, taču tie šajā projektā netiek izmantoti, tāpēc mēs pāriesim pie sensoru pārbaudes.

3. darbība. Pārbaude, lai iestatītu parametrus

Pārbaude, lai iestatītu parametrus
Pārbaude, lai iestatītu parametrus

Pirms mēs varam nosūtīt Robo-tehniķi, lai tas paveiktu savu darbu, mums ir jānoskaidro tā īpašās dīvainības un sensoru diapazoni. Tā kā katrs iRobot® ir nedaudz atšķirīgs un mainās robota dzīves laikā, mums ir jāizdomā, kā sensori nolasa apgabalus, kuros tas darbosies. Vienkāršākais veids, kā to izdarīt, ir iestatīt gaišas krāsas ceļu (Es izmantoju baltas printera papīra sloksnes, bet viss, ko darīs gaiša krāsa, uz virsmas, ar kuru Robo-tehniķis darbosies.

Palaidiet Matlab un atveriet jaunu skriptu. Saglabājiet skriptu tajā pašā mapē, kuru es aprakstīju agrāk, un nosauciet to, kā vēlaties (tomēr mēģiniet to saīsināt, jo šī faila nosaukums būs funkcijas nosaukums). Ieslēdziet robotu un izmantojiet roomba mainīgo iestatījumus no apmācības, komandu logā ierakstot komandas.

Pārliecinieties, vai Raspberry Pi ir pievienots iRobot® un vai jūsu dators ir savienots ar to pašu interneta savienojumu. Jūs pavadīsit mazāk laika, izvelkot matus, mēģinot saprast, kāpēc Matlab nesavienosies

r = roomba (jūsu iestatītais numurs)

Mainīgais "r" šajā gadījumā nav nepieciešams, jūs varat to saukt, kā vien vēlaties, bet tas atvieglo dzīvi, izmantojot viena burta mainīgo.

Kad ceļš ir iestatīts un roomba ir veiksmīgi savienots, novietojiet topošo robotehniķi vietā, kur viens vai divi klints sensori atrodas virs ceļa. Acīmredzot tas nozīmē, ka pārējie divi vai trīs atrodas virs jūsu izvēlētās virsmas.

Tagad palaidiet testa sensorus ar komandu:

r.testSensors

Paturiet prātā, ka “r.” Ir mainīgais, kuru definējāt iepriekš, tādēļ, ja tas nav “r”, mainiet “r”. uz visu, ko esat nolēmis. Tas parādīs testa sensora ekrānu ar daudz informācijas.

Šajā projektā koncentrējieties uz gaismas buferiem, buferiem un klints sekcijām. Pārvietojiet Robo-tehniķi, pārliecinoties, kā mainās sensori uz dažādām virsmām vai cik tuvu jābūt objektam, lai mainītos gaismas bufera vērtības utt. Paturiet prātā šos skaitļus (vai pierakstiet tos) tie ir nepieciešami, lai sekundē iestatītu parametrus.

4. darbība: koda palaišana

Pirmkārt, jūs izveidosit funkciju. Es to nosaucu par “ceļu”, bet atkal nosaukums nav nepieciešams, bet turpmāk es to dēvēšu par “ceļu”.

Koda augšējā daļā tiek iestatītas dažas lietotāja ievades opcijas. Tas izveido dažus sarakstus, kas tiks izmantoti sarakstā listdlg, un pēc tam parādīs saraksta dialoglodziņu. Tas ļauj lietotājam izvēlēties, kurai ceļa krāsai viņš vēlas sekot, kas stāsies spēkā vēlāk.

list = {'Red', 'Blue', 'Green'}

problist = {'Negadījums, Saglabāt attēlu', 'Komponents nevietā, Saglabāt attēlu', 'Paredzēts, Turpināt'} pathcolor = listdlg ('PromptString', 'Atlasīt ceļa krāsu', … 'SelectionMode', 'single', 'ListString', list) prob = 0; piedziņa = ;

Šeit ir jādeklarē mainīgie "prob" un "driv", jo tie tiks izmantoti funkcijas galvenajā cilpā cilpa, bet atkal, ja vēlaties pārdēvēt kādu no šiem mainīgajiem vai mainīt saraksta atlasi, tas ir labi, ja vien jūs esat konsekvents pārējā kodā.

5. darbība. Kaut cikla augšdaļa: fiziski trieciena sensori

Kaut cikla augšdaļā ir fiziskā trieciena sensora loģika. Būtībā, kad Robo-tehniķis uzbrauc kaut kam, kas apstājas (vai priekšējā trieciena sensoram tas dublē 0,1 metru), tad pozicionējas, lai uzņemtu attēlu. Vispirms pārklājiet ātruma un pozīcijas kontroles daļu.

Ja iepriekšējos soļos pārbaudījāt visus Robo-tehniķa sensorus, jūs zināt, ka trieciena sensoriem ir loģiskā vērtība (0 vai 1) ar nulli, kas apzīmē sensora normālo, nespiesto stāvokli. Paturiet to prātā attiecībā uz kodu.

kamēr true %main, kamēr cilpa %saņem bufera informāciju

Šī ir pamata daļa "ja tas kaut ko atsit, apstājieties". Ja sensori konstatē sadursmi, tas pāriet uz nākamo koda daļu, kas noregulē robotehniķa stāvokli, lai iegūtu fotoattēlu.

ja S. kreisais ~ = 0 %, ja cilpa uzņem informāciju par buferi un izlīdzina kameru fotoattēlam r.turnAngle (5) pauze (0.5) img = r.getImage %uzņem fotoattēlu un parāda attēlu (img) %dialoglodziņu prob = listdlg (' PromptString ',' Atrasts neparedzēts šķērslis, lūdzu, identificējiet '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) pause (0.5) img = r. getImage image (img) prob = listdlg ('PromptString', 'Atrasts neparedzēts šķērslis, lūdzu, identificējiet' …, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~ = 0 r.moveDistance (- 0.1) pauze (0.5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Atrasts neparedzēts šķērslis, lūdzu, identificējiet' …, 'SelectionMode', 'single', 'ListString', problist) end

Būtībā, kad attēls ir uzņemts, parādīsies cits dialoglodziņš ar trim iespējām. Pirmās divas iespējas saglabā fotoattēlu noteiktā mapē, kuru es vēlāk apskatīšu, bet trešā opcija vienkārši aizver dialoglodziņu un turpina caur cilpu. Ja nevarat atcerēties opcijas, apskatiet iepriekšējo darbību.

Tagad es ievietoju koda sadaļu starp izciļņa sensora daļu un fotoattēlu saglabāšanas daļu. Tas ņem vērā LightBumper vērtības un nosaka braukšanas ātrumu uz 0,025 metriem sekundē (ļoti lēni), kas patiesībā nav nepieciešams, taču tas samazina Robo-tehniķa iegrūšanu lietās un galu galā nolieto fiziskos trieciena sensorus.

L = r.getLightBampers, ja L.pa kreisi> 100 || L.leftFront> 100 || L.rightFront> 100 || L. labi> 100 piedziņas = 0,025 apgriezieni. SetDriveVelocity (0,025) cits piedziņa = 0,1 beigas

Šī būtu tā daļa, kurā stāsies spēkā vērtības, kuras jūs ievērojāt (un, cerams, pierakstījāt)

"L. (sensora puse un virziens)> 100" balstījās uz manis novērotajām vērtībām, tādēļ, ja jūsu novērojumi atšķiras, mainiet šos skaitļus. Ideja ir tāda, ka, ja robotehniķis sajūt kaut ko dažus centimetrus priekšā, tas palēnināsies, turklāt tas nav vajadzīgs.

Nākamā daļa ir vieta, kur fotoattēli tiek saglabāti vēlākai lietošanai.

%, ja prob dialogā tika izvēlēta pirmā vai otrā opcija, saglabā attēlu, ja prob == 1 %, ja cilpa veido faila informāciju fotoattēlam, raksta ar laika zīmogu t = pulkstenis; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = pilns fails (mape, bāzes nosaukums); imwrite (img, fullFileName) aizvērt 1. attēls pauze (2) elseif prob == 2 t = pulkstenis; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (mape, basename); imwrite (img, fullFileName) aizvērt 1. attēls pauze (2) beigas

Visi failu nosaukumi un atrašanās vietas, kur fotoattēli tiek saglabāti, nav obligāti. Es izvēlējos mapi, kas ir ievietota roomba mapē, kuru izveidoju ievada solī, taču tā var būt jebkurā vietā. Turklāt fotoattēli tiek saglabāti ar laika zīmogu, taču tas nav īpaši nepieciešams (lai gan tas būtu hipotētiski noderīgi Marsa misijai).

Ja fiziskie trieciena sensori ir pārklāti, mēs varam pāriet uz klints sensoriem un sekojošo ceļu.

6. solis: sekojot ceļam

Klints sensoru kods ir iestatīts, lai salīdzinātu abu priekšējo un divu sānu sensoru vērtību vērtības. Jums būs jāmaina šīs vērtības (iespējams), pamatojoties uz jūsu novērotajām vērtībām. Jums, iespējams, vajadzēs arī rediģēt šīs vērtības pēc dažiem testa braucieniem un mainīt tās, pamatojoties uz apkārtējo apgaismojumu, diennakts laiku (atkarībā no tā, cik labi apgaismota ir testa zona) vai kad sensoru logi ir netīri.

Pirms mēs nonākam pie klints sensora koda, ir ievietots īss koda segments, ko es ievietoju, lai izskalotu dažus nevajadzīgos datus no Matlab. Šī daļa nav nepieciešama, bet es to izmantoju, lai samazinātu programmas palaišanai nepieciešamo krātuvi.

clear img clear t clear basename clear fullFileName notīrīt mapi

Nākamais koda segments ir projekta gaļa. Tas ļauj Robo-tehniķim iet pa gaišo ceļu, kas novietots uz grīdas. Īsumā tas mēģina vadīt sevi tā, lai divi priekšējie klints sensori būtu virs sliekšņa, pamatojoties uz jūsu novērotajām vērtībām, un ļauj programmai sākt attēlu apstrādes darbības nedaudz vēlāk.

C = r.getCliffSensors %, ja cilpa seko krāsu joslai (balta), ja C.leftFront> 2000 && C.rightFront> 2000 %taisna ceļa vadība r.setDriveVelocity (piedziņa) citsif. pa kreisi r.turnAngle (-2,5) elseif C.leftFront> 2000 && C.rightFront <2000%pagriežas pa kreisi, ja robots iet pārāk tālu pa labi r.turnAngle (2.5) citsif C.leftFront <2000 && C.rightFront 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 img = r.getImage beigu %pārbauda, vai ceļā ir līkums, ja C. pa kreisi> 2800 && C. labi <2800 r.turnAngle (2.5) elseif C.left 2800 r.turnAngle (- 2.5) beigu %vietas turētājs ceļa attēla atpazīšanas displejam ('GETTING IMAGE') beigu gala beigas

Paturiet prātā, ka mainīgo nosaukumi, kurus es izvēlējos, nav obligāti, taču atkal es domāju, ka tas atvieglo dzīvi, ja iespējams, izmantot viena burta mainīgos

Lai izskaidrotu koda vidējo sadaļu, kad divi priekšējie sensori noskrien no ceļa malas (kad runa ir par krustojumu vai kad tas sasniedz ceļa galu), izskatās, vai priekšā ir kaut kas. Lai tas darbotos, jums ir jānovieto objekts uz zemes ceļa beigās vai jebkurā krustojumā.

Kad fotoattēls ir uzņemts, tas izmanto attēla atpazīšanu, lai izdomātu, ko darīt. Šajā koda sadaļā ir arī vietas turētājs:

%vietas turētājs ceļa attēla atpazīšanai

Šobrīd es to izmantoju, jo vēlējos īpaši runāt par notiekošo tekstu un krāsu apstrādi, kas ir nākamajā darbībā.

7. darbība: attēlu apstrāde

Attēlu apstrādei ir divas daļas. Pirmkārt, ir krāsu atpazīšana, kas aprēķina attēla krāsas intensitāti, lai izlemtu, vai turpināt teksta atpazīšanu. Krāsu aprēķini ir balstīti uz izvēli, kas tika izdarīta pašā pirmajā dialoglodziņā sākumā (es izmantoju sarkanu, zilu, zaļu, bet jūs varat izvēlēties jebkuras krāsas, kuras vēlaties, ja vien vidējās krāsas intensitātes vērtības var atpazīt pēc Kamera 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]) sarkans = vidējais (vidējais (imgb (:,:, 1))); g = vidējais (vidējais (imgb (:,:, 2))); b = vidējais (vidējais (imgb (:,:, 3)));

Šī ir intensitātes pārbaude. Tas tiks izmantots nākamajā segmentā, lai izlemtu, ko tas vēlas darīt.

ja sarkans> g && red> b ja ceļa krāsa == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img), ja R. Vārdi {1} == ATTĒLS || R. Vārdi {2} == ATTĒLS || R. Vārdi {3} == ATTĒLS t = pulkstenis; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = pilns fails (mape, bāzes nosaukums); imwrite (img, fullFileName) pause (2) elseif R. Vārdi {1} == RIGHT || R. Vārdi {2} == PAREIZI || R. Words {3} == RIGHT r.turnAngle (-75) elseif R. Words {1} == LEFT || R. Vārdi {2} == KREISIS || R. Words {3} == LEFT r.turnAngle (75) elseif R. Words {1} == BACK || R. Vārdi {2} == ATPAKAĻ || R. Words {3} == ATPAKAĻ r.turnAngle (110) beigas else r.turnAngle (110) beigu beigas

Šis segments izlemj, vai pirmajā dialoglodziņā atlasītā krāsa atbilst kameras redzamajai krāsai. Ja tas tiek darīts, tas palaiž teksta atpazīšanu. Izskatās, kurš vārds (ATTĒLS, BACK, RIGHT vai LEFT) parādās un pēc tam vai nu pagriežas (pa labi un pa kreisi), griežas apkārt (aizmugurei) vai uzņem attēlu un saglabā to tādā pašā veidā kā iepriekš.

Dažādām krāsām esmu norādījis tikai vienu koda sadaļu

Lai ļautu kodam atpazīt zilu un zaļu krāsu, vienkārši nokopējiet kodu un mainiet loģikas pārbaudi segmenta augšdaļā un iestatiet “pathcolor == (number)”, lai tas atbilstu krāsu izvēlei augšējā dialoglodziņā (kodu, kā tas tiek parādīts, zils būtu 2 un zaļš būtu 3).

8. solis: Gatavais produkts

Gatavs produkts
Gatavs produkts

Tagad robotehniķim vajadzētu tuvināt Marsa misijas moduļus un ziņot astronautiem, kad kaut kas nav vietā.

Atcerieties, ka visas klints sensora un gaismas bufera vērtības ir jāmaina uz jūsu novērotajām vērtībām. Turklāt no pieredzes esmu uzskatījis, ka ir labāk pārbaudīt šo projektu uz tumšas krāsas grīdas un vēl labāk, ja šī grīda nav atstarojoša. Tas palielina kontrastu starp ceļu un grīdu, kas palielina iespējamību, ka robotehniķis to ievēros pareizi.

Ceru, ka jums patika izveidot nelielu palīgu Marsa misijai un izklaidēties.

Ieteicams: