Sisällysluettelo:

Roboteknikko: 8 vaihetta
Roboteknikko: 8 vaihetta

Video: Roboteknikko: 8 vaihetta

Video: Roboteknikko: 8 vaihetta
Video: ПРАВИЛЬНЫЙ генератор для ювелирной бензиновой горелки! 2024, Heinäkuu
Anonim
Roboteknikko
Roboteknikko

Kuvittele hetkeksi, että olet yksi astronauteista, jotka laskeutuvat Marsille. Sinulla on miljoona tehtävää, näytteitä otettavaksi, suoritettavia kokeita, kerättäviä tietoja, mutta kerran tai kaksi päivässä sinun täytyy käydä ympäri asuin- ja/tai tutkimusmoduuleja, joissa asut ja työskentelet niiden tarkastamiseksi. On välttämätöntä, että jonkun on varmistettava, että asia on hyvässä kunnossa, että kaikki tuhannet kappaleet ja osat toimivat ja ovat paikallaan. Mutta entä jos olisi olemassa automaattinen avustaja, joka vapauttaisi sinut joistakin tehtävistä. Mitä jos olisi pieni robotti, joka voisi liikkua moduulien sisällä varmistaakseen, että kaikki on paikallaan, toimii ja on turvallista.

Roboteknikko pelastamaan.

Pohjimmiltaan tämä koodi ohjaa Robo-teknikkoa, kun se seuraa vaaleaa polkua maassa. Se seuraa tätä polkua, kunnes löytää polusta risteyksen tai käännöksen, joka kehottaa ottamaan kuvan kuvankäsittelyä varten, jotta Roboteknikko voi päättää, mihin seuraavaksi mennä. Valon kohoamis- ja törmäysanturit suojaavat Robo-teknikkoa vaurioilta, ja törmäysanturit ohjaavat, milloin diagnostiikkakuva otetaan. Kaiken kaikkiaan Robo-Technician on suunniteltu zoomaamaan Marin moduuleja, mikä vapauttaa astronauttien aikaa tehdessään tarkastuksen perustehtävän ja vaatii vain ihmisen panosta, kun se löytää jotain vikaa.

Vielä varoitus: tämä on työn alla. Koodi sellaisenaan toimii, mutta siinä on hikka, varsinkin kun siihen liittyy useita päällekkäisiä ohjelmia. Lisäksi, jotta tämä projekti toimisi todellisessa Mars -tehtävässä, robotti olisi rakennettava tätä tarkoitusta varten, joten luulen jälleen, että tämä on "todiste konseptista".

Sinun on saatava tämä käyttöön muutama asia. Tarvitset kalliin ohjelman, tukipaketteja kyseiselle ohjelmalle ja hieman taustaa koodauksessa. Koska olen opiskelija, ja osa pohjakerroksen koodista on annettu (vadelmapi), en aio erityisesti puhua kokoonpanosta. Löydät kaikki linkit kyseiseen peruskoodiin alla. Mennään materiaaliluetteloon.

Laitteisto

  • Raspberry Pi (käytimme versiota 3)
  • iRobot ®
  • jonkinlainen pitolaite, jolla Raspberry Pi pysyy kiinni Robo-teknikossa
  • Raspberry Pi -kamera (ei väliä minkälainen, kunhan sillä on hyvä automaattitarkennus ja kuvan tarkkuus)
  • jonkinlainen teline tai kotelo, joka pitää kameran eteenpäin kohti Robo-Techniciania
  • materiaali käytettäväksi nauhana, valkoinen (tai erittäin vaalea), joka pidetään tukevasti lattiassa. Sen on oltava vain hieman leveämpi kuin kahden etukalliotunnistimen välinen tila.
  • 4 merkkiä, joissa on erittäin suuri teksti (joihin on painettu sanat KUVA, OIKEA, TAKAISIN ja VASEN)
  • Arkit värillistä paperia (vähintään kolme ja mieluiten punainen, vihreä ja sininen)

Ohjelmisto

  • Matlab (2018a ja 2017b olivat molemmat käytössä, ja niillä ei näytä olevan juurikaan eroa)
  • Raspberry Pi -tukipaketti Matlabille
  • Raspberry Pi -koodi Matlab -yhteyttä varten (linkki alla olevaan lähdekoodiin)
  • Kuvankäsittelytyökalut Matlabille (et voi tehdä tätä projektia ilman työkalupakkia)
  • VALINNAINEN: Matlab Mobile on asennettu puhelimeesi, jonka selitän myöhemmin

Vaihe 1: Laitteiston asentaminen

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

Tämä on peruskoodin linkki, jolla varmistetaan, että iRobot® voi kommunikoida Matlabin kanssa, ja perusopetus. Kuten aiemmin sanoin, en kata tätä osaa, koska opetusohjelma on jo hyvin asetettu. Mainitsen, että kun olet noudattanut linkin ohjeita, voit käyttää Matlabin "doc" -komentoa tarkastellaksesi sisällytettyjä tietoja. Erityisesti:

tohtori roomba

Ja vielä yksi erittäin tärkeä kohta.

Kun lataat tiedostot yllä olevasta linkistä, laita ne yllä kuvattuun kansioon, koska Matlab edellyttää, että käyttäjän luomat tiedostot ovat nykyisessä työkansiossa.

Kun tämä on poissa tieltä, siirrytään koodiin.

Vaihe 2: Kaikkien näiden antureiden etsiminen

Kaikkien näiden antureiden löytäminen
Kaikkien näiden antureiden löytäminen
Kaikkien näiden antureiden löytäminen
Kaikkien näiden antureiden löytäminen

Ota hetki ja tarkista iRobot®. On hyvä tietää, missä nämä ovat, joten sinulla on käsitys panoksista, joita Robo-teknikko vastaanottaa, ja voit selvittää, miksi asia pyörii ympyröissä sen sijaan, että noudattaisit määrittämääsi polkua (tämä saattaa tai ehkä ei tapahtunut). Näet ilmeisesti suuren fyysisen törmäysanturin edessä. Kalliosensorit ovat hieman vaikeampia nähdä, sinun on käännettävä se ympäri ja etsittävä neljää kirkasta muovi -ikkunaa lähellä etureunaa. Valon törmäysanturit ovat vieläkin piilossa, mutta toistaiseksi riittää, kun sanotaan, että live kiiltävässä mustassa kaistassa kulkee iRobot®: n etupuolen ympärillä, joka on fyysisen törmäysanturipalkin edessä.

Pyörien pudotussensoreita on, mutta ne ovat käyttämättömiä tässä projektissa, joten siirrymme anturien testaamiseen.

Vaihe 3: Testaa parametrien asettaminen

Testaus parametrien asettamiseksi
Testaus parametrien asettamiseksi

Ennen kuin voimme lähettää Robo-teknikon tekemään tehtävänsä, meidän on selvitettävä sen erityiset omituisuudet ja anturialueet. Koska jokainen iRobot® on hieman erilainen ja muuttuu robotin käyttöiän aikana, meidän on selvitettävä, miten anturit lukevat alueet, joilla se toimii. Helpoin tapa tehdä tämä on määrittää vaalea polku (Käytin valkoista tulostuspaperiliuskaa, mutta kaikki vaaleat värit tekevät sen) pinnalla, jota Robo-Technician käyttää.

Käynnistä Matlab ja avaa uusi komentosarja. Tallenna komentosarja samaan kansioon, jonka kuvailin EARLIER, ja anna sille haluamasi nimi (yritä kuitenkin pitää se lyhyenä, koska tämän tiedoston nimi on toiminnon nimi). Käynnistä robotti ja käytä opetusohjelman roomba -muuttujan asetuksia kirjoittamalla komennot komentoikkunaan.

Varmista, että Raspberry Pi on kytketty iRobotiin® ja tietokoneesi on yhdistetty samaan Internet -yhteyteen. Vietät vähemmän aikaa hiusten poistamiseen yrittäen selvittää, miksi Matlab ei muodosta yhteyttä

r = roomba (määrittämäsi numero)

Muuttuja "r" ei tässä tilanteessa ole välttämätön, voit kutsua sitä miten haluat, mutta se helpottaa elämää yhden kirjaimen muuttujan käyttämisessä.

Kun polku on määritetty ja roomba on yhdistetty onnistuneesti, aseta tuleva roboteknikko paikkaan, jossa yksi tai kaksi kallioanturia ovat polun päällä. Ilmeisesti tämä tarkoittaa, että kaksi muuta tai kolme ovat valitsemasi pinnan yläpuolella.

Käynnistä nyt testianturit komennolla:

r.testSensors

Muista, että "r." On aiemmin määrittämäsi muuttuja, joten jos se ei ole "r", muuta "r". mihin tahansa päätit. Tämä tuo esiin testianturin näytön, jossa on paljon tietoa.

Tässä projektissa keskitytään valopuskureihin, puskureihin ja kallion osiin. Siirrä Robo-teknikkoa ympäriinsä ja tarkista, kuinka anturit muuttuvat eri pinnoilla tai kuinka lähellä kohdetta on oltava, jotta valonlämmittimen arvot muuttuvat jne. Pidä nämä numerot mielessä (tai kirjoita ne muistiin), koska tarvitset niitä parametrien asettamiseen sekunnissa.

Vaihe 4: Koodin käynnistäminen

Aluksi rakennat funktion. Kutsuin sitä "poluksi", mutta jälleen kerran, nimi ei ole välttämätön, mutta aion viitata siihen tästä lähtien "poluksi".

Koodin yläosa asettaa joitakin käyttäjän syöttövaihtoehtoja. Se rakentaa joitain luetteloita, joita käytetään listdlg: ssä, ja tuo esiin luettelon valintaikkunan. Tämän avulla käyttäjä voi valita polun värin, jota hän haluaa seurata ja joka tulee käyttöön myöhemmin.

list = {'Punainen', 'Sininen', 'Vihreä'}

problist = {'Onnettomuus, Tallenna kuva', 'Komponentti paikallaan, Tallenna kuva', 'Odotettu, Jatka'} pathcolor = listdlg ('PromptString', 'Valitse polun väri',… 'SelectionMode', 'single', 'ListString', list) prob = 0; ajaa = ;

Muuttujat "prob" ja "driv" on ilmoitettava täällä, koska niitä käytetään funktion tärkeimmän while -silmukan sisällä, mutta jälleen kerran, jos haluat nimetä jonkin näistä muuttujista tai muuttaa luettelon valintoja, se on hyvä niin kauan kuin olet johdonmukainen muualla koodissa.

Vaihe 5: Ollessasi silmukan alkuun: Fyysiset törmäysanturit

Vaikka silmukan yläreuna sisältää fyysisen törmäysanturin logiikan. Pohjimmiltaan, kun Robo-Technician törmää johonkin, joka pysähtyy (tai etutörmäystunnistimelle se varmuuskopioi 0,1 metriä) ja asettuu ottamaan kuvan. Peitetään ensin nopeuden ja asennon säätöosa.

Jos testasit Robo-Technicianin kaikki anturit edellisissä vaiheissa, tiedät, että törmäysantureilla on looginen arvo (0 tai 1), jossa nolla edustaa anturin normaalia, painamatonta asentoa. Pidä tämä mielessä koodin osalta.

kun taas tosi %main kun silmukka %vastaanottaa puskurin tiedot S = r.getBuskers if S.left ~ = 0 r. stop elseif S. right ~ = 0 r. stop elseif S. front ~ = 0 r. stop end

Tämä on perusosa "jos se osuu johonkin, lopeta". Jos anturit havaitsevat törmäyksen, se siirtyy koodin seuraavaan osaan, joka muuttaa Robo-teknikon asentoa valokuvan saamiseksi.

jos S.left ~ = 0 %, jos silmukka ottaa puskurin tiedot ja kohdistaa kameran valokuvaa varten. PromptString ',' Löydetty odottamaton este, ole hyvä tunnista '…,' SelectionMode ',' single ',' ListString ', problemist) elseif S.right ~ = 0 r.turnAngle (-5) pause (0.5) img = r. getImage image (img) prob = listdlg ('PromptString', 'Found a Unexpected este, Please Identify' …, 'SelectionMode', 'single', 'ListString', problemist) elseif S.front ~ = 0 r.moveDistance (- 0.1) tauko (0.5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Found a Unexpected este, Please Identify' …, 'SelectionMode', 'single', 'ListString', problemist) end

Periaatteessa, kun kuva on otettu, näkyviin tulee toinen valintaikkuna, jossa on kolme vaihtoehtoa. Kaksi ensimmäistä vaihtoehtoa tallentavat valokuvan määritettyyn kansioon, joka katetaan myöhemmin, kun taas kolmas vaihtoehto yksinkertaisesti sulkee valintaikkunan ja jatkaa silmukan läpi. Jos et muista vaihtoehtoja, katso edellinen vaihe.

Nyt lisäsin koodiosan törmäysanturiosan ja valokuvan tallennusosan väliin. Tämä ottaa lightBumper-arvot ja asettaa ajonopeudeksi 0,025 metriä/sekunti (erittäin hidas), mikä ei ole oikeastaan välttämätöntä, mutta se vähentää Robo-Technicianin törmäämistä asioihin ja lopulta fyysisten törmäysanturien kulumista.

L = r.getLightBumpers, jos L.vasen> 100 || L.leftFront> 100 || L.rightFront> 100 || L. oikea> 100 ajoa = 0,025 r. SetDriveVelocity (0,025) muu ajo = 0,1 pää

Tämä olisi osa, jossa aiemmin havaitsemasi (ja toivottavasti kirjoittamasi) arvot tulevat pelaamaan

"L. (anturin sivu ja suunta)> 100" perustui havaintoihini, joten jos havaintosi ovat erilaisia, muuta nämä luvut. Ajatuksena on, että jos roboteknikko havaitsee jotain muutaman senttimetrin edessä, se hidastuu, mikä ei ole tarpeetonta.

Seuraava osa on valokuvien tallentaminen myöhempää käyttöä varten.

%jos ensimmäinen tai toinen vaihtoehto on valittu prob -valintaikkunassa, tallentaa kuvan, jos prob == 1 %jos silmukka rakentaa tiedoston tiedot valokuvalle, kirjoittaa aikaleimalla t = kello; 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 (kansio, perusnimi); imwrite (img, fullFileName) close Kuva 1 tauko (2) elseif prob == 2 t = kello; 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 (kansio, perusnimi); imwrite (img, fullFileName) close Kuva 1 pause (2) end

Kaikki tiedostonimet ja sijainnit, joihin valokuvat tallennetaan, ovat valinnaisia. Valitsin kansion, joka on sisäistetty esittelyvaiheessa luomani roomba -kansioon, mutta se voi olla missä tahansa. Valokuvat tallennetaan myös aikaleimalla, mutta se ei ole erityisen välttämätöntä (vaikka se olisi hypoteettisesti hyödyllistä Mars -tehtävälle).

Kun fyysiset törmäysanturit on peitetty, voimme siirtyä kallion antureille ja seuraavalle polulle.

Vaihe 6: Polun seuraaminen

Kalliosensorien koodi on asetettu vertaamaan kahden etu- ja sivutunnistimen arvoja. Sinun on muutettava näitä arvoja (luultavasti) havaittujen arvojen perusteella. Sinun on todennäköisesti myös muokattava näitä arvoja muutaman koekäytön jälkeen ja muutettava niitä ympäristön valon, vuorokaudenajan (riippuen siitä, kuinka hyvin testialue on valaistu) tai kun anturin ikkunat ovat likaiset.

Ennen kuin pääsemme kallion anturikoodiin, on kuitenkin lisätty lyhyt koodisegmentti I huuhdellakseen joitakin tarpeettomia tietoja Matlabilta. Tätä osaa ei tarvita, mutta käytin sitä ohjelman suorittamiseen tarvittavan tallennustilan vähentämiseen.

clear img clear t clear basename clear fullFileName tyhjä kansio

Seuraava koodisegmentti on projektin liha. Sen avulla Robo-teknikko voi seurata vaaleaa polkua, joka on asetettu lattialle. Lyhyesti sanottuna se yrittää ohjata itseään siten, että kaksi edessä olevaa kallioanturia ovat kynnyksen yläpuolella havaittujen arvojen perusteella, ja antaa ohjelman aloittaa kuvankäsittelyvaiheet hieman myöhemmin.

C = r.getCliffSensors %jos silmukka seuraa värikaistaa (valkoinen), jos C.leftFront> 2000 && C.rightFront> 2000 %suoran polun ohjaus r.setDriveVelocity (ajo) elseif C.leftFront 2000 %kääntyy oikealle, jos robotti menee liian pitkälle vasen r.turnAngle (-2,5) elseif C.leftFront> 2000 && C.rightFront <2000%kääntyy vasemmalle, jos robotti menee liian pitkälle oikealle r.turnAngle (2.5) elseif C.leftFront <2000 && C.rightFront 100 || L.leftFront> 100 || L.rightFront> 100 || L. oikea> 100 img = r. 2.5) loppuprosentin paikan haltija polun kuvantunnistusnäytölle ('GETTING IMAGE') päätypää

Muista, että valitsemani muuttujien nimet ovat valinnaisia, mutta jälleen kerran mielestäni helpottaa yksikirjaimisten muuttujien käyttöä, kun se on mahdollista

Koodin keskiosan selittämiseksi, kun kaksi etuanturia juoksevat polun reunalta (kun kyse on risteyksestä tai kun se saavuttaa polun loppuun), se näyttää, onko edessä jotain. Sinun on asetettava esine maahan polun loppuun tai mihin tahansa risteykseen, jotta tämä toimii.

Kun valokuva on otettu, se käyttää kuvan tunnistusta selvittääkseen, mitä tehdä. Tässä koodiosassa on myös paikkamerkki:

%paikkatietokenttä polun kuvan tunnistukselleDisp

Käytin tätä tällä hetkellä, koska halusin puhua nimenomaan tekstin ja värin käsittelystä, joka tapahtuu seuraavassa vaiheessa.

Vaihe 7: Kuvankäsittely

Kuvankäsittelyssä on kaksi osaa. Ensimmäinen on värin tunnistus, joka laskee kuvan värin voimakkuuden päättääkseen, jatkaako tekstintunnistus vai ei. Värilaskelmat perustuvat siihen, mikä valinta tehtiin ensimmäisessä valintaikkunassa alussa (käytin punaista, sinistä, vihreää, mutta voit valita haluamasi värit, kunhan värin voimakkuuden keskiarvot voidaan tunnistaa Raspberry Pi -kamera).

img = r.getImage img = imcrop (img, [0 30512354]) imgb = imcrop (img, [0 30512354]) imgt = imcrop (img, [0 30512354]) punainen = keskiarvo (keskiarvo (keskiarvo (imgb (:,:, 1))); g = keskiarvo (keskiarvo (imgb (:,:, 2))); b = keskiarvo (keskiarvo (imgb (:,:, 3)));

Tämä on voimakkuuden tarkistus. Tätä käytetään seuraavassa segmentissä päättämään, mitä se haluaa tehdä.

jos punainen> g && punainen> b jos polun väri == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img) jos R. Sanat {1} == KUVA || R. Sanat {2} == KUVA || R. Sanat {3} == KUVA t = kello; 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 (kansio, perusnimi); imwrite (img, fullFileName) pause (2) elseif R. Sanat {1} == OIKEA || R. Sanat {2} == OIKEA || R. Words {3} == OIKEA r.turnAngle (-75) elseif R. Words {1} == VASEN || R. Sanat {2} == VASEN || R. Words {3} == VASEN r.turnAngle (75) elseif R. Words {1} == TAKAISIN || R. Sanat {2} == TAKAISIN || R. Words {3} == TAKAISIN r.turnAngle (110) end else r.turnAngle (110) end end

Tämä segmentti päättää, vastaako ensimmäisessä valintaikkunassa valittu väri kameran näkemää väriä. Jos näin on, se suorittaa tekstintunnistuksen. Se näyttää, mikä sana (KUVA, TAKA, OIKEA tai VASEN) ilmestyy ja sitten joko kääntyy (oikealle ja vasemmalle), pyörii ympäri (taaksepäin) tai ottaa kuvan ja tallentaa sen samalla tavalla kuin aiemmin.

Olen antanut vain yhden osan koodista eri väreille

Jotta koodi tunnistaisi sinisen ja vihreän, kopioi koodi ja muuta segmentin yläosassa oleva logiikkatarkistus ja aseta "pathcolor == (numero)" vastaamaan värivalintoja ylimmässä valintaikkunassa (koodi näytössä, sininen olisi 2 ja vihreä olisi 3).

Vaihe 8: Valmis tuote

Valmis tuote
Valmis tuote

Nyt roboteknikon tulisi zoomata ympäri Marsin tehtävämoduuleja ja raportoida astronauteille, kun jokin on vialla.

Muista, että kaikki kallioanturin ja lightBumper -arvot on muutettava havaittuihin arvoihin. Lisäksi kokemuksesta olen huomannut, että on parempi testata tätä projektia tummalla lattialla ja vielä parempi, jos lattia ei ole heijastava. Tämä saa kontrastin lisääntymään polun ja lattian välillä, mikä tekee todennäköisemmäksi, että roboteknikko seuraa sitä oikein.

Toivottavasti nautit pienen avustajan perustamisesta Mars -tehtävään ja pidä hauskaa rakentamisesta.

Suositeltava: