Sisällysluettelo:

Wallacen itsenäinen robotti - Osa 4 - Lisää IR -etäisyys- ja "vahvistin" -anturit: 6 vaihetta
Wallacen itsenäinen robotti - Osa 4 - Lisää IR -etäisyys- ja "vahvistin" -anturit: 6 vaihetta

Video: Wallacen itsenäinen robotti - Osa 4 - Lisää IR -etäisyys- ja "vahvistin" -anturit: 6 vaihetta

Video: Wallacen itsenäinen robotti - Osa 4 - Lisää IR -etäisyys- ja
Video: Бог говорит: I Will Shake The Nations | Дерек Принс с субтитрами 2024, Marraskuu
Anonim
Image
Image
Lisää tukipiiri (MCP3008)
Lisää tukipiiri (MCP3008)

Hei, tänään aloitamme seuraavan vaiheen Wallacen ominaisuuksien parantamiseksi. Yritämme erityisesti parantaa sen kykyä havaita ja välttää esteitä käyttämällä infrapunaetäisyysanturia ja hyödyntää myös Roboclaw-moottorinohjaimen kykyä valvoa virtaa ja muuttaa se virtuaaliseksi (ohjelmisto) "anturiksi". Lopuksi katsomme, kuinka navigoida ilman SLAM: ää (samanaikainen sijainti ja kartoitus) (toistaiseksi), koska robotilla ei ole vielä IMU (hitausmittausyksikkö) - tai ToF (lentoaika) -anturia.

Navigoinnin avulla se on aluksi vain kaksi päätavoitetta:

  1. välttää esteitä
  2. tunnistaa, milloin se on jumissa jonnekin, eikä edisty. ("edistyminen" tarkoittaa, onko se siirtynyt eteenpäin merkityksellisellä etäisyydellä)
  3. mahdollinen kolmas tavoite voisi olla se, että se yrittää kohdistaa itsensä suoraan seinään.

Tämä projekti alkoi robottipaketilla ja perusliikkeiden toimimisella näppäimistön ja ssh -liitännän avulla.

Toinen vaihe oli lisätä riittävästi tukipiirejä monien antureiden lisäämistä varten.

Aiemmassa Instructable -ohjelmassa lisäsimme useita HCSR04 -akustisia antureita ja robotti voi nyt välttää esteitä liikkuessaan asunnossa.

Vaikka se toimii hyvin keittiössä ja eteisessä hyvillä, kiinteillä tasaisilla pinnoilla, se on täysin sokea lähestyessään ruokasalia. Se ei voi "nähdä" pöytää ja tuolin jalkoja.

Yksi parannus voi olla seurata tyypillisiä moottorivirtoja, ja jos arvot hyppäävät, robotin on täytynyt osua johonkin. Se on hyvä "suunnitelma B" tai jopa C. Mutta se ei todellakaan auta sitä navigoimaan ruokailutilassa.

(Päivitys: itse asiassa tällä hetkellä virranvalvonta on suunnitelma A peruutettaessa, koska olen väliaikaisesti poistanut ja anturit takana).

Tämän osion video on esteiden välttämisen antureiden viimeinen vaihe.

Videossa näkyy kuusi etuosan HCSR04 -akustista anturia ja kaksi Sharp -IR -anturia. Infrapunatunnistimet eivät tulleet paljon esille videossa. Heidän vahvuutensa on enimmäkseen silloin, kun robotti on ruokailutilassa pöydän ja tuolin jalkojen edessä.

Anturien lisäksi virtamittari tuli pelaamaan etenkin peruutuksen aikana, jos se törmää johonkin.

Lopuksi se hyödyntää sadan viimeisen siirron historiaa ja joitakin perusanalyysejä vastaamaan yhteen kysymykseen:

"Onko viime aikoina tapahtunut todellista edistystä (vai onko se juuttunut johonkin toistuvaan tanssiin)?"

Joten videossa, kun näet eteen-taaksepäin toistuvan, se kääntyy, se tarkoittaa, että se tunnisti eteenpäin-taaksepäin -kuvion ja yrittää siten jotain muuta.

Tämän ohjelmistoversion ainoa ohjelmoitu tavoite oli yrittää edetä jatkuvasti eteenpäin ja välttää esteitä.

Vaihe 1: Lisää tukipiiri (MCP3008)

Lisää tukipiiri (MCP3008)
Lisää tukipiiri (MCP3008)
Lisää tukipiiri (MCP3008)
Lisää tukipiiri (MCP3008)
Lisää tukipiiri (MCP3008)
Lisää tukipiiri (MCP3008)

Ennen kuin voimme lisätä infrapuna -antureita, tarvitsemme rajapinnan niiden ja Raspberry Pi: n välillä.

Lisäämme MCP3008-analogia-digitaalimuuntimen. On olemassa monia online -resursseja tämän sirun yhdistämiseksi Raspberry Pi: hen, joten en mene tähän paljon.

Pohjimmiltaan meillä on valinta. Jos IR -antureiden versio toimii 3 V: n jännitteellä, niin voi toimia myös MCP3008, ja voimme sitten muodostaa yhteyden suoraan vadelmaan.

[3V IR -anturi] - [MCP3008] - [Raspberrry Pi]

Minun tapauksessani käytän kuitenkin enimmäkseen 5V, joten se tarkoittaa kaksisuuntaista tasonsiirtoa.

[5V IR-anturi]-[MCP3008]-[5V-3V kaksisuuntainen väylä]-[Raspberry Pi]

Huomautus: IR -anturista tulee vain yksi signaali. Se menee suoraan johonkin MCP3008: n analogisista signaalilinjoista. MCP3008: sta on 4 datalinjaa, jotka meidän on yhdistettävä (kaksisuuntaisen väylän kautta) Raspberry Pi: hen.

Tällä hetkellä robotti toimii vain kahdella IR -anturilla, mutta voimme helposti lisätä lisää. MCP3008 kahdeksan analogista tulokanavaa.

Vaihe 2: Asenna IR -anturit

Asenna IR -anturit
Asenna IR -anturit
Asenna IR -anturit
Asenna IR -anturit
Asenna IR -anturit
Asenna IR -anturit
Asenna IR -anturit
Asenna IR -anturit

Sharp valmistaa useita erilaisia IR -antureita, ja niillä on eri kantomatka ja peittoalue. Tilasin GP2Y0A60SZLF -mallin. Valitsemasi malli vaikuttaa anturin sijaintiin ja suuntaukseen. Valitettavasti en todellakaan tutkinut tarkalleen, mitkä anturit saatiin. Se oli enemmänkin "mitä voin saada kohtuullisella ajalla ja hinnalla hyvämaineisesta lähteestä heidän tarjoamistaan" -päätöksistä.

(Päivitys: Tällä ei kuitenkaan välttämättä ole väliä, koska nämä anturit näyttävät hämmentyvän sisätilan valaistuksesta. Tutkin edelleen tätä ongelmaa)

On vähintään kolme tapaa asentaa nämä anturit robottiin.

  1. Aseta ne kiinteään asentoon, edestä, hieman poispäin toisistaan.
  2. Aseta ne servolle eteen, hieman poispäin toisistaan.
  3. Aseta ne kiinteään asentoon eteen, mutta vasempaan ja oikeaan kauimpaan kulmaan toisiaan kohti.

Kun verrataan valintaa #1 valintaan #3, mielestäni numero 3 kattaa enemmän törmäysaluetta. Jos katsot kuvia, valinta #3 voidaan tehdä paitsi siten, että anturikentät ovat päällekkäisiä, mutta myös ne voivat peittää robotin keskiosan ja ulkopuolella.

Valinnalla #1, mitä kauempana anturit ovat toisistaan, sitä enemmän kuolleita kulmia on keskellä.

Voisimme tehdä #2, (lisäsin joitain kuvia servolla mahdollisuutena) ja pyytää heitä tekemään pyyhkäisy, ja ilmeisesti tämä voi kattaa suurimman osan. Haluan kuitenkin viivyttää servon käyttöä mahdollisimman pitkään ainakin kahdesta syystä:

  • Käytämme yhden Raspberry Pi -laitteen PWM -viestintäkanavista. (Tätä on mahdollista parantaa, mutta silti …)
  • Virranotto servolla voi olla merkittävä
  • Se lisää laitteistoja ja ohjelmistoja

Haluaisin jättää servovaihtoehdon myöhemmäksi, kun lisäät tärkeämpiä antureita, kuten Time-of-Flight (ToF) tai ehkä kameran.

Valinnalla #2 on toinen mahdollinen etu, jota ei ole saatavana kahden muun vaihtoehdon kanssa. Nämä IR -anturit voivat hämmentyä valaistuksesta riippuen. Voi olla, että robotti lukee kohteen, joka on lähellä, vaikka itse asiassa ei olekaan. Valinnalla #3, koska niiden kentät voivat olla päällekkäisiä, molemmat anturit voivat rekisteröidä saman objektin (eri kulmista).

Joten valitsemme sijoitusvalinnan #3.

Vaihe 3: Aika testata

Image
Image

Kun olemme tehneet kaikki yhteydet Raspberry Pi: n, MCP3008 ADC: n ja Sharp IR -anturien välillä, on aika testata. Vain yksinkertainen testi varmistaaksesi, että järjestelmä toimii uusien antureiden kanssa.

Kuten aiemmissa käyttöohjeissa, käytän wiringPi C -kirjastoa mahdollisimman paljon. Helpottaa asioita. Jotain, joka ei ole kovin selvää wiringPi -verkkosivuston tarkistamisesta, on se, että MCP3004/3008: lle on suora tuki.

Jopa ilman sitä voit käyttää SPI -laajennusta. Mutta ei tarvitse. Jos tarkastelet tarkasti Gordonin git -arkistoa wiringPi: lle, näet luettelon tuetuista siruista, joista yksi on MCP3004/3008.

Päätin liittää koodin tiedostona, koska en saanut sitä näytettyä oikein tällä sivulla.

Vaihe 4: Virtuaalianturi - AmpSensor

Mitä enemmän erilaisia tapoja saada robotti vastaanottamaan tietoja ulkomaailmasta, sitä parempi.

Robotissa on tällä hetkellä kahdeksan HCSR04 -akustista kaikuluotaintunnistinta (ne eivät ole tämän Instructable -ohjelman painopiste), ja siinä on nyt kaksi Sharp IR -etäisyysanturia. Kuten aiemmin totesimme, voimme hyödyntää jotain muuta: Roboclawin moottorivirtojen tunnistustoimintoa.

Voimme kääriä kyselykutsun moottorinohjaimelle C ++ -luokkaan ja kutsua sitä AmpSensoriksi.

Lisäämällä ohjelmistoon "älykkyyttä" voimme seurata ja säätää tyypillistä virranottoa suoran liikkeen aikana (eteenpäin, taaksepäin) ja myös kiertoliikkeitä (vasen, oikea). Kun tiedämme nämä vahvistimien alueet, voimme valita kriittisen arvon, jotta jos AmpSensor saa moottorin ohjaimesta nykyisen lukeman, joka ylittää tämän arvon, tiedämme, että moottorit ovat luultavasti pysähtyneet, ja tämä yleensä osoittaa, että robotti on törmännyt johonkin.

Jos lisäämme ohjelmistoon joustavuutta (komentorivin nuolet ja / tai näppäimistön syöttö käytön aikana), voimme nostaa / laskea "kriittisen ampeerin" kynnystä kokeillessamme vain antamalla robotin liikkua ja törmätä esineisiin, joko suoraan sisään tai pyörien.

Koska ohjelmiston navigointiosa tietää liikesuunnan, voimme käyttää kaikkia näitä tietoja ehkä pysäyttääksesi liikkeen ja yrittäessämme kääntää liike lyhyeksi ajaksi ennen kuin yritämme jotain muuta.

Vaihe 5: Navigointi

Robotti on tällä hetkellä rajallinen reaalimaailman palautteessa. Siinä on muutama lähietäisyysanturi esteiden välttämiseksi, ja siinä on varatekniikka, joka valvoo virrankulutusta, jos etäisyysanturit ohittavat esteen.

Siinä ei ole enkoodereilla varustettuja moottoreita eikä IMU: ta (inertiaalinen mittausyksikkö), joten on vaikeampaa tietää, liikkuuko se todella vai pyörikö ja kuinka paljon.

Vaikka robotissa olevilla antureilla voidaan saada jonkinlainen etäisyys, niiden näkökenttä on laaja ja arvaamaton. Akustinen kaikuluotain ei ehkä heijastu oikein taaksepäin; infrapuna voi sekoittua muihin valaistuksiin tai jopa useisiin heijastaviin pintoihin. En ole varma, että on vaivan arvoista yrittää todella seurata etäisyyden muutosta tekniikkana tietääkseen, liikkuuko robotti ja kuinka paljon ja mihin suuntaan.

Päätin tarkoituksella EI käyttää mikro-ohjainta, kuten Arduinoa, koska a) en pidä sen psuedo-C ++ -ympäristöstä, b) ja että liiallinen kehitys kuluttaa luku-kirjoitusmuistia (?) Ja että tarvitsisi isäntätietokoneen kehittääkseen (?). Tai ehkä minä vain tapaan kuin Raspberry Pi.

Raspbiania käyttävä Pi ei kuitenkaan ole reaaliaikainen käyttöjärjestelmä, joten näiden antureiden epävakauden ja käyttöjärjestelmän lukematta täsmälleen joka kerta tunsin, että näiden antureiden tarkoitus sopi paremmin esteiden välttämiseen eikä todellinen etäisyysmittaus.

Tämä lähestymistapa näytti monimutkaiselta ja ei niin paljon hyötyä, kun voimme käyttää parempia ToF (lento-aika) -antureita (myöhemmin) tähän tarkoitukseen (SLAM).

Yksi lähestymistapa, jota voimme käyttää, on pitää jonkinlainen seuranta siitä, mitä liikekomentoja on annettu viimeisen X sekunnin aikana tai komentoja.

Oletetaan esimerkiksi, että robotti on jumissa kulmaa vasten. Yksi anturisarja kertoo sen olevan liian lähellä yhtä seinää, joten se kääntyy, mutta sitten toinen anturisarja kertoo, että se on liian lähellä toista seinää. Se päättyy vain toistamaan sivuttain-kuvio.

Yllä oleva esimerkki on vain yksi hyvin yksinkertainen tapaus. Älykkyyden lisääminen voi vain nostaa toistuvan kuvion uudelle tasolle, mutta robotti jää jumiin nurkkaan.

Esimerkki sen sijaan, että se pyörii edestakaisin paikallaan, se pyörii yhteen suuntaan, tekee hetkellisen käänteisen käännöksen (joka tyhjentää sitten kriittiset etäisyysilmoitukset), ja vaikka se pyörii toiseen suuntaan, se kulkee edelleen eteenpäin jossain kulmassa takaisin kulmaan, toistamalla monimutkaisemman rypytyksen olennaisesti samasta asiasta.

Tämä tarkoittaa, että voimme todella käyttää komentohistoriaa ja katsoa, kuinka hyödyntää ja käyttää näitä tietoja.

Voin ajatella kahta hyvin yksinkertaista (alkeellista) tapaa käyttää liikehistoriaa.

  • vastaavatko ne viimeistä X -liikettä Y -mallia. Yksinkertainen esimerkki voisi olla (ja näin tapahtui) "Eteenpäin, taaksepäin, eteenpäin, taaksepäin, …..". Joten tämä hakutoiminto palauttaa joko TOSI (kuvio löytyi) tai EPÄTOSI (ei löydy). Jos TOSI, kokeile ohjelman navigointiosassa muita liikesarjoja.
  • onko viimeisellä X -liikkeellä yleinen tai nettoliike eteenpäin. Miten voisi määrittää, mikä on todellinen eteenpäin suuntautuva liike? No.. yksi helppo vertailu on, että viimeisillä X -liikkeillä "Eteenpäin" esiintyy enemmän kuin "KÄÄNTÖ". Mutta sen ei tarvitse olla ainoa. Entä tämä: "OIKEA, OIKEA, VASEN, OIKEA". Siinä tapauksessa robotin on tehtävä oikeita käännöksiä päästäkseen ulos nurkasta tai koska se lähestyi seinää kulmassa, jota voitaisiin pitää todellisena eteenpäin. Toisaalta "VASEN, OIKEA, VASEN, OIKEA …" ei ehkä ole todellinen edistysaskel. Jos siis "OIKEA" esiintyy enemmän kuin "VASEN" tai "VASEN esiintyy enemmän kuin" OIKEA ", se voi olla todellista edistystä.

Tämän Instructable -ohjelman alussa mainitsin, että mahdollinen kolmas tavoite voisi olla neliöinti tai seinään kohdistaminen. Sitä varten tarvitsemme kuitenkin enemmän kuin "olemme lähellä jotakin kohdetta". Jos esimerkiksi voimme saada kaksi eteenpäin suunnattua akustista anturia (ei tämän artikkelin painopiste) antamaan kohtuullisen hyviä ja vakaita vastauksia etäisyyteen, ilmeisesti jos toinen raportoi paljon eri arvoa kuin toinen, robotti on lähestynyt seinää kulmassa, ja voisi yrittää ohjata nähdäkseen, lähestyvätkö nämä arvot toisiaan (suoraan seinää vasten).

Vaihe 6: Viimeiset ajatukset, seuraava vaihe…

Toivottavasti tämä Instructable antoi ideoita.

Lisää antureita tuo joitakin etuja ja haasteita.

Edellä mainitussa tapauksessa kaikki akustiset anturit toimivat hyvin yhdessä ja ohjelmisto oli melko suoraviivaista.

Kun IR -anturit lisättiin sekoitukseen, siitä tuli hieman haastavampaa. Syynä on se, että jotkut niiden näkökentistä olivat päällekkäisiä akustisten antureiden kanssa. IR-anturit näyttivät hieman herkiltä ja arvaamattomilta muuttuvissa ympäristön valo-olosuhteissa, kun taas valaistus ei tietenkään vaikuta akustisiin antureihin.

Ja niin haasteena oli, mitä tehdä, jos akustinen anturi kertoo meille, ettei esteitä ole, mutta IR -anturi on.

Toistaiseksi kokeilun ja erehdyksen jälkeen asiat päätyivät tähän prioriteettiin:

  1. vahvistimen tunnistus
  2. IR-tunnistus
  3. akustinen tunnistus

Tein vain infrapuna -antureiden herkkyyden alentamisen, jotta ne havaitsisivat vain hyvin lähellä olevat esineet (kuten tuolin jalat)

Toistaiseksi ei ole ollut tarvetta tehdä monisäikeistä tai keskeytysohjattua ohjelmistoa, vaikka kohtaan joskus ajoittain hallinnan menetyksen Raspberry Pi: n ja Roboclaw-moottorinohjaimen välillä (sarjaliikenteen katoaminen).

Tässä kohtaa E-Stop-piiri (katso aiemmat ohjeet) tulee normaalisti käyttöön. Koska en kuitenkaan halua (vielä) joutua käsittelemään Roboclawin nollaamista kehityksen aikana, eikä robotti mene niin nopeasti, ja olen läsnä valvomassa sitä ja sammuttamassa sen, en ole kytketty E-Stop.

Lopulta monisäikeinen on todennäköisesti tarpeen.

Seuraavat vaiheet…

Kiitos, että pääsit näin pitkälle.

Hankin joitain VL53L1X IR Laser ToF (lento-aika) -antureita, joten se on todennäköisesti seuraavan Instructable-aiheen ja servon aihe.

Suositeltava: