Obsah:

Zvuková lokalizační figurína s Kinectem: 9 kroků (s obrázky)
Zvuková lokalizační figurína s Kinectem: 9 kroků (s obrázky)

Video: Zvuková lokalizační figurína s Kinectem: 9 kroků (s obrázky)

Video: Zvuková lokalizační figurína s Kinectem: 9 kroků (s obrázky)
Video: Jak funguji GSM odposlechy? Ukázka a test zvuku 2024, Červenec
Anonim
Lokalizující figurína hlavy s Kinectem
Lokalizující figurína hlavy s Kinectem

Seznamte se s Margaret, testovací figurínou pro systém sledování únavy řidiče. Nedávno odešla ze svých povinností a našla si cestu do našich kancelářských prostor a od té doby upoutala pozornost těch, kteří si myslí, že je „strašidelná“. V zájmu spravedlnosti jsem jí dal možnost čelit svým žalobcům čelem; místo aby vás zdánlivě následovala svým bezduchým pohledem, nyní to skutečně dělá. Systém využívá pole mikrofonů systému Microsoft Kinect a serva, které ji nasměrují směrem k lidem, kteří mluví v její blízkosti.

Krok 1: Teorie

Teorie
Teorie

Výpočet úhlu

Když něco slyšíme, pokud ten hluk není přímo před námi, dosáhne jednoho ucha před druhým. Náš mozek vnímá zpoždění příjezdu a převádí jej do obecného směru, ze kterého vychází hluk, což nám umožňuje najít zdroj. Přesně stejného druhu lokalizace můžeme dosáhnout pomocí dvojice mikrofonů. Zvažte znázorněné schéma, které obsahuje pár mikrofonů a zdroj zvuku. Pokud se díváme shora dolů, zvukové vlny jsou kruhové, ale pokud je vzdálenost ke zdroji velká vzhledem k rozestupu mezi mikrofony, pak je z hlediska našich senzorů vlna přibližně rovinná. Toto je známé jako předpoklad vzdáleného pole a zjednodušuje geometrii našeho problému.

Předpokládejme tedy, že vlnoplocha je přímka. Pokud zvuk vychází zprava, zasáhne mikrofon č. 2 v čase t2 a mikrofon č. 1 v čase t1. Vzdálenost d, kterou zvuk urazil mezi zasažením mikrofonu č. 2 a mikrofonu č. 1, je časový rozdíl v detekci zvuku vynásobený rychlostí zvuku v s:

d = v s *(t1-t2) = vs *Δt

Tuto vzdálenost můžeme vztáhnout ke vzdálenosti d 12 mezi párem mikrofonu a úhlem θ od páru ke zdroji zvuku se vztahem:

cos (θ) = d /d 12 = vs*Δt /d12

Protože máme pouze dva mikrofony, bude v našem výpočtu nejasnost, zda je zdroj zvuku před námi nebo za námi. V tomto systému budeme předpokládat, že zdroj zvuku je před dvojicí a upneme úhel mezi 0 stupňů (zcela napravo od páru) až 180 stupňů (zcela vlevo).

Nakonec můžeme pro theta vyřešit tím, že vezmeme inverzní kosinus:

θ = acos (vs.*Δt/d12), 0 <= θ <= π

Aby byl úhel trochu přirozenější, můžeme od theta odečíst 90 stupňů, takže 0 stupňů je přímo před dvojicí a +/- 90 stupňů je zcela vlevo nebo úplně vpravo. Tím se náš výraz změní z inverzního kosinu na inverzní sinus.

  • cos (θ-π/2) = sin (θ) = d/d12 = vs*Δt/d12
  • θ = asin (vs.*Δt/d12), -π/2 <= θ <= π/2

Hledání zpoždění

Jak vidíte z výše uvedené rovnice, vše, co musíme pro úhel vyřešit, je zpoždění zvukové vlny přicházející k mikrofonu jedna ve srovnání s mikrofonem dva; rychlost zvuku a vzdálenost mezi mikrofony jsou pevné a známé. Abychom toho dosáhli, nejprve vzorkujeme zvukové signály na frekvenci fs, převádíme je z analogových na digitální a data ukládáme pro pozdější použití. Vzorkujeme po dobu známou jako vzorkovací okno, které má dostatečně dlouhou dobu, aby zachytilo rozpoznatelné rysy naší zvukové vlny. Například naše okno může mít hodnotu zvukových dat za poslední půl sekundy.

Po získání okénkových zvukových signálů zjistíme zpoždění mezi nimi výpočtem jejich vzájemné korelace. Chcete-li vypočítat vzájemnou korelaci, držíme okénkový signál z jednoho mikrofonu pevný a posuneme druhý signál podél časové osy od celé cesty za první až po celou cestu před první. V každém kroku na našem snímku vynásobíme každý bod v našem pevném signálu jeho odpovídajícím bodem v našem posuvném signálu, poté sečteme všechny výsledky a vypočítáme náš korelační koeficient pro tento krok. Po dokončení našeho snímku krok, který má nejvyšší korelační koeficient, odpovídá bodu, kde jsou si dva signály nejpodobnější, a v jakém kroku se nacházíme, nám říká, kolik vzorků n signálu dva je posunuto od signálu 1. Pokud n je záporné, pak signál dva zaostává za signálem jeden, pokud je kladný, pak je signál dva vpředu, a pokud je nulový, pak jsou dva již zarovnány. Tento offset vzorku převedeme na časové zpoždění pomocí naší vzorkovací frekvence se vztahem Δt = n/fs, tedy:

  • θ = asin (vs*n/(d12*fs)), -π/2 <= θ <= π/2

Krok 2: Součásti

Díly

  • Microsoft Kinect pro Xbox 360, model 1414 nebo 1473. Kinect má čtyři mikrofony uspořádané v lineárním poli, které použijeme.
  • Adaptér pro převod patentovaného konektoru Kinect na napájení USB + AC, jako je tento.
  • Raspberry Pi 2 nebo 3 se systémem Raspbian Stretch. Původně jsem se snažil použít Pi 1 Model B+, ale nebyl dostatečně výkonný. Stále jsem měl problémy s odpojením od Kinectu.
  • Nejděsivější figurína, jakou můžete najít
  • Analogové servo dostatečně silné, aby otočilo vaši figurínu hlavou
  • 5V USB nástěnná nabíječka s dostatečným proudem pro napájení Pi i serva a nejméně dvou portů. (Použil jsem 5A 3portový konektor podobný tomuto
  • Prodlužovací kabel se dvěma vývody (jeden pro nástěnnou nabíječku USB a druhý pro napájecí adaptér Kinect.
  • Dva USB kabely: kabel typu A na micro USB pro napájení Pi a druhý pro napájení serva, které vám nevadí rozřezat
  • Plošina pro všechno, na co se dá sedět, a další menší plošina pro hlavu figuríny. Jako základnu jsem použil plastový servírovací tác a jako hlavní platformu plastovou desku. Oba pocházeli z Walmartu a stáli jen pár dolarů
  • 4x šrouby a matice 1/2 " #8-32 1/2" pro připevnění serva k větší platformě
  • 2x šroub M3 8 mm s podložkami (nebo jakoukoli velikost, kterou potřebujete k připevnění servo houkačky k menší plošině)
  • Dva propojovací vodiče typu male-to-male, jeden červený a jeden černý a jeden propojovací kabel female-to-male
  • Lepicí pásky se suchým zipem
  • Elektrická páska
  • Lepicí páska pro správu kabelů

Nástroje

  • Dremel s řezacím kolečkem
  • Vrtat
  • Vrtáky 7/64 ", 11/16" a 5/16"
  • Tap M3 (Volitelné, v závislosti na servo houkačce)
  • Šroubovák
  • Páječka s pájkou
  • Pomocné ruce (volitelně)
  • Popisovač
  • Kompas
  • Odstraňovače drátů
  • Multimetr (volitelný)

OOP

  • Ochranné brýle

  • Obličejová maska (pro plastové kousky dremmel).

Krok 3: Spusťte sestavu plošiny

Sestava spodní plošiny
Sestava spodní plošiny
Sestava spodní plošiny
Sestava spodní plošiny
Sestava spodní plošiny
Sestava spodní plošiny

První část, kterou uděláme, je spodní platforma, která pojme náš Kinect, servo a veškerou naši elektroniku. K vytvoření platformy budete potřebovat:

  • Servírovací podnos z plastu
  • Servo
  • 4x šrouby #8-32 1/2 "s maticemi
  • Dremel s řezacím kolečkem
  • Šroubovák
  • Vrtat
  • Vrták 11/16"
  • Popisovač

Jak udělat

  1. Otočte zásobník dnem vzhůru.
  2. Umístěte servo bokem k zadní části zásobníku, ujistěte se, že výstupní ozubené kolo serva leží podél středové osy zásobníku, poté označte kolem základny serva.
  3. Pomocí dremelu a řezacího kolečka vyřízněte označenou oblast a poté zasuňte servo do slotu.
  4. Vyznačte středy montážních otvorů skříně servopohonu na podnose, poté vyjměte servo a vyvrtejte tyto otvory pomocí vrtáku 11/16 ". Při vrtání otvorů je velmi snadné takto prasknout tenký plast, takže to považuji za mnohem bezpečnější běžet vrták obráceně a pomalu odřezávat materiál. Je to mnohem pomalejší než správné vrtání otvorů, ale zajišťuje to, že tam nejsou žádné praskliny.
  5. Vraťte servo zpět do slotu a poté jej připevněte k zásobníku pomocí šroubů a matic č. 8-32.

Krok 4: Sestava platformy plošiny

Sestava plošiny hlavy
Sestava plošiny hlavy
Sestava plošiny hlavy
Sestava plošiny hlavy
Sestava plošiny hlavy
Sestava plošiny hlavy
Sestava plošiny hlavy
Sestava plošiny hlavy

Další část, kterou uděláme, bude platforma pro připojení hlavy figuríny k servu. K vytvoření hlavní platformy budete potřebovat:

  • Plastová deska
  • Servo roh
  • 2x šroub M3 8 mm s podložkami
  • Šroubovák
  • Vrtat
  • Vrtáky 7/64 "a 5/16"
  • Kompas
  • Dremel s řezacím kolečkem

Jak udělat

  1. Nastavte kompas na poloměr základny hlavy figuríny.
  2. Pomocí kompasu označte kruh se středem na talíři. Toto bude skutečná velikost naší hlavní platformy.
  3. Pomocí dremelu a řezacího kolečka vyřízněte menší plošinu z talíře.
  4. Vyvrtejte střed nové platformy vrtákem 5/16 ". To nám umožní přístup ke šroubu, který připevňuje náš servo roh k našemu servu. Aby byla platforma při vrtání otvoru stabilní, vložil jsem cívku drát pod ním a provrtaný středem cívky.
  5. Vyrovnejte servo roh se středem plošiny a označte dva otvory pro připevnění rohu k plošině. Ujistěte se, že jsou tyto montážní otvory dostatečně daleko od sebe, aby bylo místo pro hlavy šroubů M3 a podložky.
  6. Tyto označené otvory vyvrtejte vrtákem 7/64 ".
  7. Spodní otvor mého servo rohu byl hladký, tj. Neměl závity pro šroub M3. K výrobě nití jsem tedy použil vrták a závitník M3.
  8. Pomocí šroubů a podložek připevněte servo houkačku k plošině hlavy.

Krok 5: Napájecí kabel serva

Servo napájecí kabel
Servo napájecí kabel
Servo napájecí kabel
Servo napájecí kabel
Servo napájecí kabel
Servo napájecí kabel
Servo napájecí kabel
Servo napájecí kabel

Analogová serva jsou obvykle napájena 4,8-6V. Protože Raspberry Pi již bude napájeno 5 V z USB, zjednodušíme náš systém také napájením serva z USB. K tomu budeme muset upravit kabel USB. K výrobě napájecího kabelu serva budete potřebovat:

  • Náhradní kabel USB s koncovkou typu A (typ, který se zapojuje do počítače)
  • Jeden červený a jeden černý propojovací vodič
  • Páječka
  • Pájka
  • Odstraňovače drátů
  • Elektrická páska
  • Pomocné ruce (volitelně)
  • Multimetr (volitelný)

Jak udělat

  1. Odřízněte konektor, který není typu USB, z kabelu, poté odizolujte kousek izolace a odhalte čtyři vnitřní vodiče. Odřízněte stínění obklopující odkryté vodiče.
  2. Kabel USB bude mít obvykle čtyři vodiče: dva pro přenos a příjem dat a dva pro napájení a uzemnění. Zajímá nás síla a zem, které jsou běžně červené a černé. Odizolujte část izolace z červených a černých vodičů a odstřihněte zelené a bílé dráty. Pokud se obáváte, že nemáte správné napájecí a uzemňovací vodiče, můžete zapojit kabel do napájecího adaptéru USB a zkontrolovat výstupní napětí pomocí multimetru.
  3. Dále odřízněte jeden konec červených a černých propojovacích kabelů a odstraňte část izolace.
  4. Nyní stočte odkryté černé vodiče propojky a kabelů USB. Překřižte středy odkrytých drátů a stočte je kolem sebe. Poté na pájené dráty naneste pájku, aby držely pohromadě. Pomocné ruce vám to usnadní tím, že držíte kabely na svém místě.
  5. Opakujte krok 4 pro červené vodiče.
  6. Pokud máte chuť, překryjte odkryté kabely elektrickou páskou nebo smršťovací hadičkou. Tyto spoje budou křehké, protože dráty jsou tak malé, takže na vnější izolaci kabelu USB přidejte druhou vrstvu pásky, která drží propojovací kabely. Díky tomu bude sestava pevnější a tím méně pravděpodobné, že se zlomí v důsledku ohnutí.

Krok 6: Montáž elektroniky

Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky

Nakonec vše spojíme dohromady, namontujeme naši elektroniku a vše ostatní na spodní platformu. Budete potřebovat:

  • Dolní nástupiště
  • Plošina pro hlavu
  • Hlava figuríny
  • Kinect s USB+AC adaptérem
  • USB napájecí adaptér
  • Prodlužovací kabel
  • Micro USB kabel
  • Servo napájecí kabel
  • Raspberry Pi
  • Propojovací kabel muž-žena
  • Lepicí suchý zip
  • Nůžky

Jak udělat

  1. Namontujte Pi na spodní část vaničky pomocí suchého zipu.
  2. Připojte napájecí adaptér USB suchým zipem.
  3. Připojte servo a Pi do napájecího adaptéru USB.
  4. Připojte pin 12 (GPIO18) Pi k signálnímu kabelu serva. Je to šestý kolík vpravo.
  5. Protáhněte prodlužovací kabel zadní rukojetí přihrádky a zapojte napájecí adaptér USB do jedné strany.
  6. Vezměte napájecí adaptér Kinect USB+a zapojte napájecí adaptér na druhou stranu prodlužovacího kabelu a USB do Pi.
  7. Protáhněte kabel Kinectu přední rukojetí zásobníku a zapojte jej do adaptéru Kinect.
  8. Pomocí lepicí pásky jsem držel kabely na spodní straně plošiny. To nevypadá nejelegantněji, ale naštěstí je to všechno skryté.
  9. Otočte plošinu pravou stranou nahoru a pomocí suchého zipu připevněte Kinect k přední části plošiny.
  10. Pomocí suchého zipu připevněte hlavu figuríny na platformu hlavy. Jakmile je vše seřazeno, oddělte dva kusy, abychom měli přístup k upevňovacímu šroubu servo houkačky. Ještě nezatáčejte klakson na servo, protože se musíme nejprve ujistit, že je servo ve střední poloze, abychom mohli vše seřadit. Uděláme to v pozdějším kroku.

Krok 7: Software a algoritmus

Software a algoritmus
Software a algoritmus

Přehled

Software pro tento projekt je napsán v jazyce C ++ a je integrován s Robot Operating System (ROS), což je rámec pro psaní softwaru pro robotiku. V systému ROS je software pro systém rozdělen na soubor programů nazývaných uzly, kde každý uzel implementuje konkrétní podsekci funkcí systému. Data jsou předávána mezi uzly pomocí metody publikování/odběru, kde uzly, které data vytvářejí, je publikují a uzly, které spotřebovávají data, se k nim přihlásí. Oddělování kódu tímto způsobem umožňuje snadné rozšíření funkcí systému a sdílení uzlů mezi systémy pro rychlejší vývoj.

V tomto systému se ROS primárně používá k oddělení kódu vypočítávajícího směr příchodu (DOA) zdroje zvuku od kódu ovládajícího servo, což umožňuje dalším projektům zahrnout odhad Kinect DOA bez zahrnutí servo kódu, který možná nepotřebují nebo nechtějí. Pokud se chcete podívat na samotný kód, najdete ho na GitHubu:

github.com/raikaDial/kinect_doa

Uzel Kinect DOA

Uzel kinect_doa je masem a kostmi tohoto systému a dělá v podstatě všechno zajímavé. Po spuštění inicializuje uzel ROS, což umožňuje veškeré kouzlo ROS, a poté nahraje firmware do Kinectu, aby byly k dispozici zvukové toky. Poté vytvoří nové vlákno, které otevře zvukové toky a začne číst data mikrofonu. Kinect vzorkuje své čtyři mikrofony na frekvenci 16 kHz každý, takže je dobré mít vzájemnou korelaci a sběr dat v samostatných vláknech, aby se zabránilo chybějícím datům kvůli výpočetnímu zatížení. Propojení s Kinectem se provádí pomocí libfreenect, populárního open-source ovladače.

Vlákno kolekce spouští funkci zpětného volání vždy, když jsou přijímána nová data, a ukládá data a určuje, kdy odhadnout DOA. Data z každého mikrofonu jsou uložena ve vyrovnávacích vyrovnávacích pamětech, které jsou stejně dlouhé jako naše vzorkovací okno, což je 8192 vzorků. To se promítá do výpočtu vzájemné korelace s údaji za zhruba půl sekundy, což jsem při experimentování zjistil jako dobrou rovnováhu mezi výkonem a výpočetním zatížením. Odhad DOA se spouští pro každých 4096 vzorků signalizací hlavního vlákna, takže po sobě jdoucí křížové korelace se překrývají o 50%. Zvažte případ, kdy nedochází k překrývání a vydáváte velmi rychlý zvuk, který se v okně vzorkování sníží na polovinu. Před a po vašem výrazném zvuku bude pravděpodobně bílý šum, což může být obtížné sladit s křížovou korelací. Překrývající se okna nám poskytují úplnější ukázku zvuku a zvyšují spolehlivost naší vzájemné korelace tím, že nám dávají více odlišných funkcí pro seřazení.

Hlavní vlákno čeká na signál ze sběrného vlákna a poté vypočítá odhad DOA. Nejprve však zkontroluje, zda se zachycené průběhy výrazně liší od bílého šumu. Bez této kontroly bychom počítali náš odhad čtyřikrát za sekundu bez ohledu na to, zda se ozývají zajímavé zvuky, nebo ne, a naše hlava figuríny by byla spastická kaše. Algoritmus detekce bílého šumu použitý v tomto systému je první ze dvou zde uvedených. Vypočítáme poměr absolutního integrálu derivace našeho průběhu k jeho absolutnímu integrálu; u signálů s vysokým obsahem bílého šumu je tento poměr vyšší než u méně hlučných signálů. Nastavením prahové hodnoty pro tento poměr oddělující hluk od nešumu můžeme spustit vzájemnou korelaci pouze v případě potřeby. Tento poměr je samozřejmě něco, co je třeba znovu vyladit při každém přesunu systému do nového prostředí.

Jakmile program určí, že průběhy obsahují významný nehlučný obsah, program pokračuje v křížových korelacích. Tyto výpočty však obsahují tři důležité optimalizace:

  1. Na Kinectu jsou čtyři mikrofony, což znamená, že existuje celkem šest párů průběhů, které můžeme vzájemně korelovat. Pokud se však podíváte na prostorové uspořádání mikrofonního pole, můžete vidět, že mikrofony 2, 3 a 4 jsou velmi blízko sebe. Ve skutečnosti jsou tak blízko, že vzhledem k rychlosti zvuku a naší vzorkovací frekvenci budou křivky přijaté na 2, 3 a 4 odděleny nejvýše jedním vzorkem dopředu nebo dozadu, což můžeme ověřit výpočtem maxlag = Δd *fs/vs, kde Δd je oddělení páru mikrofonu, fs je vzorkovací frekvence a vs je rychlost zvuku. Korelace párů mezi těmito třemi je tedy zbytečná a stačí pouze křížově korelovat mikrofon 1 s 2, 3 a 4.
  2. Je známo, že standardní křížová korelace zvukových signálů funguje špatně za přítomnosti dozvuků (echos). Robustní alternativa je známá jako generalizovaná křížová korelace s fázovou transformací (GCC-PHAT). Tato metoda se scvrkává na použití funkce vážení, která zesiluje vrcholy v křížové korelaci, což usnadňuje rozlišení původního signálu od echa. Porovnal jsem výkon GCC-PHAT s jednoduchou křížovou korelací v dozvukové komoře (čti: betonová koupelna se přestavuje) a zjistil jsem, že GCC-PHAT je 7krát účinnější při odhadu správného úhlu.
  3. Při provádění křížové korelace přijímáme dva signály, klouzáme jeden po druhém a v každém kroku vynásobíme každý bod v našem pevném signálu každým bodem v našem posuvném signálu. Pro dva signály o délce n to má za následek n^2 výpočtů. Mohli bychom to zlepšit tím, že místo toho provedeme křížovou korelaci ve frekvenční oblasti, která zahrnuje rychlou Fourierovu transformaci (výpočty nlogn), vynásobení každého bodu v jednom transformovaném signálu odpovídajícím bodem ve druhém (n výpočtů), poté provedení inverzní Fourierova transformace pro návrat do časové oblasti (výpočty nlogn), což má za následek n+2*nlogn výpočtů, méně než n^2. To je však naivní přístup. Mikrofony v našem poli jsou tak blízko sebe a rychlost zvuku je tak relativně pomalá, že zvukové vlny již budou většinou zarovnány. Můžeme tedy okénkovat naši vzájemnou korelaci, abychom zvážili pouze offsety, které jsou mírně vpředu nebo vzadu. U mikrofonů 1 a 4 musí zpoždění klesnout mezi +/- 12 vzorků, což znamená, že pro každou křížovou korelaci stačí provést 24*n výpočtů, což má za následek výpočetní úspory, pokud jsou naše křivky delší než 2900 vzorků.

Tento systém využívá knihovnu minidsp, která implementuje algoritmus GCC-PHAT s optimalizací 3.

Jakmile zjistí zpoždění v signálech z každého páru mikrofonů, program zvolí střední hodnotu zpoždění, použije ji k výpočtu odhadovaného úhlu a zveřejní výsledek, aby jej bylo možné použít k ovládání serva.

Servo Control Node

Ve srovnání s uzlem kinect_doa je servo uzel relativně jednoduchý. Jeho úkolem je pouze vzít odhadovanou DOA a přesunout servo do tohoto úhlu. K přístupu k hardwarovému PWM modulu Raspberry Pi používá knihovnu wiringPi, pomocí které nastavuje úhel serva. Většina analogových serva je ovládána signálem PWM s šířkou impulsu v rozsahu od 1000 µs do 2000 µs, což odpovídá úhlu 0 ° až 180 °, ale mnou používané servo bylo ovládáno pomocí 500 µs až 2500 µs, což odpovídá úhlu od 0 ° do 270 °. Uzel je tedy konfigurovatelný pro různý hardware serva nastavením parametrů pro minimální šířku impulsu, maximální šířku impulzu a rozdíl mezi maximálním a minimálním úhlem. Servo se navíc okamžitě nepřesune do cílového úhlu, ale pohybuje se směrem k úhlu konfigurovatelnou rychlostí, což dává Margaret pozvolnější, strašidelnější atmosféru (navíc zvuk rychle se pohybujícího serva tam a zpět začne být nepříjemný opravdu rychle).

Krok 8: Sestavení a instalace

Nainstalovat závislosti:

Nejprve nainstalujte libfreenect. Musíme jej vytvořit ze zdroje, protože verze, kterou můžete získat pomocí správce balíčků, neobsahuje podporu zvuku. Důvodem je, že musíme do Kinectu nahrát firmware, abychom povolili zvuk, a redistribuce tohoto firmwaru není v určitých jurisdikcích legální. Kromě toho se můžeme vyhnout vytváření příkladů, které vyžadují OpenGL a glut, zbytečné pro bezhlavé instalace Raspbian.

sudo apt-get install git cmake build-essential libusb-1.0-0-dev

cd git clone https://github.com/OpenKinect/libfreenect cd libfreenect mkdir build cd build cmake.. -DCMAKE_BUILD_REDIST_PACKAGE = OFF -DCMAKE_BUILD_EXAMPLES = OFF make sudo make install sudo cp ~/libfreenect/platform/.rules /etc/udev/rules.d ovládání udevadm-pravidla načítání & udevadm spoušť

Dále musíme nainstalovat balíček wiringPi, který nám umožňuje ovládat GPIO piny Pi:

CD

git clone git: //git.drogon.net/wiringPi cd ~/wiringPi./build

Připojte hlavu figuríny:

S nainstalovaným wiringPi se nyní můžeme vydat rychlou objížďkou zpět na hardwarovou půdu a připevnit figurínovou hlavu na spodní plošinu. Chcete -li vycentrovat servo pomocí příkazového řádku, zadejte následující příkazy:

gpio pwm-ms

gpio pwmc 192 gpio pwmr 2000 gpio -g pwm 18 150

Pokud nedojde k žádnému pohybu, je vaše servo pravděpodobně již vycentrováno. Pro jistotu však můžete nastavit servo na nestředovou hodnotu, např. gpio -g pwm 18 200, poté jej nastavte zpět na 150.

Jakmile jste si jisti, že je servo vycentrované, připevněte servo roh plošiny hlavy k servu tak, aby se vaše hlava figuríny dívala přímo dopředu. Poté přišroubujte klakson na servo a připevněte hlavu pomocí suchých zipů.

Nainstalujte ROS:

Dále nainstalujte ROS na svůj Pi. Skvělý průvodce instalací najdete zde; pro náš systém OpenCV nepotřebujeme, takže krok 3. můžete přeskočit. Dokončení tohoto sestavení bude trvat několik hodin. Až budete hotovi podle průvodce instalací, přidejte zdroj instalace do vašeho bashrc, abychom mohli používat naše nově nainstalované balíčky ROS:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

Sestavte balíček Kinect DOA:

Poté, co je vše hotovo, vytvořte pro náš projekt pracovní prostor Catkin a zadejte adresář src:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Kód pro tento projekt je obsažen v balíčku kinect_doa, proto jej naklonujte do adresáře src vašeho nového pracovního prostoru:

klon git

Balíček robot_upstart poskytuje snadno použitelný nástroj pro instalaci spouštěcích souborů tak, aby běžely při spuštění, takže je také klonujte do svého pracovního prostoru:

klon git

Nyní můžeme sestavit kód projektu voláním catkin_make z adresáře nejvyšší úrovně našeho pracovního prostoru, poté zdrojovou verzi sestavení, aby byly k dispozici naše balíčky:

cd ~/kinect_doa_ws

catkin_make echo "source /home/pi/kinect_doa_ws/devel/setup.bash" >> ~/.bashrc

Běh a ladění:

Za předpokladu, že je vše zapojeno a zapnuto, nyní byste měli být schopni spustit systém a nechat Kinect sledovat váš hlas! Pokud však máte Kinect 1473, nejprve otevřete soubor ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch v textovém editoru a nastavte parametr using_kinect_1473 na true. Navíc, pokud jste použili jiné servo než já, je to pravděpodobně standardní analogové servo, takže v spouštěcím souboru změňte parametr min_us na 1000, max_us na 2000 a max_deg na 180.

roslaunch kinect_doa kinect_doa.launch

Hrajte si s tím chvíli. Pokud máte pocit, že je systém příliš citlivý (díváte se v náhodných směrech, které neodpovídají hlasům nebo výrazným zvukům), zkuste změnit parametr white_noise_ratio ve spouštěcím souboru a znovu spusťte systém, dokud nebude odezva na úrovni, která vám vyhovuje. Zvýšení poměru způsobí, že systém bude méně reagovat a naopak. Toto ladění budete pravděpodobně muset provést vždy, když přesunete systém na jiné místo, abyste získali požadovaný výkon.

Ke spuštění programu, když zapneme Pi, použijeme balíček robot_upstart k instalaci našeho spouštěcího souboru. Pokud ROS aktuálně neběží, spusťte jej příkazem roscore. Poté otevřete nový terminál a nainstalujte spuštění pomocí:

rosrun robot_upstart nainstalovat kinect_doa/launch/kinect_doa.launch --user root --symlink

Místo kopírování vytvoříme symbolický odkaz na spouštěcí soubor, abychom mohli změnit parametry úpravou ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch.

Krok 9: Skrytí v kanceláři

Skrytí v kanceláři
Skrytí v kanceláři

Nyní k zábavné části. Vydejte se po hodinách do práce a postavte figurínu v tajnosti. Pak si jen sedněte a sledujte, jak dlouho trvá, než se vaši spolupracovníci chytí! Vaše nová tvorba zaručeně otočí několik hlav …

Doporučuje: