Sadržaj:

Wallaceov autonomni robot - 4. dio - Dodajte IC udaljenost i senzore "pojačala": 6 koraka
Wallaceov autonomni robot - 4. dio - Dodajte IC udaljenost i senzore "pojačala": 6 koraka

Video: Wallaceov autonomni robot - 4. dio - Dodajte IC udaljenost i senzore "pojačala": 6 koraka

Video: Wallaceov autonomni robot - 4. dio - Dodajte IC udaljenost i senzore
Video: Luați un loc special al expresului limitat „rapi: t” de la Aeroportul Internațional Kansai 2024, Studeni
Anonim
Image
Image
Dodaj potporno kolo (MCP3008)
Dodaj potporno kolo (MCP3008)

Poštovani, danas započinjemo sljedeću fazu poboljšanja Wallaceovih sposobnosti. Konkretno, pokušavamo poboljšati njegovu sposobnost otkrivanja i izbjegavanja prepreka pomoću infracrvenih senzora udaljenosti, a također iskoristiti mogućnost kontrolera motora Roboclaw da prati struju i pretvara je u virtualni (softverski) "senzor". Na kraju ćemo pogledati kako se kretati bez SLAM -a (istovremena lokacija i mapiranje) (za sada), budući da robot još nema IMU (inercijska mjerna jedinica) ili ToF (vrijeme leta) senzore.

Navigacijom će u početku biti samo dva glavna cilja:

  1. izbjegavati prepreke
  2. prepoznati kad je negdje zaglavljen i ne napreduje. ("napredak" znači je li se pomaknuo naprijed za neku značajnu udaljenost)
  3. mogući treći cilj mogao bi biti pokušaj poravnanja ravno sa zidom.

Ovaj je projekt započeo robotskim kompletom i osnovnim pokretima za rad pomoću tipkovnice i ssh veze.

Druga faza bila je dodavanje dovoljnih potpornih krugova za pripremu za dodavanje mnogih senzora.

U prethodnom Instructableu dodali smo nekoliko akustičnih senzora HCSR04 i robot sada može izbjeći prepreke dok se kreće po stanu.

Iako se dobro snalazi u kuhinji i hodniku s dobrim, čvrstim ravnim površinama, potpuno je slijep pri prilazu blagovaonici. Ne može "vidjeti" stol i noge stolica.

Jedno poboljšanje može biti praćenje tipičnih motornih struja, a ako vrijednosti skoče, tada je robot morao nešto udariti. To je dobar "plan B" ili čak C. No, to mu zapravo ne pomaže u kretanju po blagovaonici.

(Ažuriranje: zapravo, za sada je nadzor struje plan A pri vožnji unatrag jer sam privremeno uklonio senzore i straga).

Video za ovaj odjeljak predstavlja posljednju fazu senzora za izbjegavanje prepreka.

Ono što vidite u videu je šest prednjih akustičkih senzora HCSR04 i dva Sharp IR senzora. IC senzori u videu nisu puno igrali. Njihova jača strana je uglavnom kad se robot nađe u blagovaonici okrenut prema nogama stola i stolice.

Osim senzora, monitor struje je došao u igru posebno tijekom vožnje unatrag, u slučaju da naleti na nešto.

Konačno, koristi povijest zadnjih 100 poteza i neke osnovne analize da odgovori na jedno pitanje:

"Je li nedavno došlo do stvarnog napretka (ili je to zaglavilo u nekom ponavljajućem plesu)?"

Dakle, u videozapisu kada vidite ponavljanje naprijed-natrag, pa se okrene, znači da je prepoznao obrazac naprijed-natrag, pa pokušava nešto drugo.

Jedini programirani cilj ove verzije softvera bio je pokušaj neprestanog napretka i izbjegavanje prepreka.

Korak 1: Dodajte potporno kolo (MCP3008)

Dodaj potporno kolo (MCP3008)
Dodaj potporno kolo (MCP3008)
Dodaj potporno kolo (MCP3008)
Dodaj potporno kolo (MCP3008)
Dodaj potporno kolo (MCP3008)
Dodaj potporno kolo (MCP3008)

Prije nego što možemo dodati IR senzore, trebat će nam sklop sučelja između njih i Raspberry Pi.

Dodati ćemo analogno-digitalni pretvarač MCP3008. Postoji mnogo mrežnih resursa kako spojiti ovaj čip na Raspberry Pi, pa ovdje neću puno ulaziti u to.

U osnovi, imamo izbor. Ako verzija IR senzora radi na 3 V, može raditi i MCP3008, a zatim se možemo izravno povezati s malinom.

[3V IC senzor] - [MCP3008] - [Raspberrry Pi]

U mom slučaju, međutim, radim uglavnom na 5V, pa to znači dvosmjerni pomak razine.

[5V IC senzor]-[MCP3008]-[Dvosmjerna sabirnica od 5 V do 3 V]-[Raspberry Pi]

Napomena: Iz IC senzora izlazi samo jedan signal. Odlazi izravno na jednu od ulaznih analognih signalnih linija MCP3008. S MCP3008 postoje 4 podatkovne linije koje moramo povezati (preko dvosmjerne sabirnice) na Raspberry Pi.

U ovom trenutku naš će robot raditi s samo dva IC senzora, no lako bismo mogli dodati još. MCP3008 ima osam analognih ulaznih kanala.

Korak 2: Montirajte IR senzore

Montirajte IR senzore
Montirajte IR senzore
Montirajte IR senzore
Montirajte IR senzore
Montirajte IR senzore
Montirajte IR senzore
Montirajte IR senzore
Montirajte IR senzore

Sharp proizvodi nekoliko različitih IR senzora, a oni imaju različite domete i područje pokrivanja. Slučajno sam naručio model GP2Y0A60SZLF. Model koji odaberete utjecat će na položaj i orijentaciju senzora. Na moju žalost, nisam baš istraživao koje bih senzore točno nabavio. Bila je to više odluka "koje mogu dobiti u razumno vrijeme i po cijeni od uglednog izvora, od onih koje oni nude".

(Ažuriranje: Međutim, to možda nije važno jer se čini da se ti senzori zbunjuju zbog vanjskog osvjetljenja interijera. Još uvijek istražujem taj problem)

Postoje najmanje tri načina za postavljanje ovih senzora na robota.

  1. Postavite ih u fiksni položaj, sprijeda, okrenuti malo udaljeni jedan od drugog.
  2. Postavite ih na servo, sprijeda, malo okrenuti jedan od drugog.
  3. Postavite ih u fiksni položaj, sprijeda, ali u krajnje lijevi i krajnji desni ugao, pod kutom jedan prema drugom.

U usporedbi izbora #1 s izborom #3, mislim da će #3 pokriti više područja sudara. Ako pogledate slike, izbor #3 može se učiniti ne samo tako da se polja senzora preklapaju, već također mogu pokriti središte i izvan vanjske širine robota.

S izborom #1, što su senzori udaljeniji jedan od drugog, to je slijepa točka u sredini.

Mogli bismo napraviti #2, (dodao sam neke slike sa servom kao mogućnost) i dati im da pregledaju, a očito ovo može pokriti najveće područje. Međutim, želim odgoditi uporabu servo servera što je dulje moguće, iz najmanje dva razloga:

  • Iskoristit ćemo jedan od PWM komunikacijskih kanala na Raspberry Pi. (Moguće je poboljšati ovo, ali ipak …)
  • Trenutna potrošnja sa servo pogonom može biti značajna
  • Dodaje više hardveru i softveru

Želio bih ostaviti servo opciju za kasnije pri dodavanju važnijih senzora, poput Time-of-Flight (ToF) ili možda kamere.

Postoji još jedna moguća prednost s izborom #2 koja nije dostupna s druga dva izbora. Ti se IR senzori mogu zbuniti, ovisno o osvjetljenju. Moglo bi se dogoditi da robot dobije očitavanje predmeta koji je neizmjerno blizu, a zapravo nema objekta u blizini. Uz izbor #3, budući da se njihova polja mogu preklapati, oba senzora mogu registrirati isti objekt (iz različitih kutova).

Idemo s izborom položaja #3.

Korak 3: Vrijeme je za testiranje

Image
Image

Nakon što smo uspostavili sve veze između Raspberry Pi, MCP3008 ADC -a i Sharp IR senzora, vrijeme je za testiranje. Samo jednostavan test kako biste bili sigurni da sustav radi s novim senzorima.

Kao i u prethodnim Instructablesima, koristim knjižnicu wiringPi C što je više moguće. Olakšava stvari. Nešto što nije očito iz pregleda web stranice wiringPi jest to da postoji izravna podrška za MCP3004/3008.

Čak i bez toga, mogli biste koristiti samo SPI proširenje. Ali nema potrebe. Ako pomno pogledate Gordonovo git spremište za wiringPi, naići ćete na popis podržanih čipova, od kojih je jedan za MCP3004/3008.

Odlučio sam priložiti kôd kao datoteku jer ga nisam mogao ispravno prikazati na ovoj stranici.

Korak 4: Virtualni senzor - AmpSensor

Što više različitih načina možete navesti robota da prima informacije o vanjskom svijetu, to bolje.

Robot trenutno ima osam HCSR04 akustičkih senzora sonara (oni nisu u fokusu ovog instruktora), a sada ima dva Sharp IR senzora udaljenosti. Kao što je ranije rečeno, možemo iskoristiti još nešto: značajku mjerenja struje motora u Roboclawu.

Taj poziv upita upravljačkom sklopu motora možemo umotati u klasu C ++ i nazvati ga AmpSensor.

Dodavanjem nekih "pametnih" rješenja u softver, možemo pratiti i prilagođavati tipično povlačenje struje tijekom ravnog kretanja (naprijed, natrag), kao i rotacijskih pokreta (lijevo, desno). Nakon što saznamo taj raspon pojačala, možemo odabrati kritičnu vrijednost, tako da ako AmpSensor dobije trenutnu vrijednost očitanja od upravljačkog sklopa motora koja prelazi tu vrijednost, znamo da su se motori vjerojatno zaustavili, a to obično znači da je robot udario u nešto.

Dodamo li softveru određenu fleksibilnost (argumenti naredbenog retka i / ili unos s tipkovnice tijekom rada), tada možemo povećati / smanjiti prag "kritičnih pojačala" tijekom eksperimentiranja dopuštajući robotu da se kreće i naleti na objekte, i ravno ili dok se rotira.

Budući da naš navigacijski dio softvera poznaje smjer kretanja, možemo koristiti sve te informacije da bismo možda zaustavili kretanje i pokušali preokrenuti kretanje na neko kratko vrijeme prije nego pokušamo nešto drugo.

Korak 5: Navigacija

Robot je trenutno ograničen u povratnim informacijama iz stvarnog svijeta. Ima nekoliko senzora za blisku udaljenost za izbjegavanje prepreka, a ima i povratnu tehniku praćenja potrošnje struje ako senzori udaljenosti propuste prepreku.

Nema motore s enkoderima, niti IMU (inercijalno-mjernu jedinicu), pa otežava utvrđivanje da li se doista pomiče ili rotira i za koliko.

Iako se senzorima koji se nalaze na robotu može postići neka vrsta naznake udaljenosti, njihovo vidno polje je široko i postoji nepredvidljivost. Zvučni sonar se možda neće ispravno odraziti; infracrvenu vezu može zbuniti druga rasvjeta ili čak više reflektirajućih površina. Nisam siguran da je vrijedno truda zapravo pokušati pratiti promjenu udaljenosti kao tehniku za znati kreće li se robot i koliko i u kojem smjeru.

Namjerno sam odlučio NE koristiti mikrokontroler poput Arduina jer a) ne sviđa mi se okruženje psuedo-C ++, b) i što će previše razvoja istrošiti memoriju za čitanje i pisanje (?), I trebalo bi glavno računalo za razvoj (?). Ili sam se jednostavno dogodio poput Raspberry Pi.

Pi s Raspbian-om, međutim, nije OS u stvarnom vremenu, pa sam između nestabilnosti ovih senzora i OS-a koji se nije čitao svaki put osjetio da je svrha ovih senzora prikladnija za izbjegavanje prepreka, a ne mjerenje stvarne udaljenosti.

Taj se pristup činio kompliciranim i s ne toliko koristi, kada možemo koristiti bolje ToF (vrijeme leta) senzore (kasnije) u tu svrhu (SLAM).

Jedan pristup koji možemo upotrijebiti je da pratimo neku vrstu zapisa o naredbama kretanja koje su izdane unutar zadnjih X sekundi ili naredbi.

Kao primjer recimo da je robot zaglavljen okrenut prema kutu dijagonalno. Jedan skup senzora govori mu da je preblizu jednog zida, pa se zakreće, ali onda mu drugi skup senzora govori da je preblizu drugom zidu. Završava samo ponavljanjem uzorka s jedne na drugu stranu.

Gornji primjer samo je jedan vrlo jednostavan slučaj. Dodavanje neke pameti može samo podići ponovljeni uzorak na novu razinu, ali robot ostaje zaglavljen u kutu.

Na primjer, umjesto da se rotira naprijed -natrag na mjestu, rotira se u jednom smjeru, vrši trenutni hod unatrag (koji tada briše oznake kritične udaljenosti), pa čak i ako se okreće u drugom smjeru, i dalje se kreće pod nekim kutom natrag u kut, ponavljajući složeniji obrazac u biti iste stvari.

To znači da bismo zaista mogli koristiti povijest naredbi, te pogledati kako iskoristiti i koristiti te informacije.

Mogu se sjetiti dva vrlo osnovna (rudimentarna) načina korištenja povijesti pokreta.

  • podudaraju li se za posljednji X broj poteza Y uzorak. Jednostavan primjer mogao bi biti (i to se dogodilo) "NAPRIJED, Obrni, NAPRIJED, Obrni, …..". Dakle, postoji ova funkcija podudaranja koja vraća ili TRUE (uzorak je pronađen) ili FALSE (nije pronađen). Ako je TRUE u navigacijskom dijelu programa, pokušajte s drugim nizovima kretanja.
  • za posljednji X broj poteza postoji li općenito ili neto kretanje prema naprijed. Kako se može utvrditi što je stvarno kretanje prema naprijed? Pa.. jedna laka usporedba je da se za posljednjih X poteza "NAPRIJED" javlja više od "Obrni". Ali to ne mora biti jedino. Što kažete na ovo: "DESNO, DESNO, LIJEVO, DESNO". U tom slučaju robot mora skrenuti udesno kako bi izašao iz ugla ili zato što se približio zidu pod kutom, što bi se moglo smatrati stvarnim napretkom naprijed. S druge strane, "LIJEVO, DESNO, LIJEVO, DESNO …" ne može se smatrati stvarnim napretkom naprijed. Dakle, ako se "DESNO" pojavljuje više od "LIJEVO", ili "LIJEVO se javlja više od" DESNO ", to bi mogao biti pravi napredak.

Na početku ovog Instructable -a spomenuo sam da bi mogući treći cilj mogao biti kvadratura ili poravnavanje sa zidom. Za to nam je, međutim, potrebno više od "jesmo li blizu nekog objekta". Na primjer, ako možemo dobiti dva akustična senzora okrenuta prema naprijed (što nije fokus ovog članka) da daju razumno dobre, stabilne odgovore u pogledu udaljenosti, očito ako jedan prijavljuje mnogo drugačiju vrijednost od drugog, robot se približio zidu pod kutom i mogao bi pokušati manevrirati kako bi provjerio približavaju li se te vrijednosti (ravno prema zidu).

Korak 6: Završne misli, sljedeća faza…

Nadam se da je ovaj Instructable dao neke ideje.

Dodavanje više senzora uvodi neke prednosti i izazove.

U gore navedenom slučaju, svi akustički senzori dobro su radili zajedno i bilo je prilično jednostavno sa softverom.

Nakon što su IR senzori uvedeni u mješavinu, postalo je malo izazovnije. Razlog je taj što su se neka njihova vidna polja preklapala s onima akustičkih senzora. IR senzori djelovali su pomalo osjetljivo i nepredvidivo s promjenom uvjeta ambijentalnog svjetla, dok svjetlo naravno ne utječe na akustične senzore.

I tako je izazov bio u tome što učiniti ako nam zvučni senzor govori da nema prepreka, ali IC senzor jest.

Za sada, nakon pokušaja i pogreške, stvari su završile u ovom prioritetu:

  1. pojačalo
  2. IR-sensing
  3. akustički osjetljiv

Ono što sam učinio bilo je samo smanjiti osjetljivost IC senzora, tako da bi oni otkrili samo vrlo bliske objekte (kao što su skorašnje noge stolice)

Do sada nije bilo potrebe za pravljenjem softvera s više niti ili s upravljanjem prekidima, iako se povremeno susrećem s gubitkom kontrole između Raspberry Pi-a i Roboclaw motor-kontrolera (gubitak serijske komunikacije).

Ovdje bi se obično trebao koristiti krug E-Stop (vidi prethodne upute). Međutim, budući da se ne želim (još) morati nositi s tim da moram resetirati Roboclaw tijekom razvoja, a robot ne ide tako brzo, a ja sam prisutan da ga nadgledam i isključim, nisam spojio E-Stop.

Na kraju će najvjerojatnije biti potrebno višestruko nitanje.

Sljedeći koraci…

Hvala vam što ste uspjeli dovde.

Nabavio sam neke VL53L1X IR laserske ToF (vrijeme leta) senzore, tako da je to najvjerojatnije tema sljedećeg Instructablea, zajedno sa servo pogonom.

Preporučeni: