Sadržaj:

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

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

Video: Wallaceov autonomni robot - 4. dio - Dodajte IC senzore udaljenosti i
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Juli
Anonim
Image
Image
Dodaj krug podrške (MCP3008)
Dodaj krug podrške (MCP3008)

Zdravo, 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 (jedinica za mjerenje inercije) ili ToF (vrijeme leta) senzore.

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

  1. izbjegavajte prepreke
  2. prepoznati kada je negdje zaglavljen i ne napreduje. ("napredak" znači da 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 projekt je započeo kompletom robota i osnovnim pokretima za rad pomoću tastature i ssh veze.

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

U prethodnom Instructable -u dodali smo nekoliko akustičkih 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, mora da je robot nešto udario. To je dobar "plan B" ili čak C. Ali to mu zapravo ne pomaže u kretanju po blagovaonici.

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

Video za ovaj odjeljak predstavlja završnu fazu senzora za izbjegavanje prepreka.

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

Osim senzora, monitor struje je došao u igru posebno tokom vožnje unazad, 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 u posljednje vrijeme došlo do stvarnog napretka (ili je to zaglavilo u nekom ponavljajućem plesu)?"

Dakle, u videu kada vidite ponavljanje naprijed-nazad, onda se okreće, znači da je prepoznao obrazac naprijed-natrag, pa pokušava nešto drugo.

Jedini programirani cilj ove verzije softvera bio je pokušati kontinuirano napredovati i izbjegavati prepreke.

Korak 1: Dodajte potporno kolo (MCP3008)

Dodaj krug podrške (MCP3008)
Dodaj krug podrške (MCP3008)
Dodaj krug podrške (MCP3008)
Dodaj krug podrške (MCP3008)
Dodaj krug podrške (MCP3008)
Dodaj krug podrške (MCP3008)

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

Dodaćemo analogno-digitalni pretvarač MCP3008. Postoji mnogo mrežnih resursa o tome kako povezati ovaj čip s Raspberry Pi, tako da ovdje neću puno ulaziti u to.

U suštini, 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 mjenjač nivoa.

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

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

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

Korak 2: Montirajte IC 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 IC 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 zaista istraživao koje senzore trebam nabaviti. 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 izgleda da se ovi senzori zbunjuju zbog unutrašnjeg ambijentalnog osvjetljenja. Još uvijek istražujem to pitanje)

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

  1. Postavite ih u fiksni položaj, sprijeda, okrenuti blago jedan od drugog.
  2. Postavite ih na servo, sprijeda, okrenuti blago jedan od drugog.
  3. Postavite ih u fiksni položaj, sprijeda, ali u krajnje lijevi i krajnji desni ugao, pod uglom 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 se može učiniti ne samo tako da se polja senzora preklapaju, već mogu pokriti i središte i izvan vanjske širine robota.

Sa izborom #1, što su senzori udaljeniji jedan od drugog, to je mrtvija tačka u sredini.

Mogli bismo napraviti #2, (dodao sam neke slike sa servom kao mogućnost) i dati im da pregledaju, i očito ovo može pokriti većinu područja. Međutim, želim odgoditi korištenje servo -a što je duže 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. Ovi IR senzori se mogu zbuniti, ovisno o osvjetljenju. Moguće je da robot dobije očitavanje objekta 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).

Dakle, idemo na izbor mjesta 3.

Korak 3: Vrijeme je za testiranje

Image
Image

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

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

Čak i bez toga, mogli biste samo koristiti SPI ekstenziju. Ali nema potrebe. Ako pažljivo 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 nisam mogao postići da se pravilno prikaže na ovoj stranici.

Korak 4: Virtuelni 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čnih 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 nešto drugo: značajku mjerenja motornih struja Roboclawa.

Taj upit možemo prebaciti u motor-kontroler u C ++ klasu i nazvati ga AmpSensor.

Dodavanjem nekih "pametnih" softvera u softver možemo pratiti i prilagođavati tipično izvlačenje struje tokom ravnog kretanja (naprijed, nazad), kao i rotacionih pokreta (lijevo, desno). Nakon što saznamo te domete pojačala, možemo odabrati kritičnu vrijednost, tako da ako AmpSensor dobije trenutnu vrijednost očitanja od kontrolera motora koja prelazi ovu vrijednost, znamo da su motori vjerojatno stali, a to obično znači da je robot udario u nešto.

Ako softveru dodamo određenu fleksibilnost (argumenti naredbenog retka i / ili unos s tipkovnice tijekom rada), tada možemo povećati / smanjiti prag "kritičnih pojačala" dok eksperimentiramo tako da pustimo robota da se kreće i naleti na objekte, i ravno i 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 za 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 bliske udaljenosti za izbjegavanje prepreka, a ima i povratnu tehniku praćenja potrošnje struje ako senzori udaljenosti propuste prepreku.

Nema motore s enkoderima, niti IMU (inercijalnu mjernu jedinicu), pa otežava utvrđivanje da li se stvarno 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. Akustični sonar se možda neće ispravno odraziti unatrag; infracrvenu vezu može zbuniti druga rasvjeta ili čak više reflektirajućih površina. Nisam siguran da je vrijedno truda pokušati provjeriti promjenu udaljenosti kao tehniku za utvrđivanje da li se robot kreće 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 trebao bi glavni računar za razvoj (?). Ili sam se jednostavno dogodio kao 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 bolje prilagođena za izbjegavanje prepreka, a ne stvarno merenje udaljenosti.

Taj pristup se č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 koristiti je da pratimo neku vrstu praćenja koje su naredbe za kretanje izdane u posljednjih X sekundi ili naredbi.

Kao primjer recimo da je robot zaglavljen okrenut prema uglu dijagonalno. Jedan skup senzora govori mu da je preblizu jednom zidu, pa se zakreće, ali onda mu drugi skup senzora govori da je preblizu drugom zidu. Završava samo ponavljanjem uzorka bočno.

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

Na primjer, umjesto da se okreće 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 ugao, ponavljajući složeniji obrazac u osnovi iste stvari.

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

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

  • za posljednji X broj poteza, odgovaraju li Y uzorku. Jednostavan primjer mogao bi biti (i to se dogodilo) "NAPRIJED, NAPRIJED, 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 pokreta.
  • za posljednji X broj poteza postoji li općenito ili neto kretanje prema naprijed. Kako se može utvrditi šta je pravi pokret prema naprijed? Pa.. jedno jednostavno poređenje je da se za poslednjih X poteza "NAPRED" javlja više nego "Obrni". Ali to ne mora biti jedino. Šta kažete na ovo: "DESNO, DESNO, LIJEVO, DESNO". U tom slučaju, robot mora skrenuti desno kako bi izašao iz ugla ili zato što se približio zidu pod kutom, što bi se moglo smatrati stvarnim napretkom prema 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 uputstva 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 "da li smo blizu nekog objekta". Na primjer, ako možemo nabaviti 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 uglom i mogao bi pokušati manevrirati da vidi da li se te vrijednosti približavaju jedna drugoj (ravno okrenute 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 gornjem slučaju, svi akustički senzori radili su dobro zajedno i bilo je prilično jednostavno sa softverom.

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

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

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

  1. amp-sensing
  2. IC-sensing
  3. akustičko-senzorsko

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 sa upravljanjem prekidima, iako se povremeno susrećem s gubitkom kontrole između Raspberry Pi-a i Roboclaw motora-kontrolera (gubitak serijske komunikacije).

Tu bi se obično trebao koristiti krug E-Stop (vidi prethodne upute). Međutim, budući da ne želim (još) morati rješavati to da moram resetirati Roboclaw tijekom razvoja, a robot ne ide tako brzo, a ja sam prisutan da ga nadgledam i isključim, nisam povezao 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 senzore (vrijeme leta), tako da je to najvjerovatnije tema sljedećeg Instructable-a, zajedno sa servo pogonom.

Preporučuje se: