Orodha ya maudhui:

Sauti Ujanibishaji wa Kichwa cha Mannequin Pamoja na Kinect: Hatua 9 (na Picha)
Sauti Ujanibishaji wa Kichwa cha Mannequin Pamoja na Kinect: Hatua 9 (na Picha)

Video: Sauti Ujanibishaji wa Kichwa cha Mannequin Pamoja na Kinect: Hatua 9 (na Picha)

Video: Sauti Ujanibishaji wa Kichwa cha Mannequin Pamoja na Kinect: Hatua 9 (na Picha)
Video: Как охотиться на людей ► 1 Прохождение Manhunt (PS2) 2024, Julai
Anonim
Sauti Ujanibishaji wa Kichwa cha Mannequin Pamoja na Kinect
Sauti Ujanibishaji wa Kichwa cha Mannequin Pamoja na Kinect

Kutana na Margaret, dummy ya kupima mfumo wa ufuatiliaji wa uchovu wa dereva. Hivi karibuni alistaafu kutoka kwa majukumu yake na akapata nafasi ya kwenda kwenye ofisi yetu, na tangu wakati huo amevutia wale wanaodhani yeye ni "mbaya". Kwa masilahi ya haki, nimempa uwezo wa kukabiliana na washtaki wake ana kwa ana; badala ya kuonekana kukufuata kwa macho yake yasiyo na roho, sasa anafanya hivyo. Mfumo hutumia safu ya kipaza sauti ya Microsoft Kinect na servo kumwelekeza kwa watu wanaozungumza karibu naye.

Hatua ya 1: Nadharia

Nadharia
Nadharia

Kuhesabu Angle

Tunaposikia kitu, isipokuwa kelele hiyo iko moja kwa moja mbele yetu inafikia sikio moja kabla ya lingine. Akili zetu hugundua kuchelewa kwa kuwasili na kuibadilisha kuwa mwelekeo wa jumla ambao kelele inatoka, ikituwezesha kupata chanzo. Tunaweza kufikia aina ile ile ya ujanibishaji kwa kutumia vipaza sauti. Fikiria mchoro ulioonyeshwa, ambao una jozi ya kipaza sauti na chanzo cha sauti. Ikiwa tunaangalia kutoka juu chini, mawimbi ya sauti ni ya mviringo, lakini ikiwa umbali wa chanzo ni mkubwa ukilinganisha na nafasi kati ya maikrofoni, basi kutoka kwa mtazamo wa sensorer zetu wimbi ni takriban sayari. Hii inajulikana kama dhana ya uwanja wa mbali na inarahisisha jiometri ya shida yetu.

Kwa hivyo fikiria upeo wa mbele ni laini moja kwa moja. Ikiwa sauti inatoka kulia, itapiga maikrofoni # 2 kwa wakati t2 na kipaza sauti # 1 kwa wakati t1. Umbali d sauti iliyosafiri kati ya kupiga kipaza sauti # 2 na maikrofoni # 1 ni tofauti ya wakati katika kugundua sauti iliyozidishwa na kasi ya sauti v s:

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

Tunaweza kuhusisha umbali huu na umbali d 12 kati ya jozi ya kipaza sauti na angle θ kutoka kwa jozi hadi chanzo cha sauti na uhusiano:

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

Kwa sababu tuna maikrofoni mbili tu, kutakuwa na utata katika hesabu yetu ikiwa chanzo cha sauti kiko mbele au nyuma yetu. Katika mfumo huu, tutafikiria kuwa chanzo cha sauti kiko mbele ya jozi na kubana pembe kati ya digrii 0 (kikamilifu kulia kwa jozi) hadi digrii 180 (kikamilifu kushoto).

Mwishowe, tunaweza kutatua kwa theta kwa kuchukua cosine inverse:

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

Ili kufanya pembe iwe ya asili zaidi, tunaweza kutoa digrii 90 kutoka kwa theta, ili digrii 0 ziwe moja kwa moja mbele ya jozi na digrii +/- 90 zimejaa kushoto au kulia kabisa. Hii inageuza usemi wetu kutoka kwa cosine inverse hadi sine inverse.

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

Kupata Kuchelewa

Kama unavyoona kutoka kwa equation hapo juu, tunachohitaji kutatua kwa pembe ni kuchelewesha kwa wimbi la sauti kufika kwenye kipaza sauti moja ikilinganishwa na kipaza sauti mbili; kasi ya sauti na umbali kati ya maikrofoni zote ni za kudumu na zinajulikana. Ili kukamilisha hili, sisi kwanza sampuli ishara za sauti kwenye masafa fs, tukizibadilisha kutoka kwa analog hadi dijiti na kuhifadhi data kwa matumizi ya baadaye. Tunachukua sampuli kwa kipindi kinachojulikana kama dirisha la sampuli, ambayo ni ya muda mrefu wa kutosha kunasa vitu vinavyojulikana vya wimbi la sauti. Kwa mfano, dirisha letu linaweza kuwa data ya sauti ya nusu ya mwisho.

Baada ya kupata ishara za sauti zilizo na madirisha, tunapata kuchelewa kati ya hizo mbili kwa kutumia uwiano wao wa msalaba. Ili kuhesabu upatanishi wa msalaba, tunashikilia ishara iliyowekwa kwenye dirisha kutoka kwa kipaza sauti moja iliyowekwa, na uteleze ishara ya pili kando ya mhimili wa wakati kutoka nyuma kabisa ya kwanza hadi mbele kabisa ya ya kwanza. Katika kila hatua kando ya slaidi yetu tunazidisha kila nukta katika ishara yetu iliyowekwa na alama inayolingana katika ishara yetu ya kuteleza, halafu jumla jumla ya matokeo yote kuhesabu mgawo wetu wa uwiano kwa hatua hiyo. Baada ya kumaliza slaidi yetu, hatua ambayo ina mgawo wa juu zaidi wa uwiano inalingana na mahali ambapo ishara mbili zinafanana sana, na ni hatua gani tunayoendelea inatuambia ni sampuli ngapi ishara mbili zimepunguzwa kutoka kwa ishara 1. Ikiwa n ni hasi, basi ishara mbili ziko nyuma ya ishara moja, ikiwa ni chanya basi ishara mbili ziko mbele, na ikiwa ni sifuri basi hizo mbili tayari zimepangwa. Tunabadilisha kukabiliana na sampuli hii kuwa ucheleweshaji wa wakati tukitumia masafa ya sampuli na uhusiano Δt = n / fs, kwa hivyo:

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

Hatua ya 2: Vipengele

Sehemu

  • Microsoft Kinect ya Xbox 360, mfano 1414 au 1473. Kinect ina maikrofoni nne zilizopangwa kwa safu tutaitumia.
  • Adapter kubadilisha kontakt ya wamiliki wa Kinect kuwa umeme wa USB + AC kama hii.
  • Raspberry Pi 2 au 3 inayoendesha Raspbian Stretch. Hapo awali nilijaribu kutumia Pi 1 Model B +, lakini haikuwa na nguvu ya kutosha. Niliendelea kuwa na shida za kutenganisha kutoka kwa Kinect.
  • Kichwa cha mannequin cha kupendeza zaidi unaweza kupata
  • Servo ya analog iliyo na nguvu ya kutosha kugeuza kichwa chako cha mannequin
  • Chaja ya ukuta ya 5V ya USB iliyo na uwezo wa kutosha kuwezesha Pi na servo na angalau bandari mbili. (Nilitumia kuziba bandari 5A sawa na hii
  • Kamba ya ugani na maduka mawili (Moja kwa chaja ya ukuta wa USB na nyingine kwa adapta ya Kinect AC.
  • Kamba mbili za USB: aina-A kwa kebo-ndogo ya USB kuwezesha Pi na nyingine kuwezesha servo ambayo haujali kukata
  • Jukwaa la kila kitu kukaa na jukwaa lingine dogo kwa kichwa cha mannequin. Nilitumia tray ya kuhudumia plastiki kama msingi na sahani ya plastiki kama jukwaa la kichwa. Wote walikuwa kutoka Walmart na waligharimu dola chache tu
  • 4x # 8-32 1/2 "bolts na karanga kuambatisha servo yako kwenye jukwaa kubwa
  • 2x M3 8mm bolt na washers (au saizi yoyote unayohitaji kushikamana na pembe yako ya servo kwenye jukwaa ndogo)
  • Waya mbili za kuruka kiume-kwa-kiume, moja nyekundu na moja nyeusi, na waya wa kuruka wa kike hadi wa kiume
  • Vipande vya Velcro vilivyoambatana na wambiso
  • Mkanda wa umeme
  • Mkanda wa bomba kwa usimamizi wa kebo

Zana

  • Dremel na gurudumu la kukata
  • Kuchimba
  • 7/64 ", 11/16", na 5/16 "kuchimba visima
  • Bomba la M3 (Hiari, kulingana na pembe yako ya servo)
  • Bisibisi
  • Chuma cha kutengeneza na solder
  • Kusaidia mikono (hiari)
  • Alama
  • Dira
  • Vipande vya waya
  • Multimeter (Hiari)

PPE

  • Miwani ya Usalama

  • Mask ya uso (kwa vipande vya plastiki vya dremmel-ed).

Hatua ya 3: Mkutano wa chini wa Jukwaa

Mkutano wa chini wa Jukwaa
Mkutano wa chini wa Jukwaa
Mkutano wa chini wa Jukwaa
Mkutano wa chini wa Jukwaa
Mkutano wa chini wa Jukwaa
Mkutano wa chini wa Jukwaa

Sehemu ya kwanza tutakayofanya ni jukwaa la chini, ambalo litashikilia Kinect yetu, servo, na umeme wetu wote. Ili kutengeneza jukwaa utahitaji:

  • Tray ya Kutumikia Plastiki
  • Servo
  • 4x # 8-32 1/2 "bolts na karanga
  • Dremel na Gurudumu la Kukata
  • Bisibisi
  • Kuchimba
  • 11/16 "Piga kidogo
  • Alama

Jinsi ya kutengeneza

  1. Pindua tray yako kichwa chini.
  2. Weka servo yako pembeni karibu na nyuma ya tray, hakikisha gia ya pato la servo iko kando ya mstari wa katikati wa tray, kisha uweke alama kuzunguka msingi wa servo.
  3. Kutumia dremel yako na gurudumu la kukata, kata eneo uliloweka alama, kisha uteleze servo yako kwenye slot yake.
  4. Tia alama kwenye vituo vya matundu yanayowekwa kwenye nyumba ya servo kwenye tray, kisha ondoa servo na utoboleze mashimo hayo kwa bomba lako la kuchimba visima la 11/16. Ni rahisi sana kupasuka plastiki nyembamba kama hii wakati wa kuchimba mashimo, kwa hivyo naona ni salama zaidi kuendesha kuchimba visima nyuma na polepole kunyoosha nyenzo hiyo. Ni polepole zaidi kuliko kuchimba mashimo vizuri lakini inahakikisha kuwa hakuna nyufa.
  5. Weka servo yako tena kwenye yanayopangwa, kisha uiweke kwenye tray na bolts # 8-32 na karanga.

Hatua ya 4: Mkutano Mkuu wa Jukwaa

Mkutano Mkuu wa Jukwaa
Mkutano Mkuu wa Jukwaa
Mkutano Mkuu wa Jukwaa
Mkutano Mkuu wa Jukwaa
Mkutano Mkuu wa Jukwaa
Mkutano Mkuu wa Jukwaa
Mkutano Mkuu wa Jukwaa
Mkutano Mkuu wa Jukwaa

Sehemu inayofuata tutafanya itakuwa jukwaa la kuunganisha kichwa cha mannequin na servo. Ili kutengeneza jukwaa la kichwa utahitaji:

  • Sahani ya plastiki
  • Pembe ya Servo
  • 2x M3 8mm bolt na washers
  • Bisibisi
  • Kuchimba
  • 7/64 "na 5/16" vipande vya kuchimba visima
  • Dira
  • Dremel na gurudumu la kukata

Jinsi ya kutengeneza

  1. Weka dira yako kwenye eneo la msingi wa kichwa chako cha mannequin.
  2. Tumia dira yako kuashiria mduara ulio katikati ya bamba. Hii itakuwa saizi halisi ya jukwaa letu la kichwa.
  3. Tumia dremel yako na gurudumu la kukata kukata jukwaa ndogo kutoka kwa bamba.
  4. Toa katikati ya jukwaa lako jipya na "kuchimba visima 5/16". Hii itatupa ufikiaji wa bisibisi ambayo huinua pembe yetu ya servo kwa servo yetu. Ili kutoa jukwaa utulivu wakati nikichimba shimo, niliweka kijiko cha waya chini yake na kuchimba katikati ya kijiko.
  5. Panga pembe yako ya servo na katikati ya jukwaa na uweke alama kwenye mashimo mawili ili kushikamana na pembe kwenye jukwaa. Hakikisha mashimo haya yanayotenganishwa yapo mbali mbali kwa hivyo kuna nafasi ya vichwa vyako vya M3 na washers.
  6. Toa mashimo haya yaliyotiwa alama na "drill 7/64" kidogo.
  7. Shimo la chini la pembe yangu ya servo lilikuwa laini, i.e. halikuwa na nyuzi za bolt ya M3. Kwa hivyo, nilitumia kuchimba visima na bomba la M3 kutengeneza nyuzi.
  8. Tumia bolts na washers kushikamana na pembe ya servo kwenye jukwaa la kichwa.

Hatua ya 5: Cable Power Servo

Cable ya Nguvu ya Servo
Cable ya Nguvu ya Servo
Cable ya Nguvu ya Servo
Cable ya Nguvu ya Servo
Cable ya Nguvu ya Servo
Cable ya Nguvu ya Servo
Cable ya Nguvu ya Servo
Cable ya Nguvu ya Servo

Servos za Analog kawaida hupewa nguvu na 4.8-6V. Kwa kuwa Raspberry Pi tayari itawezeshwa na 5V kutoka USB, tutarahisisha mfumo wetu kwa kuwezesha servo kutoka USB. Ili kufanya hivyo tutahitaji kurekebisha kebo ya USB. Ili kutengeneza kebo ya nguvu ya servo utahitaji:

  • Ondoa kebo ya USB na mwisho wa aina-A (aina ambayo huingia kwenye kompyuta yako)
  • Waya moja nyekundu na moja nyeusi ya kuruka
  • Chuma cha kulehemu
  • Solder
  • Vipande vya waya
  • Mkanda wa umeme
  • Kusaidia mikono (hiari)
  • Multimeter (hiari)

Jinsi ya kutengeneza

  1. Kata kontakt isiyo ya aina ya USB-off kwenye kebo yako, kisha uvue kidogo insulation ili kufunua waya nne za ndani. Kukata kinga inayozunguka waya zilizo wazi.
  2. Kawaida kebo ya USB itakuwa na waya nne: mbili kwa usafirishaji wa data na upokeaji na mbili kwa nguvu na ardhi. Tunavutiwa na nguvu na ardhi, ambayo kawaida ni nyekundu na nyeusi, mtawaliwa. Vua sehemu ya kutolea nje kwa waya nyekundu na nyeusi na ukate waya wa kijani na nyeupe. Ikiwa una wasiwasi kuwa hauna nguvu sahihi na waya za ardhini, unaweza kuziba kebo yako kwenye adapta yako ya umeme ya USB na uangalie voltage ya pato na multimeter.
  3. Ifuatayo, kata ncha moja ya nyaya zako nyekundu na nyeusi za kuruka na uvue sehemu nyingine ya insulation.
  4. Sasa, pindua pamoja waya nyeusi zilizo wazi za jumper zako na nyaya za USB. Vuka vituo vya waya zilizo wazi na uzipindishe kuzunguka. Kisha, weka solder kwenye waya zilizopakwa ili kuziweka pamoja. Kusaidia mikono kutarahisisha hii kwa kushikilia nyaya zako mahali.
  5. Rudia hatua ya 4 kwa waya nyekundu.
  6. Funika wiring wazi na mkanda wa umeme, au neli inapunguza joto ikiwa unahisi dhana. Viungo hivi vitakuwa dhaifu kwani waya ni ndogo sana, kwa hivyo ongeza safu ya pili ya mkanda ulioshikilia nyaya za jumper kwenye insulation ya nje ya kebo ya USB. Hii itafanya mkutano kuwa mgumu zaidi na kwa hivyo uwezekano mdogo wa kuvunjika kutoka kuinama.

Hatua ya 6: Kuweka Elektroniki

Kuweka Elektroniki
Kuweka Elektroniki
Kuweka Elektroniki
Kuweka Elektroniki
Kuweka Elektroniki
Kuweka Elektroniki

Mwishowe, tutaleta kila kitu pamoja, tukiweka umeme wetu na kila kitu kingine kwenye jukwaa la chini. Utahitaji:

  • Jukwaa la chini
  • Jukwaa la kichwa
  • Kichwa cha mannequin
  • Kinect na adapta ya USB + AC
  • Adapta ya umeme ya USB
  • Kamba ya ugani
  • Cable ndogo ya USB
  • Cable ya umeme ya Servo
  • Pi ya Raspberry
  • Kebo ya kuruka-kiume-kwa-Kike
  • Velcro ya wambiso
  • Mikasi

Jinsi ya kutengeneza

  1. Panda Pi hadi chini ya tray na Velcro.
  2. Ambatisha adapta ya umeme ya USB na Velcro.
  3. Chomeka servo na Pi kwenye adapta ya umeme ya USB.
  4. Unganisha pini 12 (GPIO18) ya Pi kwenye kebo ya ishara ya servo. Ni pini ya 6 chini kulia.
  5. Nyoka kamba yako ya ugani kupitia kipini cha nyuma cha tray na unganisha adapta ya umeme ya USB upande mmoja.
  6. Chukua adapta ya Kinect USB + AC na unganisha adapta ya umeme upande wa pili wa kamba ya ugani na USB kwenye Pi.
  7. Nyoka kamba ya Kinect kupitia kushughulikia mbele ya tray na unganisha kwenye adapta ya Kinect.
  8. Nilitumia mkanda wa bomba kushikilia nyaya chini ya jukwaa. Hii haionekani kuwa ya kifahari zaidi, lakini kwa bahati nzuri hii yote imefichwa.
  9. Pindisha jukwaa upande wa kulia juu na utumie Velcro kuweka Kinect mbele ya jukwaa.
  10. Tumia Velcro kuweka kichwa cha mannequin kwenye jukwaa la kichwa. Mara tu kila kitu kinapopangwa, hata hivyo, tenganisha vipande viwili ili tuweze kupata parafujo ya kuweka pembe ya servo. Usichunguze pembe kwa servo bado, hata hivyo, kwani tunahitaji kuhakikisha kuwa servo iko katika nafasi ya kituo kwanza ili tuweze kujipanga kila kitu. Tutafanya hivi katika hatua ya baadaye.

Hatua ya 7: Programu na Algorithm

Programu na Algorithm
Programu na Algorithm

Maelezo ya jumla

Programu ya mradi huu imeandikwa katika C ++ na imejumuishwa na Mfumo wa Uendeshaji wa Robot (ROS), mfumo wa kuandika programu ya roboti. Katika ROS, programu ya mfumo imegawanywa katika mkusanyiko wa programu zinazoitwa nodi, ambapo kila nodi hutumia kifungu fulani cha utendaji wa mfumo. Takwimu hupitishwa kati ya nodi kwa kutumia njia ya kuchapisha / usajili, ambapo nodi zinazozalisha data huichapisha na nodi ambazo hutumia data hujiandikisha. Kupunguza nambari kwa njia hii inaruhusu utendaji wa mfumo kupanuliwa kwa urahisi, na inaruhusu nodi kugawanywa kati ya mifumo ya maendeleo ya haraka.

Katika mfumo huu, ROS hutumiwa kimsingi kutenganisha nambari inayohesabu mwelekeo wa kuwasili (DOA) wa chanzo cha sauti kutoka kwa nambari inayodhibiti servo, ikiruhusu miradi mingine kujumuisha makadirio ya Kinect DOA bila kujumuisha nambari ya servo ambayo hawawezi kuhitaji au wanataka. Ikiwa unataka kuangalia nambari yenyewe, inaweza kupatikana kwenye GitHub:

github.com/raikaDial/kinect_doa

Kinect Nambari ya DOA

Node ya kinect_doa ni nyama na mifupa ya mfumo huu, ikifanya kimsingi kila kitu cha kupendeza. Wakati wa kuanza, inaanzisha nodi ya ROS, na kufanya uchawi wote wa ROS uwezekane, halafu inapakia firmware kwa Kinect ili mito ya sauti ipatikane. Halafu huzaa uzi mpya ambao hufungua mito ya sauti na kuanza kusoma kwenye data ya kipaza sauti. Sampuli za Kinect ni vipaza sauti vyake vinne kwa masafa ya 16 kHz kila moja, kwa hivyo ni vizuri kuwa na uwiano wa mkusanyiko na ukusanyaji wa data katika nyuzi tofauti ili kuepuka kukosa data kwa sababu ya mzigo wa kihesabu. Kuingiliana na Kinect kunatimizwa kwa kutumia libfreenect, dereva maarufu wa chanzo wazi.

Uzi wa mkusanyiko hufanya kazi ya kupiga simu wakati wowote data mpya inapopokelewa, na zote zinahifadhi data na huamua wakati wa kukadiria DOA. Takwimu kutoka kwa kila kipaza sauti zinahifadhiwa kwenye bafa zinazozunguka sawa kwa urefu na dirisha letu la sampuli, ambayo hapa ni sampuli 8192. Hii inatafsiriwa kuwa ni pamoja na upatanisho wa karibu na data ya nusu ya pili iliyopita, kile nilichopata kupitia kujaribu kuwa usawa mzuri kati ya utendaji na mzigo wa hesabu. Makadirio ya DOA husababishwa kwa kila sampuli 4096 kwa kuashiria uzi kuu, ili maingiliano ya msalaba mfululizo yapite kwa 50%. Fikiria kesi ambayo hakuna mwingiliano, na unatoa kelele ya haraka sana ambayo hukatwa katikati na dirisha la sampuli. Kabla na baada ya sauti yako tofauti labda itakuwa kelele nyeupe, ambayo inaweza kuwa ngumu kuambatana na uwiano wa msalaba. Madirisha yanayoingiliana hutupa sampuli kamili zaidi ya sauti, na kuongeza kuegemea kwa uwiano wetu wa msalaba kwa kutupatia sifa tofauti zaidi kujipanga.

Thread kuu inasubiri ishara kutoka kwa uzi wa mkusanyiko, kisha inakadiri makadirio ya DOA. Kwanza, hata hivyo, inakagua ikiwa aina za mawimbi zilizonaswa ni tofauti sana na kelele nyeupe. Bila hundi hii, tungekuwa tunakadiria makadirio yetu mara nne kwa sekunde bila kujali kama kulikuwa na kelele za kufurahisha au la, na kichwa chetu cha mannequin kitakuwa fujo. Algorithm nyeupe ya kugundua kelele inayotumiwa katika mfumo huu ni ya kwanza kati ya mbili zilizoorodheshwa hapa. Tunakadiria uwiano wa ujumuishaji kamili wa derivative ya muundo wetu wa wimbi kwa ujumuishaji wake kabisa; kwa ishara zilizo na yaliyomo juu-nyeupe-kelele uwiano huu ni mkubwa kuliko kwa ishara zenye kelele kidogo. Kwa kuweka kizingiti cha uwiano huu wa kutenganisha kelele na zisizo za kelele, tunaweza kuchochea uwiano wa msalaba tu inapofaa. Kwa kweli, uwiano huu ni jambo ambalo linapaswa kurekebishwa kila wakati mfumo unahamishwa kwenda kwenye mazingira mapya.

Mara tu unapoamua kuwa fomu za mawimbi zina vyenye maudhui muhimu yasiyo ya kelele, programu hiyo inaendelea na uhusiano wa msalaba. Kuna hata hivyo optimization tatu muhimu zilizojengwa katika hesabu hizi:

  1. Kuna maikrofoni nne kwenye Kinect, ikimaanisha kuna jozi sita za mawimbi ambayo tunaweza kuvuka. Walakini, ukiangalia mpangilio wa nafasi ya safu ya kipaza sauti, unaweza kuona kwamba maikrofoni 2, 3, na 4 ziko karibu sana. Kwa kweli, ziko karibu sana kwa sababu ya kasi ya sauti na mzunguko wetu wa sampuli fomu za mawimbi zilizopokelewa kwa 2, 3, na 4 zitatengwa na sampuli moja mbele au nyuma, ambayo tunaweza kuthibitisha na hesabu maxlag = Δd * fs / vs, ambapo Δd ni kutenganishwa kwa jozi ya kipaza sauti, fs ni mzunguko wa sampuli, na vs ni kasi ya sauti. Kwa hivyo, kuoanisha jozi kati ya hizi tatu haina maana, na tunahitaji tu kuvuka-kipaza sauti kipaza sauti 1 na 2, 3, na 4.
  2. Usawazishaji wa kawaida wa ishara za sauti unajulikana kufanya vibaya mbele ya urejeshi (echos). Njia mbadala yenye nguvu inajulikana kama uwiano wa jumla wa msalaba na mabadiliko ya awamu (GCC-PHAT). Njia hii inachemka kwa kutumia kazi ya kupimia ambayo huongeza kilele katika uwiano wa msalaba, na kuifanya iwe rahisi kutofautisha ishara ya asili kutoka kwa echos. Nililinganisha utendaji wa GCC-PHAT na uwiano rahisi wa msalaba kwenye chumba cha urejesho (soma: bafuni ya saruji ikibadilishwa), na nikapata GCC-PHAT kuwa na ufanisi mara 7 kwa kukadiria pembe sahihi.
  3. Wakati wa kufanya uwiano wa msalaba, tunachukua ishara mbili, tukitelezesha moja kwa moja, na kwa kila hatua kuzidisha kila nukta katika ishara yetu iliyowekwa na kila hatua kwenye ishara yetu ya kuteleza. Kwa ishara mbili za urefu n, hii inasababisha n ^ 2 hesabu. Tunaweza kuboresha hii kwa kufanya uwiano wa msalaba katika uwanja wa masafa badala yake, ambayo inajumuisha ubadilishaji wa kasi nne (mahesabu ya nlogn), kuzidisha kila nukta katika ishara moja iliyobadilishwa na alama inayolingana katika nyingine (n mahesabu), halafu tukifanya kinyume mabadiliko manne kurudi kwenye kikoa cha wakati (mahesabu ya nlogn), na kusababisha n + 2 * mahesabu ya nlogn, chini ya n ^ 2. Walakini, hii ndio njia ya ujinga. Maikrofoni katika safu yetu iko karibu sana na kasi ya sauti ni polepole sana kwamba fomati za sauti tayari zitakuwa zimepangwa zaidi. Kwa hivyo, tunaweza kutazama uwiano wetu wa msalaba ili tu kuzingatia makosa ambayo yako mbele kidogo au nyuma. Kwa maikrofoni 1 na 4, bakia inapaswa kuanguka kati ya +/- sampuli 12, ikimaanisha kwa kila uwiano wa msalaba tunahitaji tu kufanya mahesabu 24 * n, na kusababisha akiba ya hesabu wakati fomu zetu za mawimbi ni zaidi ya sampuli 2900.

Mfumo huu hutumia maktaba ya minidsp, ambayo hutumia algorithm ya GCC-PHAT na uboreshaji 3.

Mara baada ya kupata bakia katika ishara kutoka kwa kila jozi ya kipaza sauti, programu huchagua thamani ya wastani kwa bakia, hutumia kuhesabu pembe inayokadiriwa, na kuchapisha matokeo ili iweze kutumiwa kudhibiti servo.

Node ya Udhibiti wa Servo

Ikilinganishwa na kodect_doa node, node ya servo ni rahisi. Kazi yake ni kuchukua tu DOA iliyokadiriwa na kusogeza servo kwa pembe hiyo. Inatumia maktaba ya wiringPi kufikia moduli ya vifaa vya PWM ya Raspberry Pi, ikitumia kuweka pembe ya servo. Servos nyingi za analogi zinadhibitiwa na ishara ya PWM na upana wa kunde kuanzia 1000 tos hadi 2000,s, inayolingana na pembe ya 0 ° hadi 180 °, lakini servo niliyotumia ilidhibitiwa na 500 tos hadi 2500 µs, inayolingana na pembe ya 0 ° hadi 270 °. Kwa hivyo, node hiyo inaweza kusanikishwa kwa vifaa tofauti vya servo kwa kuweka vigezo vya upana wa kiwango cha chini cha kunde, upana wa kunde, na tofauti kati ya pembe za juu na za chini. Kwa kuongezea, servo hasogei mara moja kwa pembe inayolengwa, lakini badala yake huenda kwa pembe kwa kasi inayoweza kusanidiwa, ikimpa Margaret sauti ya polepole zaidi, ya kutisha (pamoja, sauti ya servo inayoenda haraka na kurudi inakera haraka sana).

Hatua ya 8: Jenga na usakinishaji

Sakinisha utegemezi:

Kwanza, weka uhuru. Lazima tuijenge kutoka kwa chanzo kwa sababu toleo unaloweza kupata na msimamizi wa kifurushi halijumuishi msaada wa sauti. Hii ni kwa sababu lazima tupakie firmware kwa Kinect kuwezesha sauti, na kusambaza tena firmware hii sio halali katika mamlaka fulani. Kwa kuongeza, tunaweza kuepuka kujenga mifano ambayo inahitaji OpenGL na glut, isiyo ya lazima kwa usanikishaji wa Raspbian isiyo na kichwa.

Sudo apt-get kufunga git cmake kujenga-muhimu libusb-1.0-0-dev

cd git clone https://github.com/OpenKinect/libfreenect cd libfreenect mkdir kujenga cd kujenga cmake.. -DCMAKE_BUILD_REDIST_PACKAGE = OFF -DCMAKE_BUILD_EXAMPLES = OFF make sudo make install sudo cp ~ / libfreenect / platform / linux / udev / 51-kine.rules /etc/udev/rules.d udhibiti wa udevadm - sheria za kupakia && trigger udevadm

Ifuatayo, tunahitaji kusanikisha kifurushi cha wiringPi, ambacho kinaturuhusu kudhibiti pini za GPIO za Pi:

cd

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

Ambatisha Kichwa cha Mannequin:

Kwa wiringPi iliyosanikishwa sasa tunaweza kuchukua kurudi nyuma haraka kwa vifaa vya ardhi ili kushikamana na kichwa cha mannequin kwenye jukwaa la chini. Ili kuweka servo kupitia laini ya amri, ingiza amri zifuatazo:

gpio pwm-ms

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

Ikiwa hakuna harakati, basi servo yako labda tayari iko katikati. Ili kuwa na hakika, ingawa, unaweza kuweka servo kwa thamani isiyo ya katikati, k.v. gpio -g pwm 18 200, kisha uirudishe hadi 150.

Mara tu unapokuwa na hakika kuwa servo imejikita, ambatisha pembe ya servo ya jukwaa la kichwa kwa servo ili kichwa chako cha mannequin kitazame mbele moja kwa moja. Kisha, piga pembe kwenye servo na ambatanisha kichwa chako kupitia bits za Velcro.

Sakinisha ROS:

Ifuatayo, weka ROS kwenye Pi yako. Mwongozo mzuri wa kusanikisha unaweza kupatikana hapa; kwa mfumo wetu hatuhitaji OpenCV, kwa hivyo unaweza kuruka hatua ya 3. Ujenzi huu utachukua masaa kadhaa kukamilisha. Unapomaliza kufuata mwongozo wa usanikishaji, ongeza kutafuta kwa bashrc yako ili tuweze kutumia vifurushi vyetu vipya vya ROS:

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

Jenga Kifurushi cha Kinect DOA:

Baada ya yote kufanywa, tengeneza nafasi ya kazi ya paka kwa mradi wetu na ingiza saraka ya src:

mkdir -p ~ / kinect_doa_ws / src

cd ~ / kinect_doa_ws / src

Nambari ya mradi huu iko kwenye kifurushi cha kinect_doa, kwa hivyo ingiza kwenye saraka ya src ya nafasi yako mpya ya kazi:

clone ya git

Kifurushi cha robot_upstart hutoa zana rahisi kutumia kwa kusanikisha faili za uzinduzi ili zianze wakati wa kuanza, kwa hivyo pia ingiza hii kwenye nafasi yako ya kazi:

clone ya git

Sasa, tunaweza kujenga nambari ya mradi kwa kupiga simu catkin_make kutoka kwa saraka ya kiwango cha juu cha nafasi yetu ya kazi, kisha tutengeneze ujengaji wetu ili vifurushi vyetu vipatikane:

cd ~ / kinect_doa_ws

catkin_make echo "chanzo / nyumba/pi/kinect_doa_ws/devel/setup.bash" >> ~ /.bashrc

Mbio na Kuweka Tuning:

Kwa kudhani kila kitu kimechomekwa na kuwezeshwa, sasa unapaswa kuweza kuzindua mfumo na uwe na wimbo wa Kinect unayosikia! Walakini, ikiwa una Kinect 1473, kwanza fungua faili ~ / kinect_doa_ws / src / kinect_doa / launch / kinect_doa.zindua katika kihariri cha maandishi na uweke parameter ya kutumia_kinect_1473 kuwa kweli. Kwa kuongezea, ikiwa unatumia servo tofauti na nilivyofanya labda ni servo ya kawaida ya analog, Kwa hivyo ukiwa kwenye faili ya uzinduzi, badilisha parameter min_us kuwa 1000, max_us hadi 2000, na max_deg hadi 180.

uzinduzi wa kinect_doa kinect_doa.zindua

Cheza karibu nayo kwa muda. Ikiwa unahisi mfumo ni nyeti sana (ukiangalia kwa njia zisizo za kawaida ambazo hazilingani na sauti au kelele tofauti), jaribu kubadilisha parameter nyeupe_noise_ratio katika faili ya uzinduzi na uzindue mfumo hadi mwitikio upo katika kiwango unachostarehe nacho. Kuongeza uwiano kutafanya mfumo usikilize sana na kinyume chake. Labda utalazimika kufanya ufuatiliaji huu wakati wowote unapohamisha mfumo kwenda mahali tofauti ili kupata utendaji unaotaka.

Kuzindua programu tunapokuwa na nguvu kwenye Pi, tunatumia kifurushi cha robot_upstart kusanikisha faili yetu ya uzinduzi. Ikiwa ROS haifanyi kazi kwa sasa, ianze na roscore ya amri. Kisha, fungua kituo kipya na usakinishe uzinduzi na:

rosrun robot_upstart kuanzisha kinect_doa / uzinduzi / kinect_doa.launch --user root --symlink

Tunaunda symlink kwenye faili ya uzinduzi badala ya kuiiga ili tuweze kubadilisha vigezo kwa kuhariri ~ / kinect_doa_ws / src / kinect_doa / uzinduzi / kinect_doa.launch.

Hatua ya 9: Kuificha Ofisini

Kuificha Ofisini
Kuificha Ofisini

Sasa kwa sehemu ya kufurahisha. Ingia kazini baada ya masaa na weka kichwa chako cha siri kwa siri. Kisha kaa tu uone jinsi inachukua muda gani kwa wafanyikazi wenzako kupata! Umeunda mpya umehakikishiwa kugeuza vichwa vichache…

Ilipendekeza: