Obsah:

Zvuková lokalizačná figurína s Kinectom: 9 krokov (s obrázkami)
Zvuková lokalizačná figurína s Kinectom: 9 krokov (s obrázkami)

Video: Zvuková lokalizačná figurína s Kinectom: 9 krokov (s obrázkami)

Video: Zvuková lokalizačná figurína s Kinectom: 9 krokov (s obrázkami)
Video: Leap Motion SDK 2024, Júl
Anonim
Zvuková lokalizačná figurína s Kinectom
Zvuková lokalizačná figurína s Kinectom

Zoznámte sa s Margaret, testovacou figurínou systému monitorovania únavy vodiča. Nedávno odišla zo svojich povinností a našla si cestu do našich kancelárskych priestorov. Odvtedy upozornila tých, ktorí si myslia, že je „strašidelná“. V záujme spravodlivosti som jej dal možnosť postaviť sa svojim žalobcom čelne; namiesto toho, aby vás zdanlivo sledovala bezduchým pohľadom, teraz to skutočne robí. Systém používa sústavu mikrofónov systému Microsoft Kinect a servo, ktoré ju nasmerujú na ľudí, ktorí hovoria blízko nej.

Krok 1: Teória

Teória
Teória

Výpočet uhla

Keď niečo počujeme, pokiaľ ten hluk nie je priamo pred nami, dosahuje jedno ucho pred druhým. Náš mozog vníma oneskorenie príchodu a prevádza ho na všeobecný smer, z ktorého vychádza hluk, čo nám umožňuje nájsť zdroj. Presne rovnaký druh lokalizácie môžeme dosiahnuť pomocou dvojice mikrofónov. Vezmite do úvahy zobrazený diagram, ktorý obsahuje pár mikrofónov a zdroj zvuku. Ak sa pozeráme zhora nadol, zvukové vlny sú kruhové, ale ak je vzdialenosť k zdroju veľká vzhľadom na vzdialenosť medzi mikrofónmi, potom je vlna z pohľadu našich senzorov približne rovinná. Toto je známe ako predpoklad vzdialeného poľa a zjednodušuje geometriu nášho problému.

Predpokladajme teda, že čelo vlny je rovná čiara. Ak zvuk vychádza sprava, narazí na mikrofón č. 2 v čase t2 a mikrofón č. 1 v čase t1. Vzdialenosť d, ktorú zvuk prešiel medzi nárazovým mikrofónom č. 2 a mikrofónom č. 1, je časový rozdiel pri zisťovaní zvuku vynásobený rýchlosťou zvuku v s:

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

Túto vzdialenosť môžeme vztiahnuť na vzdialenosť d 12 medzi párom mikrofónu a uhlom θ z dvojice na zdroj zvuku so vzťahom:

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

Pretože máme iba dva mikrofóny, v našom výpočte bude nejasnosť, či je zdroj zvuku pred nami alebo za nami. V tomto systéme budeme predpokladať, že zdroj zvuku je pred párom a zovrieme uhol medzi 0 stupňami (úplne napravo od páru) až 180 stupňov (úplne vľavo).

Nakoniec môžeme vyriešiť theta tým, že vezmeme inverzný kosínus:

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

Aby bol uhol trochu prirodzenejší, môžeme od theta odčítať 90 stupňov, takže 0 stupňov je priamo pred dvojicou a +/- 90 stupňov je úplne vľavo alebo úplne vpravo. Tým sa náš výraz zmení z inverzného kosínu na inverzný sínus.

  • cos (θ-π/2) = sin (θ) = d/d12 = vs*Δt/d12
  • θ = asín (oproti*Δt/d12), -π/2 <= θ <= π/2

Hľadanie oneskorenia

Ako vidíte z vyššie uvedenej rovnice, všetko, čo musíme pre uhol vyriešiť, je oneskorenie zvukovej vlny prichádzajúcej k mikrofónu jedna v porovnaní s mikrofónom dva; rýchlosť zvuku a vzdialenosť medzi mikrofónmi sú pevné aj známe. Aby sme to dosiahli, najskôr vzorkujeme zvukové signály na frekvencii fs, prevádzame ich z analógových na digitálne a údaje ukladáme na neskoršie použitie. Vzorkujeme po dobu známu ako vzorkovacie okno, ktoré je dostatočne dlhé na zachytenie rozpoznateľných vlastností našej zvukovej vlny. Napríklad naše okno môže mať hodnotu zvukových údajov za poslednú pol sekundu.

Po získaní zvukových signálov umiestnených v oknách nájdeme oneskorenie medzi nimi pomocou výpočtu ich vzájomnej korelácie. Aby sme vypočítali krížovú koreláciu, držíme okienkový signál z jedného mikrofónu pevný a posúvame druhý signál pozdĺž časovej osi úplne za prvý až úplne pred prvý. V každom kroku na našej snímke vynásobíme každý bod v našom pevnom signáli jeho zodpovedajúcim bodom v našom posuvnom signáli, potom zhrnieme všetky výsledky a vypočítame náš korelačný koeficient pre tento krok. Po dokončení našej snímky krok, ktorý má najvyšší korelačný koeficient, zodpovedá bodu, v ktorom sú si tieto dva signály najpodobnejšie, a v ktorom kroku sa nachádzame, nám hovorí, koľko vzoriek n signálu dva je posunuté od signálu 1. Ak n je záporné, potom signál dva zaostáva za signálom jeden, ak je kladný, signál dva je vpredu a ak je nulový, potom sú dva už zarovnané. Tento posun vzorky prevádzame na časové oneskorenie pomocou našej vzorkovacej frekvencie so vzťahom Δt = n/fs, teda:

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

Krok 2: Komponenty

Časti

  • Microsoft Kinect pre Xbox 360, model 1414 alebo 1473. Kinect má štyri mikrofóny usporiadané v lineárnom poli, ktoré použijeme.
  • Adaptér na konverziu patentovaného konektora Kinect na napájanie USB + AC, ako je tento.
  • Raspberry Pi 2 alebo 3 so systémom Raspbian Stretch. Pôvodne som sa snažil použiť Pi 1 Model B+, ale nebol dostatočne výkonný. Stále som mal problémy s odpojením od Kinectu.
  • Najstrašidelnejšia hlava figuríny, akú môžete nájsť
  • Analógové servo dostatočne silné, aby otočilo vašu figurínu
  • 5V USB nástenná nabíjačka s dostatočným prúdom na napájanie Pi aj serva a najmenej dvoch portov. (Použil som 3-portovú zástrčku 5A podobnú tejto
  • Predlžovací kábel s dvoma zásuvkami (jeden pre nástennú nabíjačku USB a druhý pre sieťový adaptér Kinect.
  • Dva káble USB: kábel typu A až micro USB na napájanie pí a druhý na napájanie serva, ktoré vám nevadí rozrezať
  • Plošina na sedenie všetkého a ďalšia menšia plošina na hlavu figuríny. Ako základ som použil plastový servírovací podnos a ako platformu pre hlavu plastový tanier. Obaja boli z Walmartu a stáli len pár dolárov
  • 4x skrutky a matice #8-32 1/2 palca na pripevnenie serva k väčšej platforme
  • 2x skrutka M3 8 mm s podložkami (alebo akejkoľvek veľkosti, ktorú potrebujete na pripevnenie servo klaksónu k menšej plošine)
  • Dva prepojovacie vodiče medzi mužom a mužom, jeden červený a jeden čierny a jeden prepojovací vodič medzi mužom a mužom
  • Lepiace pásy so suchým zipsom
  • Elektrická páska
  • Lepiaca páska pre správu káblov

Nástroje

  • Dremel s rezacím kotúčom
  • Vŕtačka
  • Vrtáky 7/64 ", 11/16" a 5/16"
  • Kohútik M3 (voliteľné, v závislosti od vášho servo klaksónu)
  • Skrutkovač
  • Spájkovačka so spájkou
  • Pomocné ruky (voliteľné)
  • Fixka
  • Kompas
  • Odizolovače drôtov
  • Multimetr (voliteľný)

OOP

  • Bezpečnostné okuliare

  • Tvárová maska (pre plastové hroty dremmel ed).

Krok 3: Spustite zostavu plošiny

Zostava spodnej plošiny
Zostava spodnej plošiny
Zostava spodnej plošiny
Zostava spodnej plošiny
Zostava spodnej plošiny
Zostava spodnej plošiny

Prvá časť, ktorú vyrobíme, je spodná plošina, do ktorej sa zmestí náš Kinect, servo a všetka naša elektronika. Na výrobu platformy budete potrebovať:

  • Plastový servírovací podnos
  • Servo
  • 4x skrutky č. 8-32 1/2 "s maticami
  • Dremel s rezacím kotúčom
  • Skrutkovač
  • Vŕtačka
  • Vrták 11/16"
  • Fixka

Ako urobiť

  1. Prevráťte podnos hore dnom.
  2. Umiestnite servo bokom k zadnej časti zásobníka, uistite sa, že výstupné ozubené koliesko serva leží pozdĺž stredovej čiary zásobníka a potom označte okolo základne serva.
  3. Pomocou dremelu a rezacieho kotúča vyrežte označenú oblasť a potom zasuňte servo do otvoru.
  4. Označte stredy montážnych otvorov skrine servopohonu na podnose, potom vyberte servo a vyvŕtajte tieto otvory vrtákom 11/16 ". Takto je možné pri vŕtaní otvorov takto ľahko prasknúť tenký plast, takže mi to pripadá oveľa bezpečnejšie. spustiť vŕtačku opačným smerom a pomaly odstraňovať materiál. Je to oveľa pomalšie ako správne vŕtanie otvorov, ale zaistí to, že nebudú žiadne praskliny.
  5. Umiestnite svoje servo späť do otvoru a potom ho pripevnite k zásobníku pomocou skrutiek a matíc #8-32.

Krok 4: Zostava platformy hlavy

Zostava plošiny hlavy
Zostava plošiny hlavy
Zostava plošiny hlavy
Zostava plošiny hlavy
Zostava plošiny hlavy
Zostava plošiny hlavy
Zostava plošiny hlavy
Zostava plošiny hlavy

Ďalšou časťou, ktorú vyrobíme, bude platforma na pripojenie hlavy figuríny k servu. Na výrobu platformy hlavy budete potrebovať:

  • Plastový tanier
  • Servo roh
  • 2x skrutka M3 8 mm s podložkami
  • Skrutkovač
  • Vŕtačka
  • Vrtáky 7/64 "a 5/16"
  • Kompas
  • Dremel s rezacím kotúčom

Ako urobiť

  1. Nastavte kompas na polomer spodnej časti hlavy svojej figuríny.
  2. Pomocou kompasu označte kruh v strede v strede taniera. Toto bude skutočná veľkosť našej hlavnej platformy.
  3. Pomocou dremelu a rezacieho kolieska vyrežte menšiu plošinu z taniera.
  4. Vyvŕtajte stred novej platformy vrtákom 5/16 ". To nám umožní prístup k skrutke, ktorá pripevňuje náš servo roh k nášmu servu. Aby som platforme zaistil stabilitu, keď som vŕtal dieru, vložil som cievku drôt pod ním a prevŕtaný stredom cievky.
  5. Zarovnajte servo roh so stredom plošiny a označte dva otvory na pripevnenie rohu k plošine. Zaistite, aby boli tieto montážne otvory dostatočne ďaleko od seba, aby bolo miesto na hlavy a podložky skrutiek M3.
  6. Tieto označené otvory vyvŕtajte vrtákom 7/64 ".
  7. Spodný otvor môjho servo rohu bol hladký, to znamená, že nemal závity pre skrutku M3. Na výrobu závitov som teda použil svoju vŕtačku a kohútik M3.
  8. Pomocou skrutiek a podložiek pripevnite servo klaksón k platforme hlavy.

Krok 5: Napájací kábel serva

Servo napájací kábel
Servo napájací kábel
Servo napájací kábel
Servo napájací kábel
Servo napájací kábel
Servo napájací kábel
Servo napájací kábel
Servo napájací kábel

Analógové servá sú typicky napájané 4,8-6V. Pretože bude Raspberry Pi už napájaný 5 V z USB, zjednodušíme náš systém tým, že budeme napájať aj servo z USB. Na to budeme musieť upraviť kábel USB. Na výrobu napájacieho kábla serva budete potrebovať:

  • Náhradný kábel USB s koncovkou typu A (typ zapojiteľný do počítača)
  • Jeden červený a jeden čierny prepojovací kábel
  • Spájkovačka
  • Spájka
  • Odizolovače drôtov
  • Elektrická páska
  • Pomocné ruky (voliteľné)
  • Multimetr (voliteľný)

Ako urobiť

  1. Odrežte konektor, ktorý nie je USB typu A, z kábla a potom odstráňte kúsok izolácie, aby ste odhalili štyri vnútorné vodiče. Odrežte tienenie obklopujúce odhalené vodiče.
  2. Kábel USB má spravidla štyri vodiče: dva na prenos a príjem údajov a dva na napájanie a uzemnenie. Nás zaujíma sila a zem, ktoré sú bežne červené, respektíve čierne. Odstráňte časť izolácie z červených a čiernych vodičov a odstrihnite zelené a biele vodiče. Ak sa obávate, že nemáte správny napájací a uzemňovací vodič, môžete zapojiť kábel do napájacieho adaptéra USB a pomocou multimetra skontrolovať výstupné napätie.
  3. Potom odrežte jeden koniec červených a čiernych prepojovacích káblov a odstráňte časť izolácie.
  4. Teraz spojte odkryté čierne vodiče prepojky a káblov USB. Prekrížte stredy odkrytých drôtov a skrútte ich okolo seba. Potom na spájané vodiče naneste spájku, aby držali spolu. Pomocné ruky vám to uľahčia tým, že držíte káble na mieste.
  5. Opakujte krok 4 s červenými vodičmi.
  6. Ak máte chuť, prikryte nekryté vedenie elektrickou páskou alebo zmršťovacou trubicou. Tieto spoje budú krehké, pretože drôty sú také malé, preto na vonkajšiu izoláciu kábla USB pridajte druhú vrstvu pásky, ktorá drží prepojovacie káble. Vďaka tomu bude zostava tuhšia, a tým aj menšia pravdepodobnosť zlomenia v dôsledku ohnutia.

Krok 6: Montáž elektroniky

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

Nakoniec všetko spojíme, namontujeme našu elektroniku a všetko ostatné na nižšiu platformu. Budete potrebovať:

  • Dolná plošina
  • Hlavová plošina
  • Hlava figuríny
  • Kinect s USB+sieťovým adaptérom
  • USB napájací adaptér
  • Predlžovací kábel
  • Micro USB kábel
  • Servo napájací kábel
  • Malinový koláč
  • Prepojovací kábel muž-žena
  • Lepiaci suchý zips
  • Nožnice

Ako urobiť

  1. Namontujte Pi na spodok vaničky pomocou suchého zipsu.
  2. Pripojte napájací adaptér USB suchým zipsom.
  3. Pripojte servo a Pi k napájaciemu adaptéru USB.
  4. Pripojte pin 12 (GPIO18) Pi k signálnemu káblu serva. Je to 6. kolík dole vpravo.
  5. Prevlečte predlžovací kábel cez zadnú rukoväť zásuvky a zapojte napájací adaptér USB do jednej strany.
  6. Vezmite napájací adaptér USB+Kinect a zapojte napájací adaptér na druhú stranu predlžovacieho kábla a USB do portu Pi.
  7. Prevlečte kábel Kinectu cez prednú rukoväť podnosu a zapojte ho do adaptéra Kinect.
  8. Na pripevnenie káblov k spodnej strane plošiny som použil lepiacu pásku. Toto nevyzerá najelegantnejšie, ale našťastie je to všetko skryté.
  9. Otočte plošinu pravou stranou nahor a pomocou suchého zipsu pripevnite Kinect k prednej časti plošiny.
  10. Pomocou suchého zipsu pripevnite hlavu figuríny k platforme hlavy. Akonáhle je všetko zarovnané, oddeľte tieto dva kusy, aby sme mali prístup k montážnej skrutke klaksónu servo. Zatiaľ však neposkrutkujte klaksón na servo, pretože sa musíme najskôr uistiť, že je servo v strednej polohe, aby sme mohli všetko zoradiť. Urobíme to v neskoršom kroku.

Krok 7: Softvér a algoritmus

Softvér a algoritmus
Softvér a algoritmus

Prehľad

Softvér pre tento projekt je napísaný v jazyku C ++ a je integrovaný s operačným systémom Robot Operating System (ROS), rámcom pre softvér na vytváranie robotov. V systéme ROS je softvér pre systém rozdelený do súboru programov nazývaných uzly, kde každý uzol implementuje konkrétnu podsekciu funkcií systému. Údaje sa prenášajú medzi uzlami pomocou metódy publikovania/prihlásenia na odber, kde uzly, ktoré údaje produkujú, ich zverejňujú a uzly, ktoré údaje spotrebúvajú, sa na ich prihlásenie prihlásia. Oddelenie kódu týmto spôsobom umožňuje jednoduché rozšírenie funkcií systému a zdieľanie uzlov medzi systémami pre rýchlejší vývoj.

V tomto systéme sa ROS používa predovšetkým na oddelenie kódu vypočítavajúceho smer príchodu (DOA) zdroja zvuku od kódu ovládajúceho servo, čo umožňuje iným projektom zahrnúť odhad DOE Kinect bez zahrnutia servo kódu, ktorý možno nepotrebujú alebo chcú.. Ak sa chcete pozrieť na samotný kód, nájdete ho na GitHub:

github.com/raikaDial/kinect_doa

Uzol Kinect DOA

Uzol kinect_doa je mäso a kosti tohto systému a robí v zásade všetko zaujímavé. Po spustení inicializuje uzol ROS, čím umožní všetky kúzla ROS, a potom nahrá firmvér do zariadenia Kinect, aby boli dostupné zvukové toky. Potom sa založí nové vlákno, ktoré otvorí zvukové toky a začne čítať údaje mikrofónu. Kinect vzorkuje svoje štyri mikrofóny na frekvencii 16 kHz, takže je dobré mať vzájomnú koreláciu a zber údajov v oddelených vláknach, aby ste sa vyhli chýbajúcim údajom v dôsledku výpočtového zaťaženia. Rozhranie s Kinectom sa dosahuje pomocou libfreenect, populárneho ovládača s otvoreným zdrojovým kódom.

Vlákno kolekcie spúšťa funkciu spätného volania vždy, keď sú prijaté nové údaje, a jednak ukladá údaje, jednak určuje, kedy sa má odhadnúť DOA. Údaje z každého mikrofónu sú uložené v rolovacích vyrovnávacích pamätiach, ktoré sú rovnako dlhé ako naše vzorkovacie okno, čo je 8192 vzoriek. To sa premieta do výpočtu krížovej korelácie s údajmi v hodnote približne pol sekundy, čo som pri experimentovaní zistil ako dobrú rovnováhu medzi výkonom a výpočtovým zaťažením. Odhad DOA sa spustí pre každých 4096 vzoriek signalizovaním hlavného vlákna, takže po sebe nasledujúce krížové korelácie sa prekrývajú o 50%. Zvážte prípad, kde nedochádza k prekrývaniu a vydávate veľmi rýchly zvuk, ktorý sa v okne vzorkovania zníži na polovicu. Pred a po vašom výraznom zvuku bude pravdepodobne biely šum, ktorý je ťažké zosúladiť s krížovou koreláciou. Prekrývajúce sa okná nám poskytujú úplnejšiu vzorku zvuku a zvyšujú spoľahlivosť našej vzájomnej korelácie tým, že nám poskytujú výraznejšie funkcie na usporiadanie.

Hlavné vlákno čaká na signál zo zberného vlákna a potom vypočíta odhad DOA. Najprv však skontroluje, či sa zachytené krivky výrazne líšia od bieleho šumu. Bez tejto kontroly by sme počítali náš odhad štyrikrát za sekundu bez ohľadu na to, či sa ozývajú zaujímavé zvuky, alebo nie, a naša hlava figuríny by bola spastická kaša. Algoritmus detekcie bieleho šumu použitý v tomto systéme je prvým z dvoch tu uvedených. Vypočítame pomer absolútneho integrálu derivácie nášho priebehu k jeho absolútnemu integrálu; pre signály s vysokým obsahom bieleho šumu je tento pomer vyšší ako pre menej hlučné signály. Nastavením prahu pre tento pomer oddeľujúceho šum od nehlučného môžeme spustiť krížovú koreláciu iba vtedy, ak je to vhodné. Tento pomer je samozrejme niečo, čo je potrebné vyladiť vždy, keď sa systém presunie do nového prostredia.

Keď program určí, že priebehy obsahujú významný nehlučný obsah, program pokračuje v krížových koreláciách. Tieto výpočty však obsahujú tri dôležité optimalizácie:

  1. Na Kinecte sú štyri mikrofóny, čo znamená, že existuje šesť párov kriviek, ktoré môžeme navzájom korelovať. Ak sa však pozriete na priestorové usporiadanie mikrofónneho poľa, vidíte, že mikrofóny 2, 3 a 4 sú veľmi blízko seba. V skutočnosti sú tak blízko, že vzhľadom na rýchlosť zvuku a našu vzorkovaciu frekvenciu budú krivky prijaté na 2, 3 a 4 oddelené maximálne jednou vzorkou dopredu alebo dozadu, čo môžeme overiť výpočtom maxlag = Δd *fs/vs, kde Δd je oddelenie páru mikrofónov, fs je vzorkovacia frekvencia a vs je rýchlosť zvuku. Korelácia párov medzi týmito tromi je teda zbytočná a potrebujeme iba krížovú koreláciu mikrofónu 1 s 2, 3 a 4.
  2. Je známe, že štandardná krížová korelácia zvukových signálov funguje zle v prípade dozvukov (echos). Silná alternatíva je známa ako generalizovaná krížová korelácia s fázovou transformáciou (GCC-PHAT). Táto metóda sa zameriava na aplikáciu funkcie váženia, ktorá zosilňuje vrcholy v krížovej korelácii, čo uľahčuje rozlíšenie pôvodného signálu od echa. Porovnal som výkon GCC-PHAT s jednoduchou krížovou koreláciou v dozvukovej komore (čítaj: betónová kúpeľňa sa rekonštruuje) a zistil som, že GCC-PHAT je 7-krát účinnejší pri odhade správneho uhla.
  3. Pri vykonávaní krížovej korelácie berieme dva signály, posúvame sa jeden po druhom a v každom kroku vynásobíme každý bod nášho pevného signálu každým bodom nášho posuvného signálu. Pre dva signály dĺžky n to znamená n^2 výpočtov. Mohli by sme to zlepšiť vykonaním krížovej korelácie vo frekvenčnej oblasti, ktorá zahŕňa rýchlu Fourierovu transformáciu (výpočty nlogn), vynásobenie každého bodu v jednom transformovanom signáli zodpovedajúcim bodom v druhom (n výpočtov), potom vykonanie inverzného Fourierovou transformáciou sa vrátite do časovej oblasti (výpočty nlogn), čo má za následok n+2*nlogn výpočtov, menej ako n^2. To je však naivný prístup. Mikrofóny v našom poli sú tak blízko seba a rýchlosť zvuku je taká nízka, že zvukové vlny už budú väčšinou zarovnané. Preto môžeme svoju vzájomnú koreláciu preniesť do okna, aby sme zvážili iba offsety, ktoré sú mierne vpredu alebo vzadu. Pri mikrofónoch 1 a 4 musí oneskorenie klesnúť medzi +/- 12 vzoriek, čo znamená, že pre každú krížovú koreláciu potrebujeme vykonať iba 24*n výpočtov, čo vedie k úsporám výpočtov, keď sú naše krivky dlhšie ako 2 900 vzoriek.

Tento systém využíva knižnicu minidsp, ktorá implementuje algoritmus GCC-PHAT s optimalizáciou 3.

Akonáhle nájde oneskorenie v signáloch z každého páru mikrofónov, program vyberie strednú hodnotu oneskorenia, použije ho na výpočet odhadovaného uhla a zverejní výsledok, aby ho bolo možné použiť na ovládanie serva.

Uzol ovládania serva

V porovnaní s uzlom kinect_doa je servo uzol relatívne jednoduchý. Jeho úlohou je výlučne vziať odhadovaný DOA a posunúť servo do tohto uhla. Na prístup k hardvérovému modulu PWM Raspberry Pi používa knižnicu wiringPi, pomocou ktorej nastavuje uhol serva. Väčšina analógových serv je riadená signálom PWM so šírkou impulzu v rozsahu od 1 000 µs do 2 000 µs, čo zodpovedá uhlu 0 ° až 180 °, ale servo, ktoré som použil, bolo ovládané 500 µs až 2 500 µs, čo zodpovedá uhlu od 0 ° do 270 °. Uzol je teda konfigurovateľný pre rôzny hardvér serva nastavením parametrov pre minimálnu šírku impulzu, maximálnu šírku impulzu a rozdiel medzi maximálnym a minimálnym uhlom. Servo sa navyše nepohybuje okamžite do cieľového uhla, ale pohybuje sa smerom k uhlu konfigurovateľnou rýchlosťou, čo dáva Margaréte postupnejšiu, strašidelnejšiu atmosféru (a navyše zvuk rýchlo sa pohybujúceho serva tam a späť je nepríjemne rýchly.).

Krok 8: Zostavenie a inštalácia

Závislosti inštalácie:

Najprv nainštalujte libfreenect. Musíme ho vytvoriť zo zdroja, pretože verzia, ktorú môžete získať pomocou správcu balíkov, neobsahuje podporu zvuku. Dôvodom je, že na nahrávanie zvuku do Kinectu musíme nahrať firmvér a jeho opätovná distribúcia nie je v niektorých jurisdikciách legálna. Okrem toho sa môžeme vyhnúť vytváraniu príkladov, ktoré vyžadujú OpenGL a glut, nepotrebné pre bezhlavé inštalácie Raspbian.

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

klon cd git 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/linux/.rules /etc/udev/rules.d udevadm control --reload-rules && udevadm trigger

Ďalej musíme nainštalovať balík wiringPi, ktorý nám umožňuje ovládať GPIO piny Pi:

cd

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

Pripojte hlavu figuríny:

S nainštalovaným wiringPi sa teraz môžeme rýchlo odkloniť späť na miesto hardvéru a pripevniť hlavu figuríny na nižšiu plošinu. Na vycentrovanie serva pomocou príkazového riadka zadajte nasledujúce príkazy:

gpio pwm-ms

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

Ak nedochádza k pohybu, vaše servo je pravdepodobne už vycentrované. Pre istotu však môžete nastaviť servo na inú hodnotu ako na stred, napr. gpio -g pwm 18 200, potom ho nastavte späť na 150.

Akonáhle ste si istí, že je servo v strede, pripevnite servo roh plošiny hlavy k servu tak, aby sa vaša hlava figuríny pozerala priamo dopredu. Potom naskrutkujte klaksón na servo a pripevnite hlavu pomocou suchých zipsov.

Nainštalujte ROS:

Ďalej nainštalujte ROS na svoj Pi. Skvelý sprievodca inštaláciou nájdete tu; pre náš systém nepotrebujeme OpenCV, takže krok 3. môžete preskočiť. Dokončenie tejto zostavy bude trvať niekoľko hodín. Keď skončíte podľa sprievodcu inštaláciou, pridajte inštaláciu do svojho bashrc, aby sme mohli používať naše novo nainštalované balíky ROS:

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

Zostavte balík Kinect DOA:

Potom, čo je všetko hotové, vytvorte pre náš projekt pracovný priestor Catkin a zadajte adresár src:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Kód pre tento projekt je obsiahnutý v balíku kinect_doa, preto ho naklonujte do adresára src vášho nového pracovného priestoru:

klon git

Balík robot_upstart poskytuje ľahko použiteľný nástroj na inštaláciu spúšťacích súborov tak, aby sa spúšťali pri štarte, a tak ich tiež naklonujte do pracovného priestoru:

klon git

Teraz môžeme zostaviť kód projektu zavolaním catkin_make z adresára najvyššej úrovne nášho pracovného priestoru, potom zadať zdroj nášho zostavenia, aby boli naše balíky k dispozícii:

cd ~/kinect_doa_ws

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

Beh a ladenie:

Za predpokladu, že je všetko zapojené a zapnuté, teraz by ste mali mať možnosť spustiť systém a nechať Kinect sledovať váš hlas! Ak však máte Kinect 1473, najskôr otvorte súbor ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch v textovom editore a nastavte parameter using_kinect_1473 na hodnotu true. Navyše, ak ste použili iné servo ako ja, je to pravdepodobne štandardné analógové servo, takže zatiaľ čo ste v spúšťacom súbore, zmeňte parameter min_us na 1000, max_us na 2000 a max_deg na 180.

roslaunch kinect_doa kinect_doa.launch

Pohrajte sa s tým chvíľu. Ak máte pocit, že je systém príliš citlivý (hľadáte v náhodných smeroch, ktoré nekorešpondujú s hlasmi alebo výraznými zvukmi), skúste zmeniť parameter white_noise_ratio v spúšťacom súbore a reštartujte systém, kým nebude odozva na úrovni, s ktorou vám bude vyhovovať.. Zvýšenie pomeru spôsobí, že systém bude menej reagovať a naopak. Toto ladenie budete pravdepodobne musieť vykonať vždy, keď systém premiestnite na iné miesto, aby ste dosiahli požadovaný výkon.

Na spustenie programu, keď zapneme Pi, použijeme balík robot_upstart na nainštalovanie nášho spúšťacieho súboru. Ak ROS práve nebeží, spustite ho príkazom roscore. Potom otvorte nový terminál a nainštalujte spustenie pomocou:

rosrun robot_upstart nainštalovať kinect_doa/launch/kinect_doa.launch -užívateľ root --symlink

Namiesto kopírovania vytvoríme symbolický odkaz na spúšťací súbor, aby sme mohli zmeniť parametre úpravou ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch.

Krok 9: Skrytie v kancelárii

Skrytie na úrade
Skrytie na úrade

Teraz k zábavnej časti. Vydajte sa po hodinách do práce a postavte svoju figurínu v tajnosti. Potom si jednoducho sadnite a uvidíte, ako dlho trvá, kým sa vaši spolupracovníci uchytia! Vaše nové stvorenie zaručene otočí niekoľko hláv …

Odporúča: