Obsah:

Autonomní robot Wallace - část 4 - Přidejte senzory IR vzdálenosti a „zesilovače“: 6 kroků
Autonomní robot Wallace - část 4 - Přidejte senzory IR vzdálenosti a „zesilovače“: 6 kroků

Video: Autonomní robot Wallace - část 4 - Přidejte senzory IR vzdálenosti a „zesilovače“: 6 kroků

Video: Autonomní robot Wallace - část 4 - Přidejte senzory IR vzdálenosti a „zesilovače“: 6 kroků
Video: skibidi toilet multiverse 013 bloopers (part 2) 2024, Červenec
Anonim
Image
Image
Přidat podpůrné obvody (MCP3008)
Přidat podpůrné obvody (MCP3008)

Dobrý den, dnes zahajujeme další fázi zlepšování Wallaceových schopností. Konkrétně se snažíme vylepšit jeho schopnost detekovat a vyhýbat se překážkám pomocí infračervených senzorů vzdálenosti a také využít možnosti ovladače motoru Roboclaw sledovat proud a přeměnit jej na virtuální (softwarový) „senzor“. Nakonec se podíváme na to, jak navigovat bez SLAM (současné umístění a mapování) (prozatím), protože robot ještě nemá senzory IMU (jednotka měření setrvačnosti) nebo ToF (doba letu).

Podle navigace to budou zpočátku jen dva hlavní cíle:

  1. vyhýbat se překážkám
  2. rozpoznat, když je někde zaseknutý, a nedělat žádný pokrok. („pokrok“znamená, zda se posunul vpřed o nějakou smysluplnou vzdálenost)
  3. možným třetím cílem by mohlo být, kdyby se pokusil zarovnat přímo ke zdi.

Tento projekt začal robotickou sadou a získáváním základních pohybů pomocí klávesnice a připojení ssh.

Druhá fáze měla přidat dostatečné podpůrné obvody pro přípravu na přidání mnoha senzorů.

V předchozím Instructable jsme přidali několik akustických senzorů HCSR04 a robot se nyní může při pohybu po bytě vyhýbat překážkám.

I když to dělá dobře v kuchyni a na chodbě s dobrými, pevnými plochými povrchy, je úplně slepý, když se blíží k jídelně. Nemůže "vidět" nohy stolu a židle.

Jedním zlepšením může být sledování typických motorových proudů, a pokud hodnoty vyskočí, pak musí robot něco zasáhnout. Je to dobrý „plán B“nebo dokonce C. Ale to mu opravdu nepomůže při navigaci po jídelně.

(Aktualizace: ve skutečnosti je prozatím monitorování proudu plán A při couvání, protože jsem dočasně odstranil a senzory zezadu).

Video pro tuto sekci představuje závěrečnou fázi senzorů vyhýbání se překážkám.

Na videu vidíte šest předních akustických senzorů HCSR04 a dva IR senzory Sharp. IR senzory se ve videu příliš nehrály. Jejich silnou stránkou je většinou to, když se robot ocitne v jídelně čelem ke stolu a nohám židle.

Kromě senzorů přišel na řadu proudový monitor zejména při couvání, pro případ, že by do něčeho narazil.

Nakonec využívá historii posledních 100 tahů a základní analýzu k zodpovězení jedné otázky:

„Došlo v poslední době ke skutečnému pokroku vpřed (nebo se to zaseklo v nějakém opakujícím se tanci)?“

Když tedy ve videu uvidíte opakování vpřed a vzad, pak se otočí, to znamená, že rozeznalo vzorec zpětného chodu vpřed, a tak zkouší něco jiného.

Jediným naprogramovaným cílem této verze softwaru bylo pokusit se neustále postupovat vpřed a snažit se vyhýbat překážkám.

Krok 1: Přidejte podpůrné obvody (MCP3008)

Přidat podpůrné obvody (MCP3008)
Přidat podpůrné obvody (MCP3008)
Přidat podpůrné obvody (MCP3008)
Přidat podpůrné obvody (MCP3008)
Přidat podpůrné obvody (MCP3008)
Přidat podpůrné obvody (MCP3008)

Než budeme moci přidat IR senzory, budeme potřebovat obvody rozhraní mezi nimi a Raspberry Pi.

Přidáme převodník analogového signálu na digitální MCP3008. Existuje mnoho online zdrojů, jak připojit tento čip k Raspberry Pi, takže se zde nebudu příliš zabývat.

V zásadě máme na výběr. Pokud verze infračervených senzorů pracuje na 3V, může fungovat i MCP3008 a my se pak můžeme přímo připojit k Raspberry.

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

V mém případě však běžím převážně 5V, takže to znamená obousměrný řadič úrovně.

[5V IR senzor]-[MCP3008]-[5V až 3V obousměrná sběrnice]-[Raspberry Pi]

Poznámka: Z infračerveného senzoru vychází pouze jeden signál. Jde přímo na jednu ze vstupních analogových signálních linek MCP3008. Z MCP3008 jsou 4 datové linky, které potřebujeme připojit (přes obousměrnou sběrnici) k Raspberry Pi.

V tuto chvíli náš robot poběží pouze se dvěma IR senzory, ale mohli bychom snadno přidat další. Osm analogových vstupních kanálů MCP3008.

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

Sharp vyrábí několik různých IR senzorů, které mají různé rozsahy a oblast pokrytí. Náhodou jsem si objednal model GP2Y0A60SZLF. Vybraný model ovlivní umístění a orientaci senzoru. Bohužel pro mě jsem ve skutečnosti nezkoumal přesně, jaké senzory získat. Šlo spíše o rozhodnutí „které z nich mohu získat za rozumnou dobu a cenu od renomovaného zdroje, z těch, které nabízejí“.

(Aktualizace: Na tom však nemusí záležet, protože se zdá, že tyto senzory jsou zmateny okolním osvětlením interiéru. Tento problém stále zkoumám)

Existují nejméně tři způsoby, jak tyto senzory na robota namontovat.

  1. Umístěte je do pevné polohy vpředu tak, aby směřovaly mírně od sebe.
  2. Umístěte je na servo vpředu, mírně od sebe.
  3. Umístěte je do pevné polohy vpředu, ale v nejvzdálenějších a nejzazších rozích, šikmo k sobě.

Při porovnávání volby č. 1 s volbou č. 3 si myslím, že č. 3 pokryje více oblasti kolize. Pokud se podíváte na obrázky, volbu č. 3 lze provést nejen tak, aby se pole senzorů překrývala, ale také mohla pokrýt střed a mimo vnější šířku robota.

Při volbě č. 1 platí, že čím více jsou senzory od sebe navzájem skloněny, tím více je slepé místo uprostřed.

Mohli bychom udělat #2, (přidal jsem nějaké obrázky se servem jako možností) a nechat je provést zatáčku a očividně to může pokrýt většinu oblasti. Chci však odložit použití serva co nejdéle, a to alespoň ze dvou důvodů:

  • Použijeme jeden z komunikačních kanálů PWM na Raspberry Pi. (Je možné to vylepšit, ale přesto …)
  • Aktuální tah se servem může být významný
  • Přidává další hardware a software

Při přidávání důležitějších senzorů, jako je Time-of-Flight (ToF) nebo třeba kamera, bych nechal možnost servo na později.

S volbou č. 2 existuje ještě jedna možná výhoda, která u ostatních dvou možností není k dispozici. V závislosti na osvětlení mohou být tyto IR senzory zmatené. Může se stát, že robot načte objekt, který je bezprostředně blízko, i když ve skutečnosti žádný blízký předmět neexistuje. S volbou č. 3, protože se jejich pole mohou překrývat, mohou oba senzory registrovat stejný objekt (z různých úhlů).

Takže jdeme s volbou umístění č. 3.

Krok 3: Čas na testování

Image
Image

Poté, co jsme vytvořili všechna spojení mezi Raspberry Pi, MCP3008 ADC a Sharp IR senzory, je čas na testování. Jednoduchý test, abyste se ujistili, že systém pracuje s novými senzory.

Stejně jako v předchozích Instructables používám co nejvíce knihovnu wiringPi C. Ulehčuje věci. Něco, co není při prohlížení webových stránek wiringPi příliš zřejmé, je, že existuje přímá podpora pro MCP3004/3008.

I bez toho byste mohli použít rozšíření SPI. Ale není třeba. Pokud se podrobně podíváte na úložiště git Gordona pro wiringPi, narazíte na seznam podporovaných čipů, z nichž jeden je pro MCP3004/3008.

Rozhodl jsem se připojit kód jako soubor, protože jsem ho nemohl správně zobrazit na této stránce.

Krok 4: Virtuální senzor - AmpSensor

Čím více různých způsobů, jak můžete nechat robota přijímat informace o vnějším světě, tím lépe.

Robot má v současné době osm senzorů akustického sonaru HCSR04 (nejsou předmětem tohoto Instructable) a nyní má dva senzory vzdálenosti Sharp IR. Jak již bylo uvedeno dříve, můžeme využít ještě něco jiného: funkci snímání motorových proudů Roboclawa.

Toto volání dotazu na řadič motoru můžeme zabalit do třídy C ++ a nazvat ho AmpSensor.

Přidáním některých „chytrostí“do softwaru můžeme sledovat a upravovat typické odebírání proudu během přímého pohybu (dopředu, dozadu) a také rotačních pohybů (vlevo, vpravo). Jakmile známe tyto rozsahy zesilovačů, můžeme vybrat kritickou hodnotu, takže pokud AmpSensor získá aktuální hodnotu z ovladače motoru, která překračuje tuto hodnotu, víme, že motory se pravděpodobně zastavily, a to obvykle znamená, že robot narazil do něčeho.

Pokud do softwaru přidáme určitou flexibilitu (argumenty příkazového řádku a / nebo vstup klávesnice během provozu), pak můžeme při experimentu zvýšit / snížit práh „kritických zesilovačů“tím, že necháme robota pohybovat se a narazit do objektů, buď přímo dovnitř, nebo při otáčení.

Protože naše navigační část softwaru zná směr pohybu, můžeme všechny tyto informace použít k zastavení pohybu a pokusit se pohyb na krátkou dobu zvrátit, než zkusíme něco jiného.

Krok 5: Navigace

V současné době má robot omezenou zpětnou vazbu v reálném světě. Má několik senzorů na krátkou vzdálenost pro vyhýbání se překážkám a má záložní techniku monitorování odběru proudu, pokud by senzory vzdálenosti minuly překážku.

Nemá motory s kodéry a nemá IMU (inerciální měřicí jednotka), takže je obtížnější zjistit, zda se skutečně pohybuje nebo otáčí a o kolik.

Zatímco pomocí senzorů, které jsou v současné době na robotu, lze získat jakýsi údaj o vzdálenosti, jejich zorné pole je široké a existuje nepředvídatelnost. Akustický sonar nemusí správně odrážet zpět; infračervené záření může být zmateno jiným osvětlením nebo dokonce více reflexními povrchy. Nejsem si jistý, zda stojí za to problém se skutečně pokusit sledovat změnu vzdálenosti jako techniku, která pozná, zda se robot pohybuje a o kolik a jakým směrem.

Záměrně jsem se rozhodl NEPOUŽÍVAT mikrořadič, jako je Arduino, protože a) nemám rád prostředí psuedo-C ++, b) a že příliš mnoho vývoje vyčerpá paměť pro čtení a zápis (?) A že by k vývoji (?) potřeboval hostitelský počítač. Nebo se možná stanu jako Raspberry Pi.

Pi s Raspbianem však není operační systém pracující v reálném čase, takže mezi nestabilitou těchto senzorů a tím, že OS nečetl přesně pokaždé, jsem cítil, že účel těchto senzorů je vhodnější pro vyhýbání se překážkám, a ne skutečné měření vzdálenosti.

Zdálo se, že tento přístup je komplikovaný a není tak výhodný, když pro tento účel můžeme použít lepší senzory ToF (doba letu) (později) (SLAM).

Jeden přístup, který můžeme použít, je udržovat nějaký druh sledování toho, jaké pohybové příkazy byly vydány během posledních X sekund nebo příkazů.

Jako příklad řekněte, že je robot zaseknutý šikmo do rohu. Jedna sada senzorů říká, že je příliš blízko jedné zdi, takže se otáčí, ale pak druhá sada senzorů říká, že je příliš blízko druhé zdi. Skončí to jen opakováním vzoru ze strany na stranu.

Výše uvedený příklad je pouze jedním velmi jednoduchým případem. Přidání některých chytrostí může jen zvýšit opakovaný vzorec na novou úroveň, ale robot zůstane zaseknutý v rohu.

Příklad, místo aby se otáčel tam a zpět na místě, otáčí se jedním směrem, dělá chvilkový zpětný chod (který pak vymaže indikace kritické vzdálenosti), a i když se otáčí v opačném směru, stále jde dopředu pod určitým úhlem zpět do rohu, opakování komplikovanějšího plácání v podstatě stejné věci.

To znamená, že bychom opravdu mohli použít historii příkazů a podívat se, jak tyto informace využít a použít.

Napadají mě dva velmi základní (rudimentární) způsoby využití historie pohybu.

  • za posledních X tahů odpovídá Y patttern. Jednoduchým příkladem může být (a to se stalo) „DOPŘEDU, ZPĚT, VPŘED, ZPĚT, …..“. Existuje tedy tato odpovídající funkce, která vrací hodnotu TRUE (vzor nalezen) nebo FALSE (nenalezen). Pokud je hodnota TRUE, v navigační části programu zkuste jiné pohybové sekvence.
  • u posledního X počtu tahů existuje obecný nebo čistý pohyb vpřed. Jak by se dalo určit, co je skutečný pohyb vpřed? No.. jedno snadné srovnání je, že u posledních X tahů se „FORWARD“vyskytuje více než „REVERSE“. To ale nemusí být jediné. Co třeba toto: „SPRÁVNĚ, SPRÁVNĚ, VLEVO, VPRAVO“. V takovém případě musí robot udělat správné zatáčky, aby se dostal z rohu, nebo protože se ke zdi přiblížil pod úhlem, což by se dalo považovat za skutečný pokrok vpřed. Na druhou stranu „LEFT, RIGHT, LEFT, RIGHT …“nemusí být považováno za skutečný pokrok vpřed. Pokud se tedy „VPRAVO“objeví více než „VLEVO“nebo „VLEVO se objeví více než„ VPRAVO “, pak by to mohl být skutečný pokrok.

Na začátku tohoto Instructable jsem zmínil, že možným 3. cílem může být zarovnání nahoru nebo zarovnání ke zdi. K tomu však potřebujeme více než „jsme blízko nějakému objektu“. Pokud například můžeme získat dva dopředu směřující akustické senzory (není předmětem tohoto článku), aby poskytovaly přiměřeně dobré a stabilní reakce týkající se vzdálenosti, zjevně pokud jeden hlásí mnohem jinou hodnotu než druhý, robot se přiblížil ke zdi pod úhlem a mohl by se pokusit o nějaké manévrování, aby zjistil, zda se tyto hodnoty k sobě přibližují (přímo ke zdi).

Krok 6: Závěrečné myšlenky, další fáze…

Doufám, že tento Instructable dal nějaké nápady.

Přidání dalších senzorů přináší některé výhody a výzvy.

Ve výše uvedeném případě všechny akustické senzory dobře spolupracovaly a se softwarem to bylo docela jednoduché.

Jakmile byly do mixu zavedeny infračervené senzory, začalo to být trochu náročnější. Důvodem je, že se některá jejich zorná pole překrývají s těmi akustickými senzory. IR senzory se zdály trochu citlivé a nepředvídatelné při měnících se podmínkách okolního světla, zatímco akustické senzory samozřejmě nejsou ovlivněny osvětlením.

A tak výzva byla v tom, co dělat, když nám akustický senzor říká, že zde není žádná překážka, ale IR senzor ano.

Prozatím po pokusu a omylu skončily věci s touto prioritou:

  1. amp-sensing
  2. IR-snímání
  3. akustické snímání

A to, co jsem udělal, bylo pouze snížit citlivost IR senzorů, aby detekovaly pouze velmi blízké předměty (například bezprostřední nohy židle)

Doposud nebylo potřeba provádět žádný vícevláknový software nebo software řízený přerušením, i když se občas setkávám se ztrátou kontroly mezi Raspberry Pi a ovladačem motoru Roboclaw (ztráta sériové komunikace).

Zde by se normálně začal používat obvod E-Stop (viz předchozí pokyny). Protože se však nechci (zatím) muset zabývat nutností resetovat Roboclaw během vývoje a robot nejde tak rychle a já jsem přítomen jej monitorovat a vypnout, neměl jsem připojeno E-Stop.

Nakonec bude s největší pravděpodobností nutné použít více vláken.

Další kroky…

Děkuji, že jste se dostali tak daleko.

Získal jsem několik IR laserových senzorů To53 (doba letu) VL53L1X, takže to je s největší pravděpodobností tématem dalšího Instructable spolu se servem.

Doporučuje: