Satura rādītājs:
- 1. darbība. Aparatūras iestatīšana
- 2. darbība: visu šo sensoru atrašana
- 3. darbība. Pārbaude, lai iestatītu parametrus
- 4. darbība: koda palaišana
- 5. darbība. Kaut cikla augšdaļa: fiziski trieciena sensori
- 6. solis: sekojot ceļam
- 7. darbība: attēlu apstrāde
- 8. solis: Gatavais produkts
Video: Robo-tehniķis: 8 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
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
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
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
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:
Vienkāršs Robo-suns (izgatavots no klavieru taustiņiem, rotaļu lielgabala un peles): 20 soļi (ar attēliem)
Vienkāršs Robo-suns (izgatavots no klavieru taustiņiem, rotaļu lielgabala un peles): Ak, Azerbaidžāna! Uguns zeme, liela viesmīlība, draudzīgi cilvēki un skaistas sievietes (… piedod, sieviete! Protams, man ir tikai acis uz tevi, mana gözəl balaca ana ördəkburun sieva!). Bet godīgi sakot, šī ir ļoti grūta vieta veidotājam, it īpaši, ja
Hex Robo V1 (ar lielgabalu): 9 soļi (ar attēliem)
Hex Robo V1 (ar lielgabalu): Iedvesmojoties no mana iepriekšējā robota, šoreiz es izveidoju Hex Robo kara spēlei. Aprīkojiet ar lielgabalu (nākamais V2) vai varbūt kontrolējiet, izmantojot kursorsviru (nākamais V3), es domāju, ka būs jautri spēlēt ar draugu.šaušana viens otram, izmantojot mazu lielgabalu plastmasas bumbiņu un
Carro Robô Controlado, izmantojot Bluetooth: 10 soļi
Carro Robô Controlado no Bluetooth: Um dos projetos mais ambiciosos para se fazer com Arduino é a konstruktīvs de um carro robô, para mim foi que me stimulou a estudar more sobre o Arduino, ja internets ir pieejams, un tam ir dažādas formas, kas ir konstruētas, un pēc tam Linja seguidors
O Robô sīkdatne: 3 soļi
O Robô Cepums: Materiāli: 1. Arduino; 2. Motores DC; 1. Bluetooth; 1.protokols .____________________________________________________________________________ Materiāli: 1. Arduino; 2. Līdzstrāvas motori; 1. Bluetooth; 1. Protokols
Baltazar, O Robô De Sucata: 7 soļi
Baltazar, O Robô De Sucata: Olá a todos meu Nome é Carlos Vitor e eu fiz um robô de sukata e vou estar deixando aqui a minha experiencei de te konstrído ele