- Vaadittu laitteisto:
- Ohjelmointivaatimus:
- Käsittelyn asettaminen Raspberry Pi: lle:
- Piirikaavio:
- Vadelma Pi -palloseurantaohjelma:
- Raspberry Pi -pallonseurantarobotin toiminta:
Robotiikan, tekoälyn ja koneoppimisen ala kehittyy nopeasti, ja se muuttaa varmasti ihmiskunnan elämäntapaa lähitulevaisuudessa. Robottien uskotaan ymmärtävän reaalimaailman ja toimivan vuorovaikutuksessa sen kanssa anturien ja koneoppimisen avulla. Kuvien tunnistaminen on yksi suosituimmista tavoista, jolla robottien uskotaan ymmärtävän esineitä katsomalla todellista maailmaa kameran kautta aivan kuten me. Tässä projektissa anna Raspberry Pi: n voiman rakentaa robotti, joka pystyy seuraamaan palloa ja seuraamaan sitä samalla tavalla kuin jalkapalloa pelaavat robotit.
OpenCV on hyvin kuuluisa ja avoimen lähdekoodin työkalu, jota käytetään kuvankäsittelyyn, mutta tässä opetusohjelmassa asioiden pitämiseksi yksinkertaisina käytämme IDE: tä. Koska ARM-käsittely on myös julkaissut GPIO-kirjaston käsittelyä varten, meidän ei tarvitse enää siirtyä pythonin ja käsittelyn välillä toimiakseen Raspberry Pi: n kanssa. Kuulostaa hyvältä? Joten aloitetaan.
Vaadittu laitteisto:
- Vadelma Pi
- Kameramoduuli nauhakaapelilla
- Robottialusta
- Vaihdemoottorit pyörällä
- L293D-moottorin kuljettaja
- Virtapankki tai mikä tahansa muu kannettava virtalähde
Ohjelmointivaatimus:
- Raspberry pi -näyttö tai muu näyttö
- Näppäimistö tai hiiri Pi: lle
- ARM-ohjelmiston käsittely
Huomaa: Näytön on oltava kytkettynä Pi: hen johtoon ohjelmoinnin aikana, koska vasta sitten kameran videota voidaan katsella
Käsittelyn asettaminen Raspberry Pi: lle:
Kuten aiemmin kerrottiin, käytämme Raspberry Pi: n ohjelmointiin käsittelyympäristöä eikä oletusarvoista tapaa käyttää pythonia. Noudata siis seuraavia vaiheita:
Vaihe 1: - Liitä Raspberry Pi näyttösi, näppäimistön ja hiiresi kanssa ja käynnistä se.
Vaihe 2: - Varmista, että Pi on yhdistetty aktiiviseen Internet-yhteyteen, koska aiomme ladata muutamia asioita.
Vaihe 3: - Napsauta Processing ARM ladataksesi Raspberry Pi: n käsittelyn IDE. Lataus on ZIP-tiedoston muodossa.
Vaihe 4: - Kun olet ladannut, pura ZIP-kansiosi tiedostot haluamaasi hakemistoon. Otin sen vain työpöydällesi.
Vaihe 5: - Avaa nyt purettu kansio ja napsauta tiedostoa nimeltä käsittely. Sen pitäisi avata ikkuna alla olevan kuvan mukaisesti.
Vaihe 6: - Tässä ympäristössä kirjoitamme koodimme. Ihmisille, jotka tuntevat Arduinon, älä järkytty KYLLÄ IDE näyttää samanlaiselta kuin Arduino ja niin myös ohjelma.
Vaihe 7: - Tarvitsemme kaksi kirjastoa, jotta palloa seuraava ohjelma toimisi. Asenna sitten napsauttamalla Sketch -> Import Library -> Add Library . Seuraava valintaikkuna avautuu.
Vaihe 8: - Käytä vasemmassa yläkulmassa olevaa tekstikenttää Raspberry Pi: n etsimiseen ja paina Enter-näppäintä. Hakutuloksen pitäisi näyttää tältä.
Vaihe 9: - Etsi kirjastot nimeltä “GL Video” ja “Hardware I / O” ja asenna ne napsauttamalla Asenna. Varmista, että asennat molemmat kirjastot.
Vaihe 10: - Internetin mukaan asennus kestää muutaman minuutin. Kun olet valmis, olemme valmiita ohjelmistojen käsittelyyn.
Piirikaavio:
Tämän Vadelma Pi -palloseurantaprojektin piirikaavio on esitetty alla.
Kuten näette, piiriin kuuluu PI-kamera, moottorin ohjainmoduuli ja Raspberry pi -laitteeseen kytketty moottoripari. Koko piiri saa virtansa mobiilivirrasta (jota edustaa AAA-akku yllä olevassa piirissä).
Koska nastojen yksityiskohtia ei mainita Raspberry Pi: ssä, meidän on tarkistettava nastat alla olevan kuvan avulla
Moottorien ajamiseen tarvitaan neljä tapia (A, B, A, B). Tämä neljä nastaa on kytketty GPIO14,4,17: stä ja 18 vastaavasti. Oranssi ja valkoinen johto muodostavat yhdessä yhteyden yhdelle moottorille. Joten meillä on kaksi tällaista paria kahdelle moottorille.
Moottorit on kytketty L293D-moottoriohjainmoduuliin kuvan osoittamalla tavalla, ja ohjainmoduulia saa virtansa virtapankista. Varmista, että virtapankin maa on kytketty Raspberry Pi: n maahan, vasta sitten yhteys toimii.
Se on, että laitteistoyhteytemme on valmis, palataan takaisin käsittelyympäristöön ja aloitetaan ohjelmointi opettaaksemme robottimme seuraamaan palloa.
Vadelma Pi -palloseurantaohjelma:
Täydellinen käsittely ohjelma Hankkeen annetaan lopussa tämän sivun, josta suoraan käyttää. Aivan alla olen selittänyt koodin toiminnan, jotta voit käyttää sitä muissa vastaavissa projekteissa.
Ohjelma konsepti on hyvin yksinkertainen. Vaikka projektin tarkoituksena on seurata palloa, emme todellakaan aio tehdä sitä. Aiomme vain tunnistaa pallon sen värin perusteella. Kuten me kaikki tiedämme, videot ovat vain jatkuvia kuvakehyksiä. Joten otamme jokaisen kuvan ja jaamme sen pikseleiksi. Sitten verrataan kutakin pikseliväriä pallon palloon; jos ottelu löytyy, voimme sanoa, että olemme löytäneet pallon. Näiden tietojen avulla voimme myös tunnistaa pallon sijainnin (pikselin väri) näytöllä. Jos sijainti on kaukana vasemmalla, siirrämme robotin oikealle, jos sijainti on oikeassa reunassa, siirrämme robotin vasemmalle niin, että pikselipaikka pysyy aina näytön keskellä. Voit katsella Computer Vision -videota Daniel Shiffmanista saadaksesi selkeän kuvan.
Kuten aina, aloitamme tuomalla kaksi lataamamme kirjastoa. Tämä voidaan tehdä kahdella seuraavalla rivillä. Laitteiston I / O-kirjastoa käytetään PI: n GPIO-nastojen käyttämiseen suoraan käsittelyympäristöstä, glvideo-kirjastoa käytetään Raspberry Pi -kameramoduulin käyttämiseen.
tuonnin käsittely.io. *; tuoda gohai.glvideo. *;
Sisällä setup toiminto me alustaa tuotoksen nastat moottorin ohjaamiseksi ja myös saada videon pi kamerasta ja koko sen ikkunan koko 320 * 240.
void setup () {koko (320, 240, P2D); video = uusi GLCapture (tämä); video.start (); trackColor = väri (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Void piirtää on kuin ääretön silmukan koodin sisällä tämän silmukan tulee suorittaa niin kauan kuin ohjelma on päättynyt. Jos kameralähde on käytettävissä, luemme siitä tulevan videon
void draw () {tausta (0); if (video.available ()) {video.read (); }}
Sitten aloitamme videokehyksen jakamisen pikseleiksi. Jokaisella pikselillä on punainen, vihreä ja sininen arvo. Nämä arvot tallennetaan muuttujiin r1, g1 ja b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Mikä on nykyinen väriväri currentColor = video.pixels; uimuri r1 = punainen (currentColor); kelluva g1 = vihreä (currentColor); float b1 = sininen (currentColor);
Voit havaita värin pallo aluksi, meidän täytyy klikata väri. Napsautuksen jälkeen pallon väri tallennetaan muuttujaan nimeltä trackColour .
void mousePressed () {// Tallenna väri napsauttamalla hiirtä trackColor-muuttujassa int loc = mouseX + mouseY * video.width; trackColor = video.pikseliä; }
Kun meillä on raidan väri ja nykyinen väri, meidän on vertailtava niitä. Tämä vertailu käyttää dist-toimintoa. Se tarkistaa, kuinka lähellä nykyinen väri on raidan väriä.
uimuri d = dist (r1, g1, b1, r2, g2, b2);
Arvo dist on nolla tarkkaa vastinetta. Joten, jos dist-arvo on pienempi kuin määritetty arvo (maailmanennätys), oletamme, että olemme löytäneet raidan värin. Sitten saamme kyseisen pikselin sijainnin ja tallennamme sen muuttujaan lähimpään X ja lähimpään Y löytääksesi pallon sijainnin
jos (d <worldRecord) {worldRecord = d; lähin X = x; lähinY = y; }
Piirrämme löydetyn värin ympärille myös ellipsin osoittamaan, että väri on löydetty. Sijainnin arvo on myös painettu konsolille, tämä auttaa paljon virheenkorjauksessa.
if (worldRecord <10) {// Piirrä ympyrä seurattavaan pikselitäyttöön (trackColor); aivohalvaus (4,0); aivohalvaus (0); ellipsi (lähinX, lähinY, 16, 16); println (lähinX, lähinY);
Lopuksi voimme verrata lähimmän X: n ja lähimmän Y sijaintia ja säätää moottoreita siten, että väri pääsee näytön keskelle. Alla olevaa koodia käytetään robotin kääntämiseen oikealle, koska värin X-sijainnin havaittiin olevan näytön vasemmalla puolella (<140)
if (lähinX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); viive (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Käänny oikealle"); }
Vastaavasti voimme tarkistaa X: n ja Y: n sijainnin moottoreiden ohjaamiseksi vaadittuun suuntaan. Kuten aina, voit katsoa sivun alaosasta koko ohjelman.
Raspberry Pi -pallonseurantarobotin toiminta:
Kun olet valmis laitteistoon ja ohjelmaan, on aika pitää hauskaa. Ennen kuin testaamme bottimme maassa, meidän on varmistettava, että kaikki toimii hyvin. Liitä Pi seurata ja käynnistää prosessointikoodi. Sinun pitäisi nähdä videosyöttö pienessä ikkunassa. Tuo nyt pallo kehyksen sisään ja napsauta palloa opettaaksesi robotille, että sen tulisi seurata tätä väriä. Siirrä nyt palloa ruudun ympäri ja huomaa pyörien pyörimisen.
Jos kaikki toimii odotetulla tavalla, vapauta botti maassa ja alkoi pelata sen kanssa. Varmista, että huone on tasaisesti valaistu parhaan tuloksen saavuttamiseksi. Projektin täydellinen työskentely on esitetty alla olevassa videossa. Toivottavasti ymmärrät projektin ja nautit rakentamaan jotain vastaavaa. Jos sinulla on ongelmia, voit lähettää ne alla olevaan kommenttiosioon tai auttaa.