Obsah:

Autonómny robot Wallace - časť 4 - Pridajte snímače IR vzdialenosti a „zosilňovača“: 6 krokov
Autonómny robot Wallace - časť 4 - Pridajte snímače IR vzdialenosti a „zosilňovača“: 6 krokov

Video: Autonómny robot Wallace - časť 4 - Pridajte snímače IR vzdialenosti a „zosilňovača“: 6 krokov

Video: Autonómny robot Wallace - časť 4 - Pridajte snímače IR vzdialenosti a „zosilňovača“: 6 krokov
Video: Происхождение человека: документальный фильм об эволюционном путешествии | ОДИН КУСОЧЕК 2024, November
Anonim
Image
Image
Pridať podporné obvody (MCP3008)
Pridať podporné obvody (MCP3008)

Dobrý deň, dnes začíname s ďalšou fázou zlepšovania Wallaceových schopností. Konkrétne sa pokúšame vylepšiť jeho schopnosť detekovať a vyhýbať sa prekážkam pomocou infračervených senzorov vzdialenosti a tiež využiť schopnosť ovládača motora Roboclaw monitorovať prúd a zmeniť ho na virtuálny (softvérový) „senzor“. Nakoniec sa pozrieme na to, ako navigovať bez SLAM (súčasné umiestnenie a mapovanie) (zatiaľ), pretože robot ešte nemá senzory IMU (jednotka merania zotrvačnosti) alebo ToF (čas letu).

Podľa navigácie to budú spočiatku len dva hlavné ciele:

  1. vyhýbajte sa prekážkam
  2. rozpoznať, keď je niekde zaseknutý a nerobiť žiadny pokrok. („pokrok“znamená, či sa pohlo vpred v nejakej zmysluplnej vzdialenosti)
  3. možným tretím cieľom by mohlo byť, aby sa pokúsil zarovnať kolmo na stenu.

Tento projekt začal súpravou robota a získaním základných pohybov do práce pomocou pripojenia klávesnice a ssh.

Druhá fáza mala pridať dostatočné podporné obvody na prípravu na pridanie mnohých senzorov.

V predchádzajúcom Instructable sme pridali niekoľko akustických senzorov HCSR04 a robot sa teraz dokáže vyhnúť prekážkam, keď sa pohybuje po byte.

Aj keď sa mu darí v kuchyni a na chodbe s dobrými, pevnými plochými povrchmi, pri prístupe do jedálne je úplne slepý. Nemôže "vidieť" nohy stola a stoličky.

Jedným zlepšením môže byť sledovanie typických motorických prúdov, a ak hodnoty vyskočia, potom robot určite niečo zasiahol. Je to dobrý „plán B“alebo dokonca C. Ale to mu veľmi nepomáha pri navigácii po jedálni.

(Aktualizácia: monitorovanie prúdu je zatiaľ plán A pri cúvaní, pretože som dočasne odstránil a senzory zozadu).

Video pre túto časť predstavuje poslednú fázu senzorov vyhýbania sa prekážkam.

Na videu vidíte šesť predných akustických senzorov HCSR04 a dva IR senzory Sharp. IR senzory sa vo videu príliš nehrali. Ich silnou stránkou je väčšinou situácia, keď sa robot ocitne v jedálni tvárou k nohám stola a stoličky.

Okrem senzorov prišiel na rad prúdový monitor najmä pri cúvaní, v prípade, že do niečoho narazí.

Nakoniec používa históriu posledných 100 ťahov a základnú analýzu na zodpovedanie jednej otázky:

„Došlo v poslednej dobe k skutočnému pokroku vpred (alebo je to zaseknuté v nejakom opakujúcom sa tanci)?“

Keď teda vo videu vidíte opakovaný pohyb dopredu a dozadu, potom sa otočí, znamená to, že rozpoznal vzorec dopredu a dozadu, a tak skúša niečo iné.

Jediným naprogramovaným cieľom tejto verzie softvéru bolo pokúsiť sa neustále napredovať a vyhýbať sa prekážkam.

Krok 1: Pridajte podporné obvody (MCP3008)

Pridať podporné obvody (MCP3008)
Pridať podporné obvody (MCP3008)
Pridať podporné obvody (MCP3008)
Pridať podporné obvody (MCP3008)
Pridať podporné obvody (MCP3008)
Pridať podporné obvody (MCP3008)

Predtým, ako budeme môcť pridať IR senzory, budeme potrebovať obvody rozhrania medzi nimi a Raspberry Pi.

Pridáme analógovo-digitálny prevodník MCP3008. Existuje mnoho online zdrojov, ako pripojiť tento čip k Raspberry Pi, takže sa tu veľmi nebudem zaoberať.

V zásade máme na výber. Ak verzia infračervených senzorov pracuje pri 3 V, môže aj MCP3008, a potom sa môžeme priamo pripojiť k Raspberry.

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

V mojom prípade však bežím väčšinou na 5V, to znamená, že ide o obojsmerné radenie úrovní.

[5V IR senzor]-[MCP3008]-[5V až 3V obojsmerná zbernica]-[Raspberry Pi]

Poznámka: Z infračerveného senzora je k dispozícii iba jeden výstup signálu. Ide priamo na jednu zo vstupných analógových signálových liniek MCP3008. Z MCP3008 sú 4 dátové linky, ktoré potrebujeme na pripojenie (cez obojsmernú zbernicu) k Raspberry Pi.

V súčasnej dobe bude náš robot bežať iba s dvoma IR snímačmi, ale mohli by sme pokojne pridať ďalšie. MCP3008 osem analógových vstupných kanálov.

Krok 2: Namontujte infračervené senzory

Namontujte infračervené senzory
Namontujte infračervené senzory
Namontujte infračervené senzory
Namontujte infračervené senzory
Namontujte infračervené senzory
Namontujte infračervené senzory
Namontujte infračervené senzory
Namontujte infračervené senzory

Spoločnosť Sharp vyrába niekoľko rôznych infračervených senzorov, ktoré majú rôzny rozsah a oblasť pokrytia. Náhodou som si objednal model GP2Y0A60SZLF. Zvolený model ovplyvní umiestnenie a orientáciu senzora. Nanešťastie pre mňa som skutočne neskúmal, ktoré senzory mám dostať. Išlo skôr o rozhodnutie typu „ktoré môžem získať za rozumný čas a cenu od renomovaného zdroja z tých, ktoré ponúkajú“.

(Aktualizácia: Na tom však nemusí záležať, pretože sa zdá, že tieto senzory sú zmätené vnútorným osvetlením interiéru. Tento problém stále skúmam)

Existujú najmenej tri spôsoby, ako tieto senzory namontovať na robota.

  1. Umiestnite ich do pevnej polohy vpredu tak, aby smerovali mierne od seba.
  2. Umiestnite ich na servo vpredu tak, aby smerovali mierne od seba.
  3. Umiestnite ich do pevnej polohy vpredu, ale v najvzdialenejších a najvzdialenejších rohoch naklonených k sebe.

Pri porovnávaní voľby č. 1 s voľbou č. 3 si myslím, že č. 3 pokryje väčšiu časť oblasti kolízie. Ak sa pozriete na obrázky, voľbu č. 3 je možné vykonať nielen tak, aby sa senzorové polia prekrývali, ale tiež mohli pokrývať stred a vonkajšiu šírku robota.

Pri voľbe č. 1 platí, že čím viac sú senzory od seba vzájomne šikmé, tým viac je mŕtvy uhol v strede.

Mohli by sme urobiť č. 2 ((ako možnosť som pridal niekoľko obrázkov so servom)) a nechať ich zametať, a očividne to môže pokryť väčšinu oblasti. Chcem však odložiť používanie serva čo najdlhšie, a to najmenej z dvoch dôvodov:

  • Na Raspberry Pi použijeme jeden z komunikačných kanálov PWM. (Je možné to vylepšiť, ale stále …)
  • Súčasný odber so servom môže byť významný
  • Pridáva viac k hardvéru a softvéru

Pri pridávaní dôležitejších senzorov, ako napríklad Time-of-Flight (ToF), alebo možno fotoaparátu, by som možnosť servo nechal na neskôr.

S možnosťou č. 2 existuje ešte jedna možná výhoda, ktorá pri ostatných dvoch možnostiach nie je k dispozícii. V závislosti od osvetlenia sa tieto IR senzory môžu zameniť. Je možné, že robot odčíta objekt, ktorý je bezprostredne blízko, aj keď v skutočnosti žiadny blízky predmet neexistuje. Pri možnosti č. 3, pretože ich polia sa môžu prekrývať, môžu oba senzory registrovať ten istý objekt (z rôznych uhlov).

Prejdeme teda k voľbe umiestnenia č. 3.

Krok 3: Čas na testovanie

Image
Image

Potom, čo sme urobili všetky spojenia medzi Raspberry Pi, MCP3008 ADC a Sharp IR senzormi, je čas na testovanie. Stačí jednoduchý test, aby ste sa presvedčili, že systém funguje s novými senzormi.

Rovnako ako v predchádzajúcich inštrukciách používam knižnicu wiringPi C čo najviac. Robí veci jednoduchšie. Niečo, čo nie je celkom zrejmé z kontroly webovej stránky wiringPi, je, že existuje priama podpora pre MCP3004/3008.

Aj bez toho by ste mohli používať iba rozšírenie SPI. Ale netreba. Ak sa podrobne pozriete na úložisko git Gordona pre wiringPi, narazíte na zoznam podporovaných čipov, z ktorých jeden je pre MCP3004/3008.

Rozhodol som sa pripojiť kód ako súbor, pretože sa mi nepodarilo správne ho zobraziť na tejto stránke.

Krok 4: Virtuálny senzor - AmpSensor

Čím viac rôznych spôsobov, ktorými môže robot prijímať informácie o vonkajšom svete, tým lepšie.

V súčasnosti má robot osem akustických sonarových senzorov HCSR04 (na ktoré sa tento návod nevzťahuje) a teraz má dva snímače vzdialenosti IR Sharp. Ako už bolo uvedené, môžeme využiť niečo iné: funkciu snímania motorových prúdov Roboclawa.

Toto volanie dotazu na radič motora môžeme zabaliť do triedy C ++ a nazvať ho AmpSensor.

Pridaním niektorých „múdrostí“do softvéru môžeme monitorovať a upravovať typické odbery prúdu počas priameho pohybu (dopredu, dozadu) a tiež rotačných pohybov (vľavo, vpravo). Keď poznáme tieto rozsahy zosilňovačov, môžeme vybrať kritickú hodnotu, takže ak snímač AmpSensor získa aktuálny údaj z regulátora motora, ktorý prekročí túto hodnotu, vieme, že motory sa pravdepodobne zastavili, a to zvyčajne naznačuje, že robot narazil. do niečoho.

Ak do softvéru pridáme určitú flexibilitu (argumenty príkazového riadka a / alebo vstup z klávesnice počas prevádzky), potom pri experimentovaní môžeme zvýšiť / znížiť prah „kritických zosilňovačov“tak, že necháme robota pohybovať sa a naraziť do objektov, buď priamo dovnútra, alebo počas otáčania.

Pretože naša navigačná časť softvéru pozná smer pohybu, môžeme všetky tieto informácie použiť na to, aby sme pohyb pravdepodobne zastavili a pokúsili sa ho na niekoľko krát zvrátiť, než vyskúšame niečo iné.

Krok 5: Navigácia

V súčasnosti má robot obmedzenú spätnú väzbu v reálnom svete. Má niekoľko snímačov na krátku vzdialenosť na vyhýbanie sa prekážkam a má záložnú techniku monitorovania odberu prúdu, ak snímače vzdialenosti prekážku vynechajú.

Nemá motory s kodérmi a nemá IMU (inerciálna meracia jednotka), takže je ťažšie zistiť, či sa skutočne pohybuje alebo otáča a o koľko.

Aj keď je možné pomocou senzorov, ktoré sú v súčasnosti v robote, zistiť vzdialenosť, je ich pole záberu široké a nepredvídateľné. Akustický sonar nemusí správne odrážať späť; infračervené svetlo môže byť zamieňané iným osvetlením alebo dokonca viacerými odrazovými plochami. Nie som si istý, či stojí za to problém skutočne skúsiť sledovať zmenu vzdialenosti ako techniku, ktorou zistíte, či sa robot pohybuje a o koľko a akým smerom.

Zámerne som sa rozhodol NEPOUŽÍVAŤ mikrořadič, akým je Arduino, pretože a) nepáči sa mi prostredie psuedo-C ++, b) a že prílišný vývoj vyčerpá pamäť na čítanie a zápis (?) A že by na vývoj (?) potreboval hostiteľský počítač. Alebo sa možno stanem ako Raspberry Pi.

Pi s operačným systémom Raspbian však nie je operačným systémom v reálnom čase, takže medzi nestabilitou týchto senzorov a tým, že OS nečíta vždy, som mal pocit, že účel týchto senzorov je vhodnejší na vyhýbanie sa prekážkam a nie na skutočné meranie vzdialenosti.

Tento prístup sa zdal komplikovaný a priniesol až také výhody, keď na tento účel môžeme použiť lepšie senzory ToF (doba letu) (neskôr) (SLAM).

Jeden z prístupov, ktorý môžeme použiť, je udržať si nejaký druh prehľadu o tom, aké pohybové príkazy boli vydané za posledných X sekúnd alebo príkazy.

Ako príklad uveďte, že robot je zaseknutý šikmo do rohu. Jedna sada senzorov hovorí, že je príliš blízko k jednej stene, takže sa otáča, ale potom druhá sada senzorov hovorí, že je príliš blízko k druhej stene. Nakoniec to len opakuje vzor zo strany na stranu.

Vyššie uvedený príklad je len jedným veľmi jednoduchým prípadom. Pridanie nejakej múdrosti môže len zvýšiť opakovaný vzorec na novú úroveň, ale robot zostane zaseknutý v rohu.

Príklad, namiesto toho, aby sa otáčal tam a späť na mieste, otáča sa jedným smerom, robí chvíľkový spätný chod (ktorý potom vymaže indikácie kritickej vzdialenosti), a aj keď sa otáča druhým smerom, stále ide dopredu v určitom uhle späť do rohu, opakujúce sa komplikovanejšie poklepanie v podstate o to isté.

To znamená, že by sme skutočne mohli použiť históriu príkazov a pozrieť sa na to, ako tieto informácie využiť a použiť.

Napadajú ma dva veľmi základné (rudimentárne) spôsoby použitia histórie pohybu.

  • za posledných X ťahov sa zhodujú s vzorom Y. Jednoduchým príkladom môže byť (a to sa stalo) „Vpred, vzad, vpred, vzad, …..“. Existuje teda táto zodpovedajúca funkcia, ktorá vracia hodnotu TRUE (vzor nájdený) alebo FALSE (nenájdený). Ak je to PRAVDA, v navigačnej časti programu skúste iné pohybové sekvencie.
  • pri posledných X pohyboch existuje všeobecný alebo čistý pohyb vpred. Ako by sme mohli určiť, čo je skutočný pohyb vpred? Nuž.. jedno ľahké porovnanie je, že pri posledných X ťahoch sa „VPRED“vyskytne viac ako „VZAD“. To však nemusí byť jediné. Čo takto: „SPRÁVNE, SPRÁVNE, VĽAVO, SPRÁVNE“. V takom prípade musí robot urobiť správne zákruty, aby sa dostal von z rohu, alebo pretože sa približoval k stene pod uhlom, čo by sa dalo považovať za skutočný pokrok vpred. Na druhej strane „ĽAVÁ, PRAVÁ, ĽAVÁ, PRAVÁ …“nemusí byť považovaná za skutočný pokrok vpred. Ak sa teda „PRAVÉ“vyskytne viac ako „ĽAVÉ“alebo „ĽAVÉ viac ako„ PRAVÉ “, potom by to mohol byť skutočný pokrok.

Na začiatku tohto Instructable som spomenul, že možným 3. cieľom môže byť zarovnanie nahor alebo zarovnanie so stenou. Na to však potrebujeme viac ako „sme blízko nejakému objektu“. Ak napríklad dokážeme získať dva dopredu smerované akustické senzory (nie je predmetom tohto článku), ktoré poskytujú primerane dobré a stabilné reakcie týkajúce sa vzdialenosti, samozrejme, ak jeden hlási oveľa inú hodnotu ako druhý, robot sa priblíži k stene. pod uhlom a mohol by sa pokúsiť o manévrovanie, aby zistil, či sa tieto hodnoty k sebe približujú (čelom k stene).

Krok 6: Záverečné myšlienky, ďalšia fáza…

Dúfam, že tento návod dal nejaké nápady.

Pridanie ďalších senzorov prináša určité výhody a výzvy.

Vo vyššie uvedenom prípade všetky akustické senzory dobre spolupracovali a so softvérom to bolo celkom jednoduché.

Akonáhle boli do mixu zavedené infračervené senzory, bolo to o niečo náročnejšie. Dôvodom je, že niektoré ich zorné polia sa prekrývajú s tými, ktoré majú akustické senzory. IR senzory sa zdali trochu citlivé a nepredvídateľné pri meniacich sa podmienkach okolitého osvetlenia, zatiaľ čo akustické senzory samozrejme nie sú ovplyvnené svetlom.

A tak bola výzva v tom, čo robiť, ak nám akustický senzor hovorí, že nie je žiadna prekážka, ale IR senzor áno.

Po pokusoch a omyloch zatiaľ veci skončili s touto prioritou:

  1. amp-sensing
  2. IR-snímanie
  3. akustické snímanie

A čo som urobil, bolo len znížiť citlivosť IR senzorov, aby detegovali iba veľmi blízke objekty (napríklad bezprostredné nohy stoličky)

Doteraz nebolo potrebné vykonávať žiadny viacvláknový alebo prerušovaný softvér, aj keď sa občas stretávam so stratou kontroly medzi Raspberry Pi a motorovým regulátorom Roboclaw (strata sériovej komunikácie).

Tu by sa normálne začal používať obvod E-Stop (pozri predchádzajúce pokyny). Pretože sa však nechcem (zatiaľ) zaoberať tým, že by som počas vývoja musel resetovať Roboclaw a robot nejde tak rýchlo, a ja som prítomný, aby som to monitoroval a vypínal, nebol som pripojený E-Stop.

Nakoniec bude s najväčšou pravdepodobnosťou potrebné viacvláknové vlákno.

Ďalšie kroky…

Ďakujem, že ste sa dostali až sem.

Získal som niekoľko IR laserových ToF (časov letu) VL53L1X senzorov, takže to je pravdepodobne téma nasledujúceho Instructable spolu so servom.

Odporúča: