Sisukord:

Robotehnik: 8 sammu
Robotehnik: 8 sammu

Video: Robotehnik: 8 sammu

Video: Robotehnik: 8 sammu
Video: Главный изобретатель Сулевкента. 15-летний Алибулат мастерит роботов из подручных средств 2024, Juuli
Anonim
Robotehnik
Robotehnik

Kujutage hetkeks ette, et olete üks astronautidest, kes Marsile maandub. Teil on miljon asja teha, proovid võtta, katsed läbi viia, andmed koguda, kuid üks või kaks korda päevas peate jooksma mööda elu- ja/või uurimismooduleid, kus te elate ja töötate, et neid kontrollida. See on vajalik, keegi peab tagama, et asi on heas korras, et kõik tuhanded tükid ja osad oleksid töökorras ja paigas. Aga mis siis, kui oleks olemas automaatne abimees, kes vabastaks mõne neist ülesannetest. Mis siis, kui seal oleks väike robot, mis saaks moodulite sees ringi liikuda, veendumaks, et kõik on paigas, töötab ja on ohutu.

Robotehnik appi.

Põhimõtteliselt juhib see kood Robo-tehnikut, kui see järgib heledat teed maapinnal. Ta järgib seda teed, kuni leiab teelt ristmiku või pöörde, mis palub pildistamiseks pildistada, et robotehnik saaks teha otsuse, kuhu edasi minna. Valgus- ja põrkumisandurid kaitsevad Robo-tehnikut kahjustuste eest ning põrkumisandurid kontrollivad, millal tehakse diagnostiline foto. Kokkuvõttes on Robo-tehnik mõeldud Mar-i moodulite suumimiseks, vabastades astronaudide aja kontrollimise põhiülesande täitmise ajal, kutsudes ainult inimeste panust üles leidma midagi valesti.

Jällegi hoiatuseks, see on pooleli. Kood, nagu see on olemas, töötab, kuid sellel on luksumine, eriti kuna sellega on seotud mitu kattuvat programmi. Samuti oleks selle projekti tegelikul Marsi missioonil töötamiseks vaja ehitada robot selleks otstarbeks, nii et jällegi arvan, et see on "kontseptsiooni tõestus".

Selle käivitamiseks on vaja mõningaid asju. Teil on vaja kallist programmi, selle programmi tugipakette ja natuke kodeerimise tausta. Kuna olen üliõpilane ja osa esimese korruse koodidest on antud (vaarika pi jaoks), ei räägi ma seadistamisest konkreetselt. Kõik selle baaskoodi lingid leiate altpoolt. Läheme materjalide loendisse.

Riistvara

  • Raspberry Pi (kasutasime versiooni 3)
  • iRobot ®
  • mingi hoideseade, mis hoiab Raspberry Pi Robo-tehniku küljes
  • Raspberry Pi kaamera (pole tähtis, millist tüüpi, kuna sellel on hea autofookus ja pildi eraldusvõime)
  • mingisugune alus või ümbris, et hoida Robo-tehnikul kaamera ettepoole suunatud
  • materjal ribana kasutamiseks, valge (või väga hele), mis on kindlalt põrandale kinnitatud. See peab olema veidi laiem kui kahe eesmise kaljuanduri vaheline ruum.
  • 4 märki suure tekstiga (neile on trükitud sõnad IMAGE, RIGHT, BACK ja LEFT)
  • Värvilise paberi lehed (vähemalt kolm, eelistatavalt punane, roheline ja sinine)

Tarkvara

  • Matlab (nii 2018a kui ka 2017b kasutati ja neil pole suurt vahet)
  • Raspberry Pi tugipakett Matlabile
  • Raspberry Pi kood Matlabi ühendamiseks (link alltoodud lähtekoodile)
  • Pilditöötluse tööriistakast Matlabi jaoks (te ei saa seda projekti ilma tööriistakastita teha)
  • VALIKULINE: teie telefonile on installitud Matlab Mobile, mida ma hiljem selgitan

Samm: riistvara seadistamine

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

See on link baaskoodi tagamiseks, et iRobot® saaks Matlabiga suhelda koos põhiõpetusega. Nagu ma juba ütlesin, ei kata ma seda konkreetset osa, kuna õpetus on juba väga hästi välja mõeldud. Mainin, et kui olete lingil olevaid samme järginud, saate Matlabi käsku „doc” kaasatud teabe üle vaadata. Täpsemalt:

doktor Roomba

Ja veel üks väga oluline punkt.

Kui laadite failid ülaltoodud lingilt alla, pange need ülalkirjeldatud kausta, kuna Matlab nõuab, et kasutaja loodud failid oleksid praeguses töökaustas.

Kui see on eemal, liigume edasi koodi juurde.

Samm: leidke kõik need andurid

Kõigi nende andurite leidmine
Kõigi nende andurite leidmine
Kõigi nende andurite leidmine
Kõigi nende andurite leidmine

Võtke hetk ja kontrollige iRobot® -i. On hea teada, kus need asuvad, nii et teil on ettekujutus sisenditest, mida Robo-tehnik saab, ja saate aru, miks asi ringides keerleb, selle asemel, et järgida seadistatud teed (see võib või ei pruugi juhtuda). Ilmselt näete esiküljel suurt füüsilise löögi andurit. Kaljuandureid on natuke raskem näha, peate selle ümber pöörama ja otsima neli selget plastikust akent esiserva lähedal. Valguse löögi andurid on veelgi varjatumad, kuid praegu piisab, kui öelda, et otse läikivas mustas ribas jookseb iRobot® esiosa ümber, mis asub füüsilise löögisensori riba esiküljel.

Rattalanguse andureid on, kuid neid ei kasutata selles projektis, nii et jätkame andurite testimisega.

3. samm: parameetrite määramiseks testimine

Testimine parameetrite määramiseks
Testimine parameetrite määramiseks

Enne kui saame robotehniku oma tööd tegema saata, peame välja selgitama selle spetsiifilised veidrused ja andurite vahemikud. Kuna iga iRobot® on natuke erinev ja muutub kogu roboti eluea jooksul, peame välja selgitama, kuidas andurid loevad piirkondi, kus see hakkab töötama. Lihtsaim viis seda teha on heleda värvi tee seadistamine (Ma kasutasin valge printeripaberi ribasid, kuid kõik, mida heledad värvid teevad) pinnal, mida Robo-tehnik hakkab kasutama.

Käivitage Matlab ja avage uus skript. Salvestage skript samasse kausta, mida ma varem kirjeldasin, ja pange sellele nimi, mida soovite (proovige seda siiski lühikeseks jätta, kuna selle faili nimi on funktsiooni nimi). Lülitage robot sisse ja kasutage juhendist Roomba muutuja seadistust, tippides käsud käsuaknasse.

Veenduge, et Raspberry Pi on ühendatud iRobot® -iga ja teie arvuti on ühendatud sama Interneti -ühendusega. Te kulutate vähem aega juuste väljatõmbamisele, püüdes välja selgitada, miks Matlab ühendust ei loo

r = roomba (teie seadistatud number)

Muutuja "r" pole sellisel juhul vajalik, võite seda nimetada kuidas iganes soovite, kuid see muudab elu lihtsamaks ühe tähe muutuja kasutamise.

Kui tee on seadistatud ja roomba on edukalt ühendatud, asetage tulevane Robo-tehnik kohale, kus üks või kaks kaljuandurit asuvad üle tee. Ilmselgelt tähendab see, et ülejäänud kaks või kolm asuvad teie valitud pinna kohal.

Nüüd käivitage testiandurid käsuga:

r.testSensors

Pidage meeles, et r on muutuja, mille määrasite varem, nii et kui see pole r, muutke r. mida iganes sa otsustasid. See avab testianduri ekraani, kus on palju teavet.

Selle projekti puhul keskenduge kergetele kaitseraudadele, kaitseraudadele ja kaljuosadele. Liigutage Robo-tehnikut ringi, jälgides kindlasti, kuidas andurid erinevatel pindadel muutuvad või kui lähedal peab objekt olema, et valgustusBumperi väärtused muutuksid jne. Pidage neid numbreid meeles (või pange need kirja), sest vajate neid parameetrite seadmiseks sekundiga.

Samm: koodi käivitamine

Kõigepealt ehitate funktsiooni. Ma nimetasin seda "teeks", kuid jällegi ei ole nimi vajalik, kuid edaspidi viitan sellele kui "teele".

Koodi ülemine osa määrab mõned kasutaja sisestusvalikud. See koostab mõned loendid, mida kasutatakse kataloogis listdlg, ja avab seejärel loendi dialoogiboksi. See võimaldab kasutajal valida, millist tee värvi ta soovib järgida, mis tuleb mängu hiljem.

list = {'Punane', 'Sinine', 'Roheline'}

problist = {'Õnnetus, salvesta pilt', 'Komponent paigast ära, Salvesta pilt', 'Oodatud, jätka'} pathcolor = listdlg ('PromptString', 'Vali tee värv', … 'SelectionMode', 'single', 'ListString', list) prob = 0; ajam = ;

Muutujad "prob" ja "driv" tuleb siin deklareerida, kuna neid kasutatakse funktsiooni põhilülitusringi sees, kuid jällegi, kui soovite mõnda neist muutujatest ümber nimetada või loendivalikuid muuta, on kõik korras, kuni olete ülejäänud koodi osas järjepidev.

5. samm: samal ajal silmuse ülaosa: füüsilised löögi andurid

Kuigi silmuse ülaosas on füüsilise põrkeanduri loogika. Põhimõtteliselt, kui Robo-Tehnik satub otsa millelegi, mis peatub (või esipõrkeanduri jaoks varundab see 0,1 meetrit), siis positsioneerib ennast pildistamiseks. Katame kõigepealt kiiruse ja positsiooni juhtimise osa.

Kui testisite eelmistes sammudes kõiki Robo-tehniku andureid, siis teate, et põrkeanduritel on loogiline väärtus (0 või 1), mille null tähistab anduri normaalset, mitte vajutatud asendit. Pidage seda koodi puhul meeles.

samas kui tõsi %peamine, samas kui tsükkel %võtab vastu kaitseraua teavet S = r.getBumpers if S.left ~ = 0 r.stop elseif S.right ~ = 0 r.stop elseif S.front ~ = 0 r.stop end

See on põhiline osa "kui see midagi tabab, siis peatu". Kui andurid tuvastavad kokkupõrke, liigub see koodi järgmisele osale, mis reguleerib foto saamiseks Robo-tehniku positsiooni.

kui S.left ~ = 0 %, kui silmus võtab põrkeraua teabe ja joondab kaamera foto r.turnAngle (5) paus (0.5) img = r.getImage %teeb foto ja kuvab pildi (img) %dialoogiboksi prob = listdlg (' PromptString ',' Leitud ootamatu takistus, palun tuvastage '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) pause (0.5) img = r. getImage image (img) prob = listdlg ('PromptString', 'Found a Onexpected Taktacle, Please Identify'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~ = 0 r.moveDistance (- 0.1) paus (0.5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Found a Onexpected Taktacle, Please Identify' …, 'SelectionMode', 'single', 'ListString', problemist) end

Põhimõtteliselt kuvatakse pärast pildi tegemist veel üks dialoogiboks kolme valikuga. Esimesed kaks võimalust salvestab foto määratud kausta, mida ma hiljem katan, samas kui kolmas valik lihtsalt sulgeb dialoogiboksi ja jätkab silmust. Kui te ei mäleta valikuid, vaadake eelmist sammu.

Nüüd sisestasin koodiosa muhkeanduri osa ja fotode salvestamise osa vahele. See võtab lightBumperi väärtused ja seab sõidukiiruseks 0,025 meetrit sekundis (väga aeglane), mis pole tegelikult vajalik, kuid vähendab Robo-tehniku sissetungimist ja lõpuks füüsiliste põrkeandurite kulumist.

L = r.getLightBumpers kui L.vasak> 100 || L.leftFront> 100 || L.rightFront> 100 || L. parem> 100 sõitu = 0,025 r.setDriveVelocity (0,025) muul juhtimisel = 0,1 otsa

See oleks osa, kus tulevad mängu väärtused, mida te varem täheldasite (ja loodetavasti ka kirja panite)

"L. (anduri külg ja suund)> 100" põhines minu täheldatud väärtustel, nii et kui teie tähelepanekud on erinevad, muutke neid numbreid. Idee on selles, et kui robotehnik tunneb midagi paar sentimeetrit ees, aeglustab see kiirust, kuid mitte rohkem kui mitte.

Järgmine osa on fotode hilisemaks salvestamiseks.

%, kui prob -dialoogis oli valitud esimene või teine valik, salvestab pildi, kui prob == 1 %, kui silmus ehitab foto jaoks failiteabe, kirjutab ajatempliga t = kell; 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 (kaust, basename); imwrite (img, fullFileName) close Joonis 1 paus (2) elseif prob == 2 t = kell; 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 (kaust, basename); imwrite (img, fullFileName) close Joonis 1 paus (2) lõpp

Kõik failinimed ja asukohad, kuhu fotod salvestatakse, on valikulised. Valisin kausta, mis on sissejuhatuses loodud roomba kausta sees, kuid see võib olla kõikjal, kus soovite. Samuti salvestatakse fotod koos ajatempliga, kuid see pole eriti vajalik (kuigi see oleks Marsi missiooni jaoks hüpoteetiliselt kasulik).

Kui füüsilised põrkeandurid on kaetud, saame liikuda kaljuanduritele ja järgnevale teele.

6. samm: tee järgimine

Kaljuandurite kood on seatud kahe esiosa ja kahe küljeanduri väärtuste võrdlemiseks. Peate neid väärtusi (tõenäoliselt) oma jälgitud väärtuste põhjal muutma. Tõenäoliselt peate ka pärast mõningaid katsetusi neid väärtusi muutma ja muutma neid vastavalt ümbritsevale valgusele, kellaajale (sõltuvalt sellest, kui hästi katseala on valgustatud) või kui anduri aknad on määrdunud.

Enne kaljuanduri koodi juurde jõudmist on aga sisestatud lühike koodilõik I, et kustutada mõned mittevajalikud andmed Matlabilt. Seda osa pole vaja, kuid kasutasin seda programmi käivitamiseks vajaliku salvestusruumi vähendamiseks.

clear img clear t clear basename clear fullFileName selge kaust

Järgmine koodisegment on projekti liha. See võimaldab robotehnikul järgida põrandale asetatud heledat rada. Lühidalt, see proovib ennast juhtida nii, et kaks eesmist kaljuandurit on teie vaadeldud väärtuste põhjal künnisest kõrgemal ja võimaldab programmil alustada pilditöötlusetappe veidi hiljem.

C = r.getCliffSensors %, kui silmus järgib värviriba (valge), kui C.leftFront> 2000 && C.rightFront> 2000 %sirge teejuhised r.setDriveVelocity (ajam) elseif C.leftFront 2000 %pöörab paremale, kui robot läheb liiga kaugele vasak r.turnAngle (-2,5) elseif C.leftFront> 2000 && C.rightFront <2000%pöörab vasakule, kui robot läheb liiga kaugele paremale r.turnAngle (2.5) elseif C.leftFront <2000 && C.rightFront 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 img = r.getImage end %kontrollib, kas teedel on kurvi, kui C.left> 2800 && C.right <2800 r.turnAngle (2.5) elseif C.left 2800 r.turnAngle (- 2.5) lõpu %kohahoidja tee kujutise tuvastamise displei ('GETTING IMAGE') lõppotsa jaoks

Pidage meeles, et minu valitud muutujate nimed on valikulised, kuid jällegi arvan, et lihtsustab ühe tähega muutujate kasutamist, kui see on võimalik

Koodi keskmise lõigu selgitamiseks, kui kaks esiandurit jooksevad tee äärest välja (kui tegemist on ristmikuga või kui see jõuab tee lõppu), näeb see, kas selle ees on midagi. Selleks, et see toimiks, peate raja lõpus või mis tahes ristmikul maapinnale asetama objekti.

Kui foto on tehtud, kasutab see pildituvastust, et teha kindlaks, mida teha. Selles koodijaos on ka kohahoidja:

%kohahoidja tee kujutise tuvastamiseks

Kasutasin seda hetkel, sest tahtsin rääkida konkreetselt toimuvast teksti- ja värvitöötlusest, mis on järgmises etapis.

Samm: pilditöötlus

Pilditöötlusel on kaks osa. Esiteks on värvide tuvastamine, mis arvutab pildi värvi intensiivsuse, et otsustada, kas jätkata teksti tuvastamist või mitte. Värviarvutused põhinevad sellel valikul, mis tehti alguses esimeses dialoogiboksis (ma kasutasin punast, sinist, rohelist, kuid võite valida mis tahes värve, kui soovite, kui värvi intensiivsuse keskmised väärtused on äratuntavad Raspberry Pi kaamera).

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

See on intensiivsuse kontroll. Seda kasutatakse järgmises segmendis, et otsustada, mida ta soovib teha.

kui punane> g && punane> b kui teevärv == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img), kui R. Sõnad {1} == KUJU || R. Sõnad {2} == KUJU || R. Sõnad {3} == PILT t = kell; 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 (kaust, basename); imwrite (img, fullFileName) pause (2) elseif R. Sõnad {1} == PAREM || R. Sõnad {2} == ÕIGE || R. Words {3} == PAREM r.turnAngle (-75) elseif R. Words {1} == VASAK || R. Sõnad {2} == VASAK || R. Words {3} == LEFT r.turnAngle (75) elseif R. Words {1} == TAGASI || R. Sõnad {2} == TAGASI || R. Words {3} == TAGASI r.turnAngle (110) end else r.turnAngle (110) end end

See segment otsustab, kas esimeses dialoogiboksis valitud värv vastab kaamera nähtavale värvile. Kui see juhtub, käivitab see teksti tuvastamise. Näib, milline sõna (PILT, TAGASI, PAREM või VASAK) kuvatakse ja seejärel kas pöördub (paremale ja vasakule), pöörleb ümber (tagant) või teeb pildi ja salvestab selle samamoodi nagu varem.

Olen erinevate värvide jaoks andnud ainult ühe osa koodist

Et lubada koodil sinist ja rohelist ära tunda, kopeerige lihtsalt kood ja muutke segmendi ülaosas asuvat loogikakontrolli ning määrake „pathcolor == (number)”, et see vastaks ülemises dialoogiboksis olevatele värvivalikutele (koodi, nagu see kuvatakse, oleks sinine 2 ja roheline 3).

8. samm: valmistoode

Valmis toode
Valmis toode

Nüüd peaks robotehnik suumima Marsi missioonimooduleid ja teatama astronautidele, kui midagi on paigast ära.

Pidage meeles, et kõik kaljuanduri ja lightBumperi väärtused tuleb muuta teie vaadeldud väärtusteks. Samuti olen oma kogemuste põhjal leidnud, et on parem katsetada seda projekti tumedal põrandal ja veelgi parem, kui see põrand ei peegelda. See suurendab tee ja põranda vahelist kontrasti, mis muudab tõenäolisemaks, et Robotehnik järgib seda õigesti.

Loodan, et teile meeldis Marsi missiooni jaoks väikese abilise seadmine ja lõbutsete ehitamisega.

Soovitan: