Përmbajtje:

Koka e Manekinit e Lokalizimit të Tingullit Me Kinect: 9 Hapa (me Fotografi)
Koka e Manekinit e Lokalizimit të Tingullit Me Kinect: 9 Hapa (me Fotografi)

Video: Koka e Manekinit e Lokalizimit të Tingullit Me Kinect: 9 Hapa (me Fotografi)

Video: Koka e Manekinit e Lokalizimit të Tingullit Me Kinect: 9 Hapa (me Fotografi)
Video: COKA : Sukh-E Muzical Doctorz | Alankrita Sahai | Jaani | Arvindr Khaira | DM 2024, Korrik
Anonim
Koka e Manekinës e Lokalizimit të Tingullit Me Kinect
Koka e Manekinës e Lokalizimit të Tingullit Me Kinect

Njihuni me Margaret, një bedel testimi për një sistem monitorimi të lodhjes së shoferit. Kohët e fundit ajo u tërhoq nga detyrat e saj dhe gjeti rrugën e saj në hapësirën tonë të zyrës, dhe që atëherë ka tërhequr vëmendjen e atyre që mendojnë se ajo është "e frikshme". Në interes të drejtësisë, unë i kam dhënë asaj aftësinë për t'u përballur me akuzuesit e saj kokë më kokë; në vend që të të ndjek me sa duket me shikimin e saj pa shpirt, tani ajo në fakt e bën këtë. Sistemi përdor grupin e mikrofonit të një Microsoft Kinect dhe një servo për ta drejtuar atë në drejtimin e njerëzve që flasin pranë saj.

Hapi 1: Teoria

Teori
Teori

Llogaritja e Këndit

Kur dëgjojmë diçka, përveç nëse ajo zhurmë është drejtpërdrejt para nesh, arrin një vesh para tjetrit. Truri ynë e percepton atë vonesë të mbërritjes dhe e shndërron atë në një drejtim të përgjithshëm nga i cili vjen zhurma, duke na lejuar të gjejmë burimin. Ne mund të arrijmë të njëjtin lloj lokalizimi duke përdorur një palë mikrofona. Konsideroni diagramin e treguar, i cili përmban një palë mikrofoni dhe një burim zëri. Nëse shikojmë nga lart poshtë, valët e zërit janë rrethore, por nëse distanca në burim është e madhe në krahasim me hapësirën midis mikrofonave, atëherë nga pikëpamja e sensorëve tanë vala është përafërsisht e rrafshët. Kjo njihet si supozim i fushës së largët dhe thjeshton gjeometrinë e problemit tonë.

Pra supozoni se balli i valës është një vijë e drejtë. Nëse tingulli vjen nga e djathta, ai godet mikrofonin #2 në kohën t2 dhe mikrofonin #1 në kohën t1. Distanca e zërit të përshkuar midis goditjes së mikrofonit #2 dhe mikrofonit #1 është diferenca kohore në zbulimin e zërit të shumëzuar me shpejtësinë e tingullit v s:

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

Ne mund ta lidhim këtë distancë me distancën d 12 midis çiftit të mikrofonit dhe këndit θ nga çifti në burimin e zërit me lidhjen:

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

Meqenëse kemi vetëm dy mikrofona, do të ketë paqartësi në llogaritjen tonë nëse burimi i zërit është para ose pas nesh. Në këtë sistem, ne do të supozojmë se burimi i zërit është para çiftit dhe kapim këndin midis 0 gradë (plotësisht në të djathtë të çiftit) në 180 gradë (plotësisht në të majtë).

Së fundi, ne mund të zgjidhim për theta duke marrë kosinusin e kundërt:

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

Për ta bërë këndin pak më të natyrshëm, ne mund të zbresim 90 gradë nga theta, në mënyrë që 0 gradë të jetë drejtpërdrejt para çiftit dhe +/- 90 gradë të jetë plotësisht majtas ose plotësisht djathtas. Kjo e kthen shprehjen tonë nga kosinusi invers në sinus invers.

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

Gjetja e Vonesës

Siç mund ta shihni nga ekuacioni i mësipërm, gjithçka që duhet të zgjidhim për këndin është vonesa në valën e zërit që arrin në mikrofon një në krahasim me mikrofonin dy; shpejtësia e zërit dhe distanca midis mikrofonave janë fikse dhe të njohura. Për ta arritur këtë, ne së pari marrim mostra të sinjaleve audio në frekuencën fs, duke i kthyer ato nga analoge në dixhitale dhe duke i ruajtur të dhënat për përdorim të mëvonshëm. Ne marrim mostra për një periudhë kohe të njohur si dritare e marrjes së mostrave, e cila është me kohëzgjatje mjaft të gjatë për të kapur tiparet dalluese të valës sonë të zërit. Për shembull, dritarja jonë mund të ketë të dhëna audio të vlerës së gjysmës së fundit të sekondës.

Pas marrjes së sinjaleve audio të dritares, gjejmë vonesën midis të dyve duke llogaritur ndërlidhjen e tyre. Për të llogaritur ndërlidhjen, ne mbajmë sinjalin e dritares nga një mikrofon fiks dhe rrëshqisim sinjalin e dytë përgjatë boshtit kohor nga e gjithë rruga prapa të parës në të gjithë rrugën përpara të parës. Në secilin hap përgjatë rrëshqitjes sonë ne shumëzojmë secilën pikë në sinjalin tonë fiks me pikën përkatëse në sinjalin tonë rrëshqitës, pastaj i përmbledhim të gjitha rezultatet për të llogaritur koeficientin tonë të korrelacionit për atë hap. Pas përfundimit të rrëshqitjes sonë, hapi i cili ka koeficientin më të lartë të korrelacionit korrespondon me pikën ku dy sinjalet janë më të ngjashëm, dhe në atë hap ku jemi na tregon se sa mostra n sinjali dy kompensohet nga sinjali 1. Nëse n është negativ, atëherë sinjali dy po mbetet prapa sinjalit një, nëse është pozitiv atëherë sinjali dy është përpara, dhe nëse është zero atëherë të dy janë rreshtuar tashmë. Ne e shndërrojmë këtë kompensim të mostrës në një vonesë kohore duke përdorur frekuencën tonë të marrjes së mostrave me relacionin Δt = n/fs, kështu:

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

Hapi 2: Përbërësit

Pjesët

  • Microsoft Kinect për Xbox 360, modeli 1414 ose 1473. Kinect ka katër mikrofona të rregulluar në një grup linear që ne do të përdorim.
  • Përshtatës për të kthyer lidhësin e pronarit të Kinect në fuqinë USB + AC si ky.
  • Raspberry Pi 2 ose 3 duke ekzekutuar Raspbian Stretch. Fillimisht u përpoqa të përdor një Pi 1 Model B+, por nuk ishte aq i fuqishëm sa duhet. Vazhdova të kisha probleme me shkëputjen nga Kinect.
  • Koka më e frikshme e manekinës që mund të gjeni
  • Një servo analog mjaft i fortë për të kthyer kokën e manekinës tuaj
  • Një karikues muri USB 5V me amperazh të mjaftueshëm për të fuqizuar si Pi ashtu edhe servo dhe të paktën dy porte. (Kam përdorur një prizë 5A 3-portëshe të ngjashme me këtë
  • Një kordon shtesë me dy priza (Njëra për ngarkuesin e murit USB dhe tjetra për përshtatësin AC Kinect.
  • Dy kabllo USB: një kabllo tip A-në mikro-USB për të fuqizuar Pi dhe një tjetër për të fuqizuar servo-n që nuk e keni problem të prishni
  • Një platformë për të ulur gjithçka dhe një platformë tjetër më e vogël për kokën e manekinës. Kam përdorur një tabaka plastike për servirje si bazë dhe një pjatë plastike si platformë për kokën. Të dy ishin nga Walmart dhe kushtonin vetëm disa dollarë
  • Bulona dhe arra 4x #8-32 1/2 "për të bashkuar servo-në tuaj në platformën më të madhe
  • 2x rrufe në qiell 8 mm M3 me rondele (ose çfarëdo madhësie që ju nevojitet për të ngjitur bririn tuaj të servo në platformën më të vogël)
  • Dy tela bluzë meshkuj me meshkuj, një e kuqe dhe një e zezë dhe një tel bluzë nga femra në mashkull
  • Shirita Velcro të mbështetur në ngjitës
  • Shirit elektrik
  • Shirit ngjitës për menaxhimin e kabllove

Mjetet

  • Dremel me timon prerës
  • Stërvitje
  • Stërvitje 7/64 ", 11/16" dhe 5/16"
  • Trokitje e lehtë M3 (Opsionale, në varësi të bririt tuaj të servo)
  • Kaçavidë
  • Saldim me saldim
  • Duart ndihmuese (opsionale)
  • Shënues
  • Busull
  • Zhveshëset e telave
  • Multimetër (Opsionale)

PPE

  • Syze sigurie

  • Maskë për fytyrën (për copa plastike të veshura me dremmel).

Hapi 3: Asambleja e Platformës së Ulët

Asambleja e Platformës së Poshtme
Asambleja e Platformës së Poshtme
Asambleja e Platformës së Ulët
Asambleja e Platformës së Ulët
Asambleja e Platformës së Ulët
Asambleja e Platformës së Ulët

Pjesa e parë që do të bëjmë është platforma e poshtme, e cila do të mbajë Kinect, servo dhe të gjithë pajisjet tona elektronike. Për të krijuar platformën do t'ju duhet:

  • Tabaka për servirje plastike
  • Servo
  • 4x #8-32 bulona 1/2 "me arra
  • Dremel me rrotë prerëse
  • Kaçavidë
  • Stërvitje
  • Gropë stërvitje 11/16"
  • Shënues

Si të bësh

  1. Kthejeni tabaka tuaj me kokë poshtë.
  2. Vendoseni servo tuaj anash pranë pjesës së pasme të tabaka, sigurohuni që ingranazhi dalës i servo të jetë përgjatë vijës qendrore të tabaka, pastaj shënoni rreth bazës së servo.
  3. Duke përdorur dremelin dhe rrotën tuaj të prerjes, prerë zonën që keni shënuar, pastaj rrëshqisni servo -n tuaj në vendin e tij.
  4. Shënoni qendrat e vrimave të montimit të strehimit servo në tabaka, pastaj hiqni servo dhe shpojini ato vrima me stërvitjen tuaj 11/16 ". Veryshtë shumë e lehtë të plasësh plastikë të hollë si kjo kur shponi vrima, kështu që unë e konsideroj atë shumë më të sigurt për të drejtuar stërvitjen në drejtim të kundërt dhe ngadalë duke hequr materialin. muchshtë shumë më ngadalë sesa të shponi vrimat siç duhet, por siguron që të mos ketë çarje.
  5. Vendoseni servon tuaj përsëri në çarë, pastaj montojeni në tepsi me bulonat dhe arrat #8-32.

Hapi 4: Asambleja e Platformës së Kreut

Shefi i Asamblesë së Platformës
Shefi i Asamblesë së Platformës
Shefi i Asamblesë së Platformës
Shefi i Asamblesë së Platformës
Shefi i Asamblesë së Platformës
Shefi i Asamblesë së Platformës
Shefi i Asamblesë së Platformës
Shefi i Asamblesë së Platformës

Pjesa tjetër që do të bëjmë do të jetë një platformë për të lidhur kokën e manekinës me servo. Për të bërë platformën e kokës do t'ju duhet:

  • Pllakë plastike
  • Servo bri
  • Rrufe 2x M3 8mm me rondele
  • Kaçavidë
  • Stërvitje
  • Copa stërvitje 7/64 "dhe 5/16"
  • Busull
  • Dremel me timon prerës

Si të bësh

  1. Vendoseni busullën tuaj në rrezen e bazës së kokës së manekinës tuaj.
  2. Përdorni busullën tuaj për të shënuar një rreth të përqendruar në qendër të pllakës. Kjo do të jetë madhësia aktuale e platformës sonë të kokës.
  3. Përdorni dremelin dhe rrotën tuaj prerëse për të prerë platformën më të vogël nga pjata.
  4. Stërvitni qendrën e platformës tuaj të re me një stërvitje 5/16 ". Kjo do të na japë qasje në vidën që e monton brumin tonë të servo -së në servo -në tonë. Për t'i dhënë stabilitet platformës ndërsa kam shpuar vrimën, kam vënë një rrotull tela nën të dhe shpuar përmes qendrës së bobinës.
  5. Rreshtoni bririn tuaj servo me qendrën e platformës dhe shënoni dy vrima për ta bashkuar bririn në platformë. Sigurohuni që këto vrima montimi të jenë mjaft larg njëra -tjetrës, kështu që ka vend për kokat dhe rondelet e bulonave M3.
  6. Shponi këto vrima të shënuara me një stërvitje 7/64 ".
  7. Vrima e poshtme e bririt tim servo ishte e lëmuar, domethënë nuk kishte fijet për rrufe në qiell M3. Kështu, kam përdorur stërvitjen time dhe një rubinet M3 për të bërë fijet.
  8. Përdorni bulonat dhe rondelet për të bashkuar bririn e servo -së në platformën e kokës.

Hapi 5: Kabllo Servo Power

Servo kabllo energjie
Servo kabllo energjie
Servo kabllo energjie
Servo kabllo energjie
Servo kabllo energjie
Servo kabllo energjie
Servo kabllo energjie
Servo kabllo energjie

Servo analoge zakonisht mundësohen me 4.8-6V. Meqenëse Raspberry Pi tashmë do të mundësohet nga 5V nga USB, ne do të thjeshtojmë sistemin tonë duke fuqizuar gjithashtu servo nga USB. Për ta bërë këtë, do të na duhet të modifikojmë një kabllo USB. Për të bërë kabllon servo të energjisë do t'ju duhet:

  • Kabllo USB rezervë me një fund të tipit A (lloji që futet në kompjuterin tuaj)
  • Një tel bluzë e kuqe dhe një e zezë
  • Makine per ngjitjen e metalit
  • Saldator
  • Zhveshëset e telave
  • Shirit elektrik
  • Duart ndihmuese (opsionale)
  • Multimetër (opsional)

Si të bësh

  1. Pritini lidhësin jo USB të tipit A nga kablloja juaj, pastaj hiqni pak izolimin për të zbuluar katër telat e brendshëm. Pritini mburojën që rrethon telat e ekspozuar.
  2. Zakonisht kablloja USB do të ketë katër tela: dy për transmetimin dhe marrjen e të dhënave dhe dy për fuqinë dhe tokëzimin. Ne jemi të interesuar për fuqinë dhe tokën, të cilat zakonisht janë përkatësisht të kuqe dhe të zeza. Hiqni një pjesë të izolimit nga telat kuq e zi dhe ndërprisni telat e gjelbër dhe të bardhë. Nëse jeni të shqetësuar se nuk keni telat e duhur të energjisë dhe tokëzimit, mund ta lidhni kabllon tuaj në përshtatësin tuaj të energjisë USB dhe të kontrolloni tensionin e daljes me një multimetër.
  3. Tjetra, prerë një fund të kabllove tuaj bluzë të kuqe dhe të zezë dhe hiqni një pjesë të izolimit.
  4. Tani, ktheni së bashku telat e zi të ekspozuar të bluzës tuaj dhe kabllot USB. Kaloni mbi qendrat e telave të ekspozuar dhe ktheni ato rreth njëri -tjetrit. Pastaj, aplikoni saldim në telat e çiftuar për t'i mbajtur ato së bashku. Duart ndihmuese do ta bëjnë këtë më të lehtë duke mbajtur kabllot tuaja në vend.
  5. Përsëriteni hapin 4 për telat e kuq.
  6. Mbuloni telat e ekspozuar me shirit elektrik ose tuba të tkurrjes së nxehtësisë nëse ndiheni të dashuruar. Këto nyje do të jenë të brishta pasi telat janë aq të vegjël, kështu që shtoni një shtresë të dytë të shiritit që mban kabllot e kërcyesit në izolimin e jashtëm të kabllit USB. Kjo do ta bëjë kuvendin më të ngurtë dhe kështu më pak të ngjarë të prishet nga përkulja.

Hapi 6: Montimi i pajisjeve elektronike

Montimi elektronik
Montimi elektronik
Montimi elektronik
Montimi elektronik
Montimi elektronik
Montimi elektronik

Së fundi, ne do të bashkojmë gjithçka, duke montuar elektronikën tonë dhe gjithçka tjetër në platformën më të ulët. Do t'ju duhet:

  • Platforma e poshtme
  • Platforma e kokës
  • Koka manekine
  • Kinect me përshtatës USB+AC
  • Përshtatës i energjisë USB
  • Zgjatues
  • Kabllo mikro USB
  • Servo kabllo energjie
  • Mjedër Pi
  • Kabllo kërcyesi mashkull-femër
  • Velcro ngjitëse
  • Gërshërë

Si të bësh

  1. Montoni Pi në fund të tabaka me Velcro.
  2. Bashkangjitni përshtatësin e rrymës USB me Velcro.
  3. Lidhni servo dhe Pi në përshtatësin e rrymës USB.
  4. Lidhni pinin 12 (GPIO18) të Pi me kabllon e sinjalit të servo. Pinshtë kunja e 6 -të poshtë në të djathtë.
  5. Gjarpërojeni kordonin tuaj të zgjatjes përmes dorezës së pasme të tabaka dhe futeni përshtatësin e rrymës USB në njërën anë.
  6. Merrni përshtatësin Kinect USB+AC dhe futeni përshtatësin e energjisë në anën tjetër të kordonit shtesë dhe USB në Pi.
  7. Gjarpëroni kordonin e Kinect përmes dorezës së përparme të tabaka dhe futeni në përshtatësin Kinect.
  8. Kam përdorur shirit ngjitës për të mbajtur kabllot në pjesën e poshtme të platformës. Kjo nuk duket më elegante, por për fat të mirë e gjithë kjo fshihet.
  9. Kthejeni platformën nga ana e djathtë lart dhe përdorni Velcro për të montuar Kinect në pjesën e përparme të platformës.
  10. Përdorni Velcro për të montuar kokën e manekinës në platformën e kokës. Pasi të jetë rreshtuar gjithçka, ndani të dy pjesët në mënyrë që të mund të hyjmë në vidën e montimit të bririt të servo. Mos e vidhosni akoma në servo, megjithatë, pasi ne duhet të sigurohemi që servo është së pari në pozicionin e tij qendror, në mënyrë që të rreshtojmë gjithçka. Ne do ta bëjmë këtë në një hap të mëvonshëm.

Hapi 7: Softueri dhe Algoritmi

Softueri dhe Algoritmi
Softueri dhe Algoritmi

Vështrim i përgjithshëm

Softueri për këtë projekt është shkruar në C ++ dhe është i integruar me Robot Operating System (ROS), një kornizë për shkrimin e programeve robotike. Në ROS, softueri për një sistem është i ndarë në një koleksion programesh të quajtura nyje, ku secila nyje zbaton një nënseksion specifik të funksionalitetit të sistemit. Të dhënat kalohen midis nyjeve duke përdorur një metodë publikimi/abonimi, ku nyjet që prodhojnë të dhënat i publikojnë ato dhe nyjet që konsumojnë të dhënat regjistrohen në të. Shkëputja e kodit në këtë mënyrë lejon që funksionaliteti i sistemit të zgjerohet lehtësisht dhe lejon që nyjet të ndahen midis sistemeve për zhvillim më të shpejtë.

Në këtë sistem, ROS përdoret kryesisht për të ndarë kodin që llogarit drejtimin e mbërritjes (DOA) të burimit të zërit nga kodi që kontrollon servo, duke lejuar që projekte të tjera të përfshijnë vlerësimin e Kinect DOA pa përfshirë kodin servo që ata nuk mund të kenë nevojë ose dëshirojnë Me Nëse dëshironi të shikoni vetë kodin, ai mund të gjendet në GitHub:

github.com/raikaDial/kinect_doa

Nyja Kinect DOA

Nyja kinect_doa është mishi dhe eshtrat e këtij sistemi, duke bërë në thelb gjithçka interesante. Me fillimin, ai inicializon nyjen ROS, duke bërë të mundur të gjithë magjinë ROS, pastaj ngarkon firmware në Kinect në mënyrë që transmetimet audio të bëhen të disponueshme. Pastaj krijon një fije të re e cila hap rrymat audio dhe fillon të lexojë në të dhënat e mikrofonit. Kinect provon katër mikrofonat e tij me një frekuencë prej 16 kHz secila, kështu që është mirë që të ketë ndërlidhje dhe grumbullim të dhënash në fije të veçanta për të shmangur të dhënat që mungojnë për shkak të ngarkesës llogaritëse. Ndërfaqja me Kinect arrihet duke përdorur libfreenect, një drejtues popullor me burim të hapur.

Fijet e grumbullimit ekzekutojnë një funksion të thirrjes sa herë që merren të dhëna të reja, dhe të dyja i ruajnë të dhënat dhe përcaktojnë kur të vlerësojnë DOA. Të dhënat nga secili mikrofon ruhen në tamponë rrotullues të barabartë në gjatësi me dritaren tonë të marrjes së mostrave, e cila këtu është 8192 mostra. Kjo përkthehet në llogaritjen e korrelacionit të tërthortë me të dhënat me vlerë rreth gjysmës së sekondës së fundit, ato që unë gjeta përmes eksperimentimit ishin një ekuilibër i mirë midis performancës dhe ngarkesës llogaritëse. Vlerësimi i DOA nxitet për çdo 4096 mostra duke sinjalizuar fijen kryesore, në mënyrë që ndërlidhjet e njëpasnjëshme të mbivendosen të mbivendosen me 50%. Merrni parasysh një rast kur nuk ka mbivendosje dhe bëni një zhurmë shumë të shpejtë që pritet përgjysmë nga dritarja e marrjes së mostrës. Para dhe pas tingullit tuaj dallues ka të ngjarë të jetë zhurmë e bardhë, e cila mund të jetë e vështirë të përputhet me ndërlidhjen. Dritaret e mbivendosura na japin një mostër më të plotë të tingullit, duke rritur besueshmërinë e ndërlidhjes sonë duke na dhënë veçori më të dallueshme për të rreshtuar.

Fije kryesore pret sinjalin nga fija e grumbullimit, pastaj llogarit vlerësimin e DOA. Megjithatë, së pari, ajo kontrollon nëse format e valëve të kapura janë apo jo të ndryshme nga zhurma e bardhë. Pa këtë kontroll, ne do të llogaritnim vlerësimin tonë katër herë në sekond pavarësisht nëse kishte zhurma interesante apo jo, dhe koka jonë e manekinës do të ishte një rrëmujë spastike. Algoritmi i zbulimit të zhurmës së bardhë i përdorur në këtë sistem është i pari nga dy të listuar këtu. Ne llogarisim raportin e integralit absolut të derivatit të formës sonë valore me integralin e tij absolut; për sinjalet me përmbajtje të lartë të zhurmës së bardhë ky raport është më i lartë se për sinjalet më pak të zhurmshme. Duke vendosur një prag për këtë raport që ndan zhurmën nga jo-zhurma, ne mund të shkaktojmë ndërlidhjen vetëm kur është e përshtatshme. Sigurisht, ky raport është diçka që duhet ri-rregulluar sa herë që sistemi zhvendoset në një mjedis të ri.

Pasi të përcaktohet se format e valëve përmbajnë përmbajtje të konsiderueshme jo-zhurmë, programi vazhdon me ndërlidhjet. Sidoqoftë, ekzistojnë tre optimizime të rëndësishme të ndërtuara në këto llogaritje:

  1. Ekzistojnë katër mikrofona në Kinect, që do të thotë se ka gjashtë çifte të përgjithshme të formave të valëve që mund të ndërlidhim. Sidoqoftë, nëse shikoni rregullimin hapësinor të grupit të mikrofonit, mund të shihni që mikrofonat 2, 3 dhe 4 janë shumë afër njëri -tjetrit. Në fakt, ato janë aq afër saqë për shkak të shpejtësisë së zërit dhe frekuencës sonë të marrjes së mostrave, format e valëve të marra në 2, 3 dhe 4 do të ndahen nga më së shumti një mostër përpara ose prapa, të cilën mund ta verifikojmë me llogaritjen maxlag = Δd *fs/vs, ku Δd është ndarja e çiftit të mikrofonit, fs është frekuenca e marrjes së mostrave dhe vs është shpejtësia e zërit. Kështu, lidhja e çifteve midis këtyre treve është e padobishme, dhe ne vetëm duhet të ndërlidhim mikrofonin 1 me 2, 3 dhe 4.
  2. Ndërlidhja standarde e sinjaleve audio dihet se performon dobët në prani të jehonave (ekos). Një alternativë e fuqishme njihet si ndërlidhje e përgjithësuar me transformimin e fazës (GCC-PHAT). Kjo metodë bie në zbatimin e një funksioni peshimi që amplifikon majat në ndërlidhjen, duke e bërë më të lehtë dallimin e sinjalit origjinal nga ekoja. Unë e krahasova performancën e GCC-PHAT me korrelacionin e thjeshtë të kryqëzuar në një dhomë jehone (lexo: banjo konkrete po rimodelohet), dhe zbulova se GCC-PHAT ishte 7 herë më efektive në vlerësimin e këndit të saktë.
  3. Gjatë kryerjes së ndërlidhjes, ne po marrim të dy sinjalet, duke rrëshqitur njëri përgjatë tjetrit, dhe në çdo hap shumëzojmë secilën pikë në sinjalin tonë fiks me secilën pikë në sinjalin tonë rrëshqitës. Për dy sinjale me gjatësi n, kjo rezulton në llogaritjet n^2. Ne mund ta përmirësojmë këtë duke kryer ndërlidhjen në fushën e frekuencës në vend, e cila përfshin një transformim të shpejtë të furisë (llogaritjet nlogn), duke shumëzuar secilën pikë në një sinjal të transformuar me pikën përkatëse në tjetrën (n llogaritjet), pastaj duke kryer një invers transformimi i katër herë për t'u kthyer në fushën e kohës (llogaritjet nlogn), duke rezultuar në llogaritjet n+2*nlogn, më pak se n^2. Sidoqoftë, kjo është qasja naive. Mikrofonat në grupin tonë janë aq afër së bashku dhe shpejtësia e tingullit është aq relativisht e ngadaltë sa që format e valëve audio tashmë do të jenë kryesisht të përafruara. Kështu, ne mund të hapim ndërlidhjen tonë për të marrë parasysh kompensimet që janë pak përpara ose prapa. Për mikrofonët 1 dhe 4, vonesa duhet të bjerë midis +/- 12 mostrave, që do të thotë për secilën ndër-korrelacion na duhet vetëm të kryejmë llogaritjet 24*n, duke rezultuar në kursime llogaritëse kur format tona të valëve janë më të gjata se 2900 mostra.

Ky sistem përdor bibliotekën minidsp, e cila zbaton algoritmin GCC-PHAT me optimizim 3.

Pasi të gjeni vonesën në sinjalet nga secila palë mikrofon, programi zgjedh vlerën mesatare për vonesën, e përdor atë për të llogaritur këndin e vlerësuar dhe publikon rezultatin në mënyrë që të mund të përdoret për të kontrolluar servo.

Nyja e kontrollit të shërbimit

Krahasuar me nyjen kinect_doa, nyja servo është relativisht e thjeshtë. Detyra e tij është të marrë vetëm DOA të vlerësuar dhe të lëvizë servo në atë kënd. Ai përdor bibliotekën wiringPi për të hyrë në modulin hardware PWM të Raspberry Pi, duke e përdorur atë për të vendosur këndin e servo. Shumica e servove analoge kontrollohen nga një sinjal PWM me një gjerësi impulsi që varion nga 1000 μs në 2000 µs, që korrespondon me një kënd prej 0 ° deri 180 °, por servo që kam përdorur kontrollohej me 500 μs në 2500 μs, që korrespondon me një kënd nga 0 ° në 270 °. Kështu, nyja mund të konfigurohet për servo hardware të ndryshëm duke vendosur parametra për gjerësinë minimale të impulsit, gjerësinë maksimale të impulsit dhe ndryshimin midis këndeve maksimale dhe minimale. Për më tepër, servo nuk lëviz menjëherë në këndin e synuar, por përkundrazi lëviz drejt këndit me një shpejtësi të konfigurueshme, duke i dhënë Margaret një atmosferë më graduale, mërzitëse (plus, zhurma e një servo që lëviz shpejt përpara dhe mbrapsht bëhet bezdisëse vërtet shpejt)

Hapi 8: Ndërtimi dhe instalimi

Instaloni varësitë:

Së pari, instaloni libfreenect. Ne duhet ta ndërtojmë atë nga burimi sepse versioni që mund të merrni me menaxherin e paketave nuk përfshin mbështetje për audio. Kjo ndodh sepse ne duhet të ngarkojmë firmware në Kinect për të mundësuar audio dhe rishpërndarja e këtij firmware nuk është e ligjshme në juridiksione të caktuara. Për më tepër, ne mund të shmangim ndërtimin e shembujve që kërkojnë OpenGL dhe grykë, të panevojshme për instalimet Raspbian pa kokë.

sudo apt-get install git cmake build-thelbësore 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 bëj sudo make/su/cek/sux.rules /etc/udev/rules.d kontrolli udevadm-rishikimi i rregullave && udevadm shkaktuesi

Tjetra, ne duhet të instalojmë paketën wiringPi, e cila na lejon të kontrollojmë kunjat GPIO të Pi:

cd

git klon git: //git.drogon.net/wiringPi cd ~/instalime elektrikePi./ndërtim

Bashkangjit kokën e manekinës:

Me instalimin e kabllove Pi, ne tani mund të bëjmë një devijim të shpejtë mbrapsht në tokën e harduerit për të ngjitur kokën e manekinës në platformën e poshtme. Për të qendruar servo përmes vijës së komandës, futni komandat e mëposhtme:

gpio pwm-ms

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

Nëse nuk ka lëvizje, atëherë servo juaj ndoshta është tashmë në qendër. Për të qenë të sigurt, sidoqoftë, mund ta vendosni servo në një vlerë jo-qendrore, p.sh. gpio -g pwm 18 200, pastaj vendoseni përsëri në 150.

Pasi të jeni të sigurt se servo është në qendër, ngjiteni bririn e servo të platformës së kokës në servo në mënyrë që koka juaj e manekinës të shikojë drejt përpara. Pastaj, vidhoseni bririn mbi servo dhe bashkojeni kokën përmes pjesëve Velcro.

Instaloni ROS:

Tjetra, instaloni ROS në Pi tuaj. Një udhëzues i shkëlqyeshëm i instalimit mund të gjendet këtu; për sistemin tonë nuk kemi nevojë për OpenCV, kështu që ju mund të kaloni hapin 3. Ky ndërtim do të marrë disa orë për të përfunduar. Kur të keni mbaruar duke ndjekur udhëzuesin e instalimit, shtoni burimin e instalimit në bashrc tuaj në mënyrë që të mund të përdorim paketat tona të sapo instaluara ROS:

jehonë "burimi /opt/ros/kinetic/setup.bash" >> ~/.bashrc

Ndërtoni paketën Kinect DOA:

Pas gjithçkaje që është bërë, krijoni një hapësirë pune për projektin tonë dhe futni drejtorinë src:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Kodi për këtë projekt përmbahet në paketën kinect_doa, kështu që klonojeni atë në drejtorinë src të hapësirës tuaj të re të punës:

git klon

Paketa robot_upstart siguron një mjet të lehtë për t’u përdorur për instalimin e skedarëve të nisjes në mënyrë që ato të funksionojnë gjatë fillimit, kështu që gjithashtu klononi këtë në hapësirën tuaj të punës:

git klon

Tani, ne mund të ndërtojmë kodin e projektit duke thirrur catkin_make nga drejtoria e nivelit të lartë të hapësirës sonë të punës, pastaj burojmë ndërtimin tonë në mënyrë që paketat tona të jenë në dispozicion:

cd ~/kinect_doa_ws

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

Vrapimi dhe akordimi:

Duke supozuar se gjithçka është e lidhur dhe e ndezur, tani duhet të jeni në gjendje të lançoni sistemin dhe të keni zërin e Kinect që ju jepni zë! Sidoqoftë, nëse keni një Kinect 1473, fillimisht hapni skedarin ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.hunoni në një redaktues teksti dhe vendosni parametrin duke përdorur_kinect_1473 të vërtetë. Për më tepër, nëse keni përdorur një servo të ndryshëm nga unë, është ndoshta një servo standarde analoge, kështu që ndërsa jeni në skedarin e nisjes, ndryshoni parametrin min_us në 1000, max_us në 2000 dhe max_deg në 180.

roslaunch kinect_doa kinect_doa.filloj

Luani me të për ca kohë. Nëse mendoni se sistemi është shumë i ndjeshëm (shikoni në drejtime të rastësishme që nuk korrespondojnë me zërat ose zhurmat dalluese), provoni të ndryshoni parametrin white_noise_ratio në skedarin e nisjes dhe rindizni sistemin derisa reagimi të jetë në një nivel me të cilin jeni të kënaqur Me Ngritja e raportit do ta bëjë sistemin më pak të përgjegjshëm dhe anasjelltas. Me shumë mundësi do të duhet ta bëni këtë akordim sa herë që e zhvendosni sistemin në një vend tjetër për të marrë performancën që dëshironi.

Për të nisur programin kur ndezim Pi, ne përdorim paketën robot_upstart për të instaluar skedarin tonë të nisjes. Nëse ROS nuk po funksionon aktualisht, fillojeni me komandën roscore. Pastaj, hapni një terminal të ri dhe instaloni nisjen me:

rosrun robot_upstart instaloni kinect_doa/start/kinect_doa.launch -rrënjë përdoruesi --symlink

Ne krijojmë një lidhje me skedarin e nisjes në vend që ta kopjojmë atë në mënyrë që të mund të ndryshojmë parametrat duke redaktuar ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch.

Hapi 9: Fshehja në Zyrë

Fshehja në Zyrë
Fshehja në Zyrë

Tani për pjesën argëtuese. Drejtohuni në punë pas orarit dhe vendoseni kokën e manekinës në fshehtësi. Atëherë thjesht uluni dhe shikoni sa kohë duhet që bashkëpunëtorët tuaj të arrijnë! Krijimi juaj i ri është i garantuar të kthejë disa koka…

Recommended: