Sisukord:

Wallace'i autonoomne robot - 4. osa - lisage IR -kauguse ja võimendi andurid: 6 sammu
Wallace'i autonoomne robot - 4. osa - lisage IR -kauguse ja võimendi andurid: 6 sammu

Video: Wallace'i autonoomne robot - 4. osa - lisage IR -kauguse ja võimendi andurid: 6 sammu

Video: Wallace'i autonoomne robot - 4. osa - lisage IR -kauguse ja võimendi andurid: 6 sammu
Video: FALLOUT SHELTER APOCALYPSE PREPARATION 2024, Juuli
Anonim
Image
Image
Lisage toiteahel (MCP3008)
Lisage toiteahel (MCP3008)

Tere, täna alustame Wallace'i võimete täiustamise järgmist etappi. Täpsemalt proovime parandada infrapunakaugusandurite abil selle takistuste avastamise ja vältimise võimet ning kasutada ära ka Roboclawi mootorikontrolleri võimet jälgida voolu ja muuta see virtuaalseks (tarkvara) anduriks. Lõpuks vaatame, kuidas navigeerida ilma SLAMita (samaaegne asukoht ja kaardistamine) (praegu), kuna robotil pole veel IMU (inertsmõõteseade) ega ToF (lennu aeg) andureid.

Navigeerimise abil on esialgu vaid kaks peamist eesmärki:

  1. vältida takistusi
  2. ära tunda, kui see on kuhugi kinni jäänud ja ei tee edusamme. ("edusamm" tähendab, kas see liikus edasi mingisuguse tähendusliku vahemaa)
  3. võimalik kolmas eesmärk võiks olla see, et ta prooviks joonduda otse seina külge.

See projekt algas robotikomplektiga ja põhiliigutuste tööle panemisega, kasutades klaviatuuri ja ssh -ühendust.

Teine etapp oli lisada piisav tugiahel, et valmistada ette paljude andurite lisamine.

Eelmises Instructable'is lisasime mitu HCSR04 akustilist andurit ja robot saab nüüd korteris ringi liikudes takistusi vältida.

Kuigi see toimib hästi köögis ja esikus, millel on head ja kindlad lamedad pinnad, on see söögituppa lähenedes täiesti pime. See ei näe laua ja tooli jalgu.

Üks parandus võib olla tüüpiliste mootorivoolude jälgimine ja kui väärtused hüppavad, peab robot olema midagi tabanud. See on hea "plaan B" või isegi C. Kuid see ei aita tal tegelikult söögikohas ringi liikuda.

(Värskendus: tegelikult on praegu voolu jälgimine plaan A tagurdamisel, kuna olen ajutiselt eemaldanud ja andurid tagant).

Selle jaotise video on takistuste vältimise andurite viimane etapp.

Videost näete kuut eesmist HCSR04 akustilist andurit ja kahte Sharp IR -andurit. Infrapunaandurid ei tulnud videos eriti mängu. Nende tugevus on enamasti siis, kui robot satub söögilauale laua ja tooli jalgade poole.

Lisaks anduritele tuli voolumõõtja mängu eriti tagurdamise ajal, juhuks, kui see millegagi kokku puutub.

Lõpuks kasutab see ühele küsimusele vastamiseks viimase 100 käigu ajalugu ja mõningaid põhianalüüse:

"Kas viimasel ajal on toimunud tõeline edasiminek (või on see takerdunud mõnda korduvatesse tantsudesse)?"

Nii et kui videos näete korduvat edasi-tagasi liikumist, siis see pöörleb, tähendab see, et see tundis edasi-tagasi mustri ära ja proovib seega midagi muud.

Selle tarkvaraversiooni ainus programmeeritud eesmärk oli püüda pidevalt edasi liikuda ja vältida takistusi.

1. toiming: lisage toiteskeem (MCP3008)

Lisage toiteahel (MCP3008)
Lisage toiteahel (MCP3008)
Lisage toiteahel (MCP3008)
Lisage toiteahel (MCP3008)
Lisage toiteahel (MCP3008)
Lisage toiteahel (MCP3008)

Enne IR -andurite lisamist vajame nende ja Raspberry Pi vahelist liidesahelat.

Lisame MCP3008 analoog-digitaalmuunduri. Selle kiibi ühendamiseks Raspberry Pi -ga on palju online -ressursse, nii et ma ei hakka siinkohal eriti süvenema.

Põhimõtteliselt on meil valik. Kui IR -andurite versioon töötab 3 V pingel, saab seda teha ka MCP3008 ja saame siis otse Vaarikaga ühenduse luua.

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

Minu puhul töötan aga enamasti 5V, seega tähendab see kahesuunalist nihku.

[5V IR-andur]-[MCP3008]-[5V-3V kahesuunaline buss]-[Raspberry Pi]

Märkus: IR -andurist väljastatakse ainult üks signaal. See läheb otse ühele MCP3008 analoogsignaali sisendliinile. MCP3008-st on 4 andmeliini, mille peame ühendama (kahesuunalise bussi kaudu) Raspberry Pi-ga.

Praegu hakkab meie robot töötama ainult kahe IR -anduri abil, kuid me võiksime neid hõlpsalt lisada. MCP3008 kaheksa analoogsisendikanalit.

Samm: paigaldage IR -andurid

Paigaldage IR -andurid
Paigaldage IR -andurid
Paigaldage IR -andurid
Paigaldage IR -andurid
Paigaldage IR -andurid
Paigaldage IR -andurid
Paigaldage IR -andurid
Paigaldage IR -andurid

Sharp toodab mitmeid erinevaid IR -andureid ning nende ulatus ja leviala on erinevad. Juhuslikult tellisin GP2Y0A60SZLF mudeli. Valitud mudel mõjutab anduri paigutust ja suunda. Minu kahjuks ei uurinud ma täpselt, milliseid andureid hankida. See oli pigem "milliseid ma saan mõistliku aja ja hinnaga hea mainega allikast nende pakutavate hulgast" otsus.

(Värskendus: see ei pruugi siiski olla oluline, kuna need andurid tunduvad olevat segaduses siseruumide valgustusega. Ma uurin seda probleemi endiselt)

Neid andureid saab robotile paigaldada vähemalt kolmel viisil.

  1. Asetage need fikseeritud asendisse, ees, veidi üksteisest eemale.
  2. Asetage need servole, ees, veidi üksteisest eemale.
  3. Asetage need fikseeritud asendisse, ees, kuid kõige vasakpoolsemates ja parempoolsetes nurkades, üksteise suhtes nurga all.

Valiku nr 1 ja valiku nr 3 võrdlemisel arvan, et number 3 hõlmab rohkem kokkupõrkeala. Kui vaatate pilte, saab valikut nr 3 teha mitte ainult nii, et anduriväljad kattuksid, vaid ka need, mis katavad roboti keskosa ja väljaspool seda.

Valiku nr 1 puhul, mida kaugemal on andurid üksteisest nurga all, seda rohkem on pimeala keskel.

Võiksime teha numbri 2 (lisasin võimalusel mõned pildid, millel on servo) ja lasta neil teha pühkimine ning ilmselt võib see katta kõige suurema osa. Siiski soovin servo kasutamist võimalikult kaua edasi lükata vähemalt kahel põhjusel:

  • Kasutame ära ühe Raspberry Pi PWM -i suhtluskanalitest. (Seda on võimalik täiustada, kuid siiski …)
  • Servo praegune tõmbamine võib olla märkimisväärne
  • See lisab riist- ja tarkvarale rohkem

Soovin jätta servovõimaluse hilisemaks, kui lisate olulisemaid andureid, näiteks lennuaeg (ToF) või võib-olla kaamera.

Valikul nr 2 on veel üks võimalik eelis, mis pole kahe ülejäänud valiku puhul saadaval. Need IR -andurid võivad sõltuvalt valgustusest segadusse minna. Võib juhtuda, et robot saab lugeda objekti, mis on vahetult lähedal, kuigi tegelikult pole läheduses olevat objekti. Valikuga nr 3, kuna nende väljad võivad kattuda, võivad mõlemad andurid registreerida sama objekti (erinevate nurkade alt).

Seega jätkame paigutuse valikuga nr 3.

Samm: aeg testimiseks

Image
Image

Kui oleme teinud kõik ühendused Raspberry Pi, MCP3008 ADC ja Sharp IR andurite vahel, on aeg katsetada. Lihtsalt lihtne test veendumaks, et süsteem töötab uute anduritega.

Nagu eelmistes juhistes, kasutan nii palju kui võimalik wiringPi C raamatukogu. Teeb asja lihtsamaks. Midagi, mis pole wiringPi veebisaidi ülevaatamisel väga ilmne, on see, et MCP3004/3008 on otseselt toetatud.

Isegi ilma selleta saate lihtsalt kasutada SPI laiendust. Aga pole vaja. Kui vaatate tähelepanelikult Gordoni git -i hoidla wiringPi, näete toetatud kiipide loendit, millest üks on mõeldud MCP3004/3008 jaoks.

Otsustasin koodi failina manustada, kuna mul ei õnnestunud seda sellel lehel õigesti kuvada.

Samm: virtuaalne andur - AmpSensor

Mida rohkem erinevaid viise saate lasta robotil saada teavet välismaailma kohta, seda parem.

Robotil on praegu kaheksa HCSR04 akustilist sonari andurit (need ei ole selle juhendi fookuses) ja nüüd on sellel kaks Sharp IR kaugusandurit. Nagu varem öeldud, saame ära kasutada midagi muud: Roboclawi mootorivoolude tuvastamise funktsiooni.

Võime selle päringukõne mootorikontrollerile mässida C ++ klassi ja nimetada selle AmpSensoriks.

Lisades tarkvarale "nutikaid", saame jälgida ja reguleerida tüüpilist voolutõmmet sirge liikumise ajal (edasi, tagasi) ja ka pöörlemisliigutusi (vasakule, paremale). Kui oleme võimendite vahemikud teada saanud, saame valida kriitilise väärtuse, nii et kui AmpSensor saab mootorikontrollerilt praeguse väärtuse, mis ületab selle väärtuse, teame, et mootorid on tõenäoliselt seiskunud ja see näitab tavaliselt, et robot on põrganud millessegi.

Kui lisame tarkvarale paindlikkuse (käsurea nooled ja / või klaviatuuri sisestamine töötamise ajal), siis saame katsetamise ajal kriitiliste võimendite künnist tõsta / vähendada, lastes robotil lihtsalt liikuda ja objektidega kokku puutuda, nii otse sisse kui ka pöörlemise ajal.

Kuna meie tarkvara navigeerimisosa teab liikumissuunda, saame kogu selle teabe abil liikumise peatada ja proovida mõnda aega tagasi pöörata, enne kui proovime midagi muud.

5. samm: navigeerimine

Praegu on robotil piiratud tagasiside. Sellel on takistuste vältimiseks mõned lähiandurid ja sellel on varutehnika voolutõmbe jälgimiseks, kui kaugusandurid takistavad.

Sellel ei ole kodeerijaga mootoreid ega IMU-d (inertsiaalne mõõtühik), mistõttu on raskem teada saada, kas see tõesti liigub või pöörleb ja kui palju.

Kuigi praegu robotil olevate anduritega saab mingisuguse kauguse näidu, on nende vaateväli lai ja ettearvamatu. Akustiline sonar ei pruugi õigesti tagasi peegelduda; infrapuna võib segi ajada muu valgustus või isegi mitu peegeldavat pinda. Ma ei ole kindel, et tasub vaeva näha, et tegelikult proovida kauguse muutumist tehnikana jälgida, et teada saada, kas robot liigub ning kui palju ja mis suunas.

Otsustasin tahtlikult mitte kasutada mikrokontrollerit, näiteks Arduino, sest a) mulle ei meeldi see psuedo-C ++ keskkond, b) ja et liiga palju arendamist kulub lugemis-kirjutusmälu (?) Ja et ma vajaks arendamiseks hostarvutit (?). Või äkki ma lihtsalt juhtun nagu Raspberry Pi.

Raspbiani käivitav Pi pole aga reaalajas operatsioonisüsteem, nii et nende andurite ebastabiilsuse ja operatsioonisüsteemi mitte iga kord täpselt lugemise vahel tundsin, et nende andurite eesmärk sobib paremini takistuste vältimiseks ja mitte tegelik kauguse mõõtmine.

See lähenemine tundus keeruline ja sellest polnud palju kasu, kui saame selleks (hiljem) kasutada paremaid ToF (lennuaja) andureid (SLAM).

Üks lähenemisviis, mida saame kasutada, on jälgida mingisugust jälgimist, millised liikumiskäsklused on antud viimase X sekundi jooksul või käske.

Näitena öelge, et robot on diagonaalis nurga poole kinni jäänud. Üks andurite komplekt ütleb, et see on ühele seinale liiga lähedal, nii et see pöördub, kuid siis teine andurite komplekt ütleb, et see on teisele seinale liiga lähedal. Lõppkokkuvõttes kordab see lihtsalt kõrvuti mustrit.

Ülaltoodud näide on vaid üks väga lihtne juhtum. Mõne nutikuse lisamine võib lihtsalt korduva mustri uuele tasemele tõsta, kuid robot jääb nurka kinni.

Näide, selle asemel, et oma kohale edasi -tagasi pöörata, pöörleb see ühtepidi, teeb hetkelise tagasikäigu (mis kustutab seejärel kriitilise kauguse näidud) ja isegi kui see pöörleb teises suunas, liigub see siiski teatud nurga all tagasi nurka, kordades sisuliselt sama asja keerulisemat paugutamist.

See tähendab, et me võiksime tõesti kasutada käskude ajalugu ja vaadata, kuidas seda teavet kasutada ja kasutada.

Ma võin välja mõelda kaks väga lihtsat (algelist) liikumisajaloo kasutamise viisi.

  • kas viimase X käigu arvu puhul sobivad need Y mustriga. Lihtne näide võib olla (ja see juhtuski) "EDASI, TAGASI, ETTE, TAGASI, …..". Seega on see sobitamise funktsioon, mis tagastab kas tõese (muster leitud) või vale (ei leitud). Kui TRUE, proovige programmi navigeerimisosas muid liikumisjärjestusi.
  • kas viimase X käigu arvu puhul on tegemist üld- või võrguliigutusega edasi. Kuidas saaks kindlaks teha, mis on tõeline edasiliikumine? Noh.. üks lihtne võrdlus on see, et viimaste X käikude puhul esineb "FORWARD" rohkem kui "REVERSE". Kuid see ei pea olema ainus. Kuidas oleks sellega: "ÕIGE, PAREM, VASAK, ÕIGE". Sel juhul peab robot nurgast väljumiseks sooritama parempöördeid või kuna see lähenes seinale viltu, mida võib pidada tõeliseks edasiminekuks. Teisest küljest ei pruugi "VASAK, PAREM, VASAK, PAREM…" pidada tõeliseks edasiminekuks. Seega, kui "ÕIGE" esineb rohkem kui "VASAK" või "VASAK esineb rohkem kui" ÕIGE ", võib see olla tõeline edasiminek.

Selle juhendi alguses mainisin, et võimalik kolmas eesmärk võib olla ruudu tõstmine või seina joondamine. Selleks vajame aga enamat kui "kas me oleme mõne objekti lähedal". Näiteks kui saame kaks ettepoole suunatud akustilist andurit (mitte selle artikli fookus), et anda suhteliselt häid ja stabiilseid vastuseid kaugusele, siis ilmselgelt, kui üks teatab teisest palju erinevat väärtust, on robot seinale lähenenud nurga all ja võiks proovida manööverdada, et näha, kas need väärtused lähenevad üksteisele (näoga otse seina poole).

6. samm: lõplikud mõtted, järgmine etapp…

Loodetavasti andis see juhendatav ideid.

Rohkemate andurite lisamine toob kaasa mõningaid eeliseid ja väljakutseid.

Ülaltoodud juhul töötasid kõik akustilised andurid hästi koos ja tarkvaraga oli see üsna lihtne.

Kui IR -andurid segule lisati, muutus see natuke keerukamaks. Põhjus on selles, et mõned nende vaateväljad kattuvad akustiliste anduritega. IR-andurid tundusid muutuvate ümbritseva valguse tingimuste korral pisut tundlikud ja ettearvamatud, samas kui valgustus akustilisi andureid loomulikult ei mõjuta.

Ja seega oli väljakutse selles, mida teha, kui akustiline andur ütleb meile, et takistusi pole, kuid IR -andur on.

Praegu, pärast katse-eksituse meetodit, jõudsid asjad selle prioriteedini:

  1. võimendi tundmine
  2. IR-andur
  3. akustiline

Ja mida ma tegin, oli lihtsalt IR -andurite tundlikkuse vähendamine, nii et need tuvastaksid ainult väga lähedasi objekte (näiteks peatsed tooli jalad)

Siiani pole olnud vajadust teha mitut lõimingut või katkestusega juhitavat tarkvara, kuigi aeg-ajalt puutun kokku Raspberry Pi ja Roboclaw mootorikontrolleri vahelise kontrolli kaotamisega (jadaühenduse kaotus).

Siin tuleks tavaliselt kasutusele E-Stop vooluring (vt eelmisi juhiseid). Kuna ma aga ei taha (veel) tegeleda arendamisega Roboclawi lähtestamisega ja robot ei lähe nii kiiresti ning ma olen kohal, et seda jälgida ja välja lülitada, ühendas E-Stoppi.

Lõppkokkuvõttes on suure tõenäosusega vaja mitut niiti.

Järgmised sammud…

Aitäh, et nii kaugele jõudsite.

Sain mõned VL53L1X IR laser ToF (lennuaeg) andurid, nii et see on tõenäoliselt järgmise Instructable'i teema koos servoga.

Soovitan: