![Ձայնի տեղայնացման մանեկենի գլուխ Kinect- ով. 9 քայլ (նկարներով) Ձայնի տեղայնացման մանեկենի գլուխ Kinect- ով. 9 քայլ (նկարներով)](https://i.howwhatproduce.com/images/001/image-1340-j.webp)
Բովանդակություն:
2025 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2025-01-23 14:48
![Ձայնի տեղայնացման մանեկենի գլուխ Kinect- ով Ձայնի տեղայնացման մանեկենի գլուխ Kinect- ով](https://i.howwhatproduce.com/images/001/image-1340-1-j.webp)
Meանոթացեք Մարգարետին ՝ վարորդի հոգնածության մոնիտորինգի համակարգի փորձարկման կեղծիքին: Նա վերջերս հեռացել է իր պարտականություններից և գտել է մեր գրասենյակի տարածքը, և այդ ժամանակվանից ի վեր ուշադրություն է գրավում նրանց վրա, ովքեր կարծում են, որ նա «սողացող» է: Արդարության շահերից ելնելով ՝ ես նրան հնարավորություն եմ տվել առերեսորեն հանդիպել իր մեղադրողներին. իր անհոգ հայացքով քեզ հետևելու փոխարեն այժմ նա իրականում այդպես է վարվում: Համակարգը օգտագործում է Microsoft Kinect- ի և սերվոյի խոսափողի զանգվածը `նրան ուղղորդելու իր մոտ գտնվող մարդկանց ուղղությամբ:
Քայլ 1: Տեսություն
![Տեսություն Տեսություն](https://i.howwhatproduce.com/images/001/image-1340-2-j.webp)
Անկյունի հաշվարկ
Երբ մենք ինչ -որ բան ենք լսում, եթե այդ աղմուկը մեր առջև չէ, այն հասնում է մի ականջից մյուսին: Մեր ուղեղը ընկալում է այդ ժամանման ուշացումը և այն վերածում է ընդհանուր ուղղության, որից աղմուկ է գալիս, ինչը թույլ է տալիս մեզ գտնել աղբյուրը: Մենք կարող ենք հասնել նույն տեսակի տեղայնացման ՝ օգտագործելով մի զույգ խոսափող: Հաշվի առեք ցուցադրված դիագրամը, որը պարունակում է խոսափողի զույգ և ձայնի աղբյուր: Եթե մենք վերևից ներքև ենք նայում, ձայնային ալիքները շրջանաձև են, բայց եթե աղբյուրից հեռավորությունը մեծ է խոսափողերի միջև եղած տարածության համեմատ, ապա մեր տվիչների տեսանկյունից ալիքը մոտավորապես հարթ է: Սա հայտնի է որպես հեռավոր դաշտի ենթադրություն և պարզեցնում է մեր խնդրի երկրաչափությունը:
Այսպիսով, ենթադրենք, որ ալիքի ճակատը ուղիղ գիծ է: Եթե ձայնը հնչում է աջից, ապա այն t2 և «t1» ժամերին կխփի #2 խոսափողին և t1 ժամանակին: #2 խոսափողին և #1 խոսափողին հարվածելու միջև անցած հեռավորությունը ձայնի հայտնաբերման ժամանակային տարբերությունն է `բազմապատկված ձայնի արագությամբ v s:
d = v s *(t1-t2) = vs *Δt
Այս հեռավորությունը մենք կարող ենք կապել խոսափողի զույգի d 12 հեռավորության և զույգից θ անկյունի հետ ձայնի աղբյուրի հետ հարաբերության հետ.
cos (θ) = d /d 12 = vs*Δt /d12
Քանի որ մենք ունենք ընդամենը երկու խոսափող, մեր հաշվարկի մեջ երկիմաստություն կլինի, թե արդյոք ձայնի աղբյուրը մեր առջևից է, թե՞ հետևից: Այս համակարգում մենք ենթադրելու ենք, որ ձայնի աղբյուրը զույգի դիմաց է և սեղմում ենք 0 աստիճանի (ամբողջությամբ զույգի աջից) մինչև 180 աստիճանի անկյունը (ամբողջությամբ ձախից):
Վերջապես, մենք կարող ենք լուծել theta- ն ՝ վերցնելով հակադարձ կոսինուսը.
θ = acos (vs*Δt/d12), 0 <= θ <= π
Անկյունը մի փոքր ավելի բնական դարձնելու համար մենք կարող ենք թետայից հանել 90 աստիճան, այնպես որ 0 աստիճանը գտնվում է անմիջապես զույգի դիմաց, իսկ +/- 90 աստիճանը լրիվ ձախ կամ լրիվ աջ: Սա մեր արտահայտությունը շրջում է հակադարձ կոսինուսից դեպի հակադարձ սինուս:
- cos (θ-π/2) = մեղք (θ) = d/d12 = vs*Δt/d12
-
θ = ասին (vs*Δt/d12), -π/2 <= θ <= π/2
Գտնելով ուշացումը
Ինչպես տեսնում եք վերևի հավասարումից, այն, ինչ մենք պետք է լուծենք անկյունի համար, դա միկրոֆոն մեկին հասնող ձայնային ալիքի ուշացումն է ՝ խոսափողի երկրորդի համեմատ: ձայնի արագությունը և խոսափողների միջև հեռավորությունը և՛ ֆիքսված են, և՛ հայտնի: Դա իրականացնելու համար մենք նախ նմուշառում ենք աուդիո ազդանշանները fs հաճախականությամբ `դրանք անալոգայինից դարձնելով թվային և պահելով տվյալները հետագա օգտագործման համար: Մենք նմուշառում ենք որոշակի ժամանակ, որը հայտնի է որպես նմուշառման պատուհան, որը բավական երկար տևողություն ունի `մեր ձայնային ալիքի տարբերակիչ հատկությունները գրավելու համար: Օրինակ, մեր պատուհանը կարող է լինել վերջին կես վայրկյանի ձայնային տվյալները:
Պատուհանների ձայնային ազդանշանները ստանալուց հետո մենք գտնում ենք երկուսի միջև ուշացումը `հաշվարկելով նրանց խաչմերուկի հարաբերակցությունը: Խաչաձև հարաբերակցությունը հաշվարկելու համար մենք պահում ենք մեկ խոսափողից ամրացված պատուհանի ազդանշանը և երկրորդ ազդանշանը սահում ենք ժամանակային առանցքի երկայնքով ՝ առաջինի հետևից մինչև առաջինից ամբողջ ճանապարհը: Մեր սահիկի երկայնքով յուրաքանչյուր քայլում մենք բազմապատկում ենք մեր ֆիքսված ազդանշանի յուրաքանչյուր կետ մեր լոգարիթմական ազդանշանի համապատասխան կետով, այնուհետև գումարում ենք բոլոր արդյունքները `այդ քայլի մեր հարաբերակցության գործակիցը հաշվարկելու համար: Մեր սլայդն ավարտելուց հետո այն աստիճանը, որն ունի ամենաբարձր հարաբերակցության գործակիցը, համապատասխանում է այն կետին, որտեղ երկու ազդանշաններն ամենից շատ նման են, և այն քայլը, որով մենք գտնվում ենք, մեզ ասում է, թե քանի նմուշ n ազդանշան երկու անջատված է ազդանշանից 1. Եթե n- ը բացասական է, ապա ազդանշանը երկու հետ է մնում մեկից, եթե այն դրական է, ապա ազդանշանը երկու առջևում է, և եթե այն զրո է, ապա երկուսն արդեն հավասարեցված են: Մենք այս նմուշի փոխհատուցումը փոխակերպում ենք ժամանակի ուշացման ՝ օգտագործելով մեր ընտրանքի հաճախականությունը Δt = n/fs հարաբերությամբ, այսպիսով.
θ = ասին (vs*n/(d12*fs)), -π/2 <= θ <= π/2
Քայլ 2: Բաղադրիչներ
Մասեր
- Microsoft Kinect for Xbox 360, մոդել 1414 կամ 1473. Kinect- ն ունի չորս խոսափող, որոնք դասավորված են գծային զանգվածի մեջ, որը մենք կօգտագործենք:
- Ադապտեր ՝ Kinect- ի սեփական միակցիչը USB + AC հոսանքի վերածելու համար, ինչպես սա է:
- Raspberry Pi 2 կամ 3 գործարկող Raspbian Stretch: Սկզբում ես փորձեցի օգտագործել Pi 1 Model B+, բայց այն բավականաչափ հզոր չէր: Ես անընդհատ խնդիրներ ունեի Kinect- ից անջատվելու հետ:
- Ամենասարսափելի մանեկենի գլուխը, որը կարող եք գտնել
- Անալոգային սերվո այնքան ուժեղ, որ կարող է շրջել ձեր մանեկենի գլուխը
- 5V USB պատի լիցքավորիչ ՝ բավականաչափ հզորությամբ ՝ Pi- ն և servo- ն սնուցելու համար և առնվազն երկու նավահանգիստ: (Ես օգտագործեցի 5A 3 պորտի նման վարդակ, որը նման է դրան
- Երկու վարդակով երկարացման լար (մեկը USB պատի լիցքավորիչի համար, իսկ մյուսը Kinect AC ադապտերի համար):
- Երկու USB մալուխ ՝ A- ից միկրո- USB մալուխ ՝ Pi- ն սնուցելու համար, և մյուսը ՝ սերվոյին միացնելու համար, որը դեմ չեք կտրել
- Հարթակ ամեն ինչի վրա նստելու համար և ևս մեկ փոքր հարթակ մանեկենի գլխի համար: Ես որպես հիմք օգտագործեցի պլաստմասե սկուտեղ, իսկ պլաստիկ ափսե ՝ որպես գլխի հարթակ: Երկուսն էլ Walmart- ից էին և արժեր ընդամենը մի քանի դոլար
- 4x #8-32 1/2 "պտուտակներ և ընկույզներ` ձեր servo- ն ավելի մեծ հարթակին ամրացնելու համար
- 2x M3 8 մմ պտուտակ լվացող մեքենաներով (կամ ինչ չափի էլ որ անհրաժեշտ լինի ձեր սերվո եղջյուրը փոքր հարթակին ամրացնելու համար)
- Երկու տղամարդու և տղամարդու ցատկող մետաղալարեր ՝ մեկը կարմիր և մեկը սև, և մեկ կինից արու թռչկոտող մետաղալար
- Կպչուն թիկունքով Velcro շերտեր
- Էլեկտրական ժապավեն
- Մալուխների կառավարման համար կպչուն ժապավեն
Գործիքներ
- Դրեմել կտրող անիվով
- Գայլիկոն
- 7/64 ", 11/16" և 5/16 "փորվածքներ
- M3 թակել (ըստ ցանկության ՝ կախված ձեր սերվո եղջյուրից)
- Պտուտակահան
- Oldոդման երկաթ `զոդումով
- Օգնող ձեռքեր (ըստ ցանկության)
- Մարկեր
- Կողմնացույց
- Մետաղալարեր
- Բազմաչափ (ըստ ցանկության)
PPE
-
Անվտանգության ակնոցներ
- Դեմքի դիմակ (dremmel-ed պլաստիկ բիտերի համար):
Քայլ 3. Ստորին հարթակի հավաքում
![Ստորին հարթակի ժողով Ստորին հարթակի ժողով](https://i.howwhatproduce.com/images/001/image-1340-3-j.webp)
![Ստորին հարթակի ժողով Ստորին հարթակի ժողով](https://i.howwhatproduce.com/images/001/image-1340-4-j.webp)
![Ստորին հարթակի ժողով Ստորին հարթակի ժողով](https://i.howwhatproduce.com/images/001/image-1340-5-j.webp)
Առաջին մասը, որը մենք կկատարենք, ստորին հարթակն է, որը կպահի մեր Kinect- ը, servo- ն և մեր ամբողջ էլեկտրոնիկան: Հարթակը պատրաստելու համար ձեզ հարկավոր է.
- Պլաստիկ սպասարկող սկուտեղ
- Սերվո
- 4x #8-32 1/2 "պտուտակներ ընկույզով
- Դրեմել կտրող անիվով
- Պտուտակահան
- Գայլիկոն
- 11/16 «Գայլիկոն
- Մարկեր
Ինչպես պատրաստել
- Շրջեք ձեր սկուտեղը գլխիվայր:
- Տեղադրեք ձեր servo- ն կողքից սկուտեղի հետևի մասում, համոզվեք, որ servo- ի ելքային հանդերձանքը գտնվում է սկուտեղի կենտրոնական գծի երկայնքով, այնուհետև նշեք servo- ի հիմքի շուրջը:
- Օգտագործելով ձեր dremel և կտրող անիվը, կտրեք ձեր նշած տարածքը, այնուհետև ձեր սերվոն սահեցրեք իր անցքի մեջ:
- Նշեք սկուտեղի վրա սերվոյի պատյանների տեղադրման անցքերի կենտրոնները, այնուհետև հանեք servo- ն և այդ անցքերը հանեք ձեր 11/16 դյույմանոց փորվածքով: Շատ հեշտ է նման բարակ պլաստիկը ճեղքել, երբ փոսեր փորելիս, ուստի ես դա ավելի անվտանգ եմ համարում: վարժությունը հակառակ ուղղությամբ գործարկել և դանդաղորեն փոշիացնել նյութը: Դա շատ ավելի դանդաղ է, քան անցքերը ճիշտ փորելը, բայց դա ապահովում է, որ ճաքեր չկան:
- Տեղադրեք ձեր servo- ն նորից անցքի մեջ, այնուհետև ամրացրեք այն սկուտեղի վրա #8-32 պտուտակներով և ընկույզներով:
Քայլ 4. Գլխավոր պլատֆորմի հավաքում
![Գլխավոր պլատֆորմի ժողով Գլխավոր պլատֆորմի ժողով](https://i.howwhatproduce.com/images/001/image-1340-6-j.webp)
![Գլխավոր հարթակի ժողով Գլխավոր հարթակի ժողով](https://i.howwhatproduce.com/images/001/image-1340-7-j.webp)
![Գլխավոր պլատֆորմի ժողով Գլխավոր պլատֆորմի ժողով](https://i.howwhatproduce.com/images/001/image-1340-8-j.webp)
![Գլխավոր պլատֆորմի ժողով Գլխավոր պլատֆորմի ժողով](https://i.howwhatproduce.com/images/001/image-1340-9-j.webp)
Հաջորդ մասը, որը մենք կանենք, կլինի հարթակ, որը պետք է միացնի մանեկենի գլուխը սերվոյին: Գլխի հարթակ պատրաստելու համար ձեզ հարկավոր է.
- Պլաստիկ ափսե
- Սերվո եղջյուր
- 2x M3 8 մմ պտուտակ լվացարաններով
- Պտուտակահան
- Գայլիկոն
- 7/64 "և 5/16" փորվածքներ
- Կողմնացույց
- Դրեմել կտրող անիվով
Ինչպես պատրաստել
- Տեղադրեք ձեր կողմնացույցը ձեր մանեկենի գլխի հիմքի շառավղով:
- Օգտագործեք ձեր կողմնացույցը ՝ ափսեի կենտրոնում կենտրոնացված շրջան նշելու համար: Սա կլինի մեր գլխի հարթակի իրական չափը:
- Օգտագործեք ձեր dremel և կտրող անիվը ՝ ափսեից կտրելու ավելի փոքր հարթակը:
- Հորատեք ձեր նոր հարթակի կենտրոնը 5/16 դյույմ հորատիչով: Սա մեզ հնարավորություն կտա մուտք գործել պտուտակ, որը ամրացնում է մեր սերվոյի եղջյուրը մեր սերվոյին: Որպեսզի հարթակին կայունություն հաղորդեմ, երբ ես փոսը փորել եմ, ես դնում եմ մի պտուտակ: դրա տակ գտնվող մետաղալարեր և փորված պարանի կենտրոնով:
- Պլատֆորմի կենտրոնով շարեք ձեր servo եղջյուրը և նշեք երկու անցք ՝ եղջյուրը հարթակին ամրացնելու համար: Համոզվեք, որ տեղադրման այս անցքերը բավականաչափ հեռու են միմյանցից, այնպես որ տեղ կա ձեր M3 պտուտակների գլուխների և լվացքի մեքենաների համար:
- Հորատեք այս նշված անցքերը 7/64 դյույմ հորատիչով:
- Իմ servo եղջյուրի ստորին անցքը հարթ էր, այսինքն ՝ M3 պտուտակի թելեր չուներ: Այսպիսով, ես օգտագործեցի իմ հորատիչը և M3 ծորակը ՝ թելերը պատրաստելու համար:
- Օգտագործեք պտուտակներ և լվացքի մեքենաներ ՝ սերվոյի եղջյուրը ամրացնելու գլխի հարթակին:
Քայլ 5: Servo հոսանքի մալուխ
![Servo հոսանքի մալուխ Servo հոսանքի մալուխ](https://i.howwhatproduce.com/images/001/image-1340-10-j.webp)
![Servo հոսանքի մալուխ Servo հոսանքի մալուխ](https://i.howwhatproduce.com/images/001/image-1340-11-j.webp)
![Servo հոսանքի մալուխ Servo հոսանքի մալուխ](https://i.howwhatproduce.com/images/001/image-1340-12-j.webp)
![Servo հոսանքի մալուխ Servo հոսանքի մալուխ](https://i.howwhatproduce.com/images/001/image-1340-13-j.webp)
Անալոգային սերվերը սովորաբար սնվում են 4.8-6 Վ լարման միջոցով: Քանի որ Raspberry Pi- ն արդեն սնուցվելու է USB- ից 5 Վ լարման միջոցով, մենք պարզեցնելու ենք մեր համակարգը `սերվոն USB- ից նույնպես սնուցելով: Դա անելու համար մենք պետք է փոփոխենք USB մալուխը: Servo հոսանքի մալուխը պատրաստելու համար ձեզ հարկավոր է.
- Պահեստային USB մալուխ ՝ տիպ A- ծայրով (այն տեսակը, որը միանում է ձեր համակարգչին)
- Մեկ կարմիր և մեկ սև ցատկող մետաղալար
- Sոդման երկաթ
- Sոդող
- Մետաղալարեր
- Էլեկտրական ժապավեն
- Օգնող ձեռքեր (ըստ ցանկության)
- Բազմաչափ (ըստ ցանկության)
Ինչպես պատրաստել
- Կտրեք ոչ USB Type-A միակցիչը ձեր մալուխից, այնուհետև մի փոքր հեռացրեք մեկուսացումը ՝ չորս ներքին լարերը բացահայտելու համար: Կտրեք բացված լարերը շրջապատող վահանը:
- Սովորաբար USB մալուխը կունենա չորս լար `երկուսը տվյալների փոխանցման և ընդունման համար, և երկուսը` հոսանքի և միացման համար: Մենք շահագրգռված ենք հզորությամբ և հիմքով, որոնք սովորաբար համապատասխանաբար կարմիր և սև են: Հեռացրեք կարմիր և սև լարերի մեկուսացման մի մասը և կտրեք կանաչ և սպիտակ լարերը: Եթե մտահոգված եք, որ դուք չունեք ճիշտ հոսանքի և գրունտի լարերը, կարող եք միացնել ձեր մալուխը USB հոսանքի ադապտերին և միլիմետրով ստուգել ելքային լարումը:
- Հաջորդը, կտրեք ձեր կարմիր և սև ցատկող մալուխների մի ծայրը և հանեք մեկուսացման մի մասը:
- Այժմ ոլորեք ձեր ցատկողի և USB մալուխների սև լարերը: Անցեք բաց լարերի կենտրոնները և ոլորեք դրանք միմյանց շուրջ: Այնուհետև զոդման լարերին կպցրեք դրանք միասին պահելու համար: Օգնական ձեռքերը դա կդարձնեն ավելի հեշտ ՝ ձեր մալուխները տեղում պահելով:
- Կրկնեք 4 -րդ քայլը կարմիր լարերի համար:
- Theածկեք բաց էլեկտրագծերը էլեկտրական ժապավենով կամ ջերմության նվազեցման խողովակներով, եթե ձեզ դուր է գալիս: Այս հոդերը փխրուն կլինեն, քանի որ լարերը այնքան փոքր են, ուստի ավելացրեք ժապավենի երկրորդ շերտը, որը պահպանում է jumper մալուխները USB մալուխի արտաքին մեկուսացմանը: Սա հավաքը կդարձնի ավելի կոշտ և, հետևաբար, ավելի քիչ հավանական է, որ այն ճեղքվի:
Քայլ 6: Էլեկտրոնիկայի տեղադրում
![Էլեկտրոնիկայի տեղադրում Էլեկտրոնիկայի տեղադրում](https://i.howwhatproduce.com/images/001/image-1340-14-j.webp)
![Էլեկտրոնիկայի տեղադրում Էլեկտրոնիկայի տեղադրում](https://i.howwhatproduce.com/images/001/image-1340-15-j.webp)
![Էլեկտրոնիկայի տեղադրում Էլեկտրոնիկայի տեղադրում](https://i.howwhatproduce.com/images/001/image-1340-16-j.webp)
Վերջապես, մենք ամեն ինչ կհամախմբենք ՝ ամրացնելով մեր էլեկտրոնիկան և մնացած ամեն ինչ ստորին հարթակին: Ձեզ հարկավոր կլինի.
- Ստորին հարթակ
- Գլխի հարթակ
- Մանեկենի գլուխ
- Kinect USB+AC ադապտերով
- USB հոսանքի ադապտեր
- Երկարացման լար
- Միկրո USB մալուխ
- Servo հոսանքի մալուխ
- Ազնվամորի Պի
- Արականից իգական ցատկող մալուխ
- Կպչուն Velcro
- Մկրատ
Ինչպես պատրաստել
- Տեղադրեք Pi- ն սկուտեղի ներքևում Velcro- ով:
- Կցեք USB հոսանքի ադապտեր Velcro- ով:
- Միացրեք servo- ն և Pi- ն USB հոսանքի ադապտերին:
- Միացրեք Pi- ի 12 -րդ կապը (GPIO18) սերվոյի ազդանշանային մալուխին: Դա 6 -րդ քորոցն է աջից ներքև:
- Օձի՛ր երկարացման լարդ սկուտեղի հետևի բռնակով և միացրու USB հոսանքի ադապտերը մի կողմից:
- Վերցրեք Kinect USB+AC ադապտերը և միացրեք հոսանքի ադապտերը երկարացման լարի մյուս կողմում, իսկ USB- ը ՝ Pi- ին:
- Օձեցրեք Kinect- ի լարը սկուտեղի առջևի բռնակով և միացրեք Kinect ադապտերին:
- Ես օգտագործեցի կպչուն ժապավեն `մալուխները հարթակի ներքևի մասում պահելու համար: Սա ամենանրբագեղ տեսք չունի, բայց բարեբախտաբար այս ամենը թաքնված է:
- Հարթակը շրջեք աջ կողմով և Velcro- ի միջոցով տեղադրեք Kinect- ը հարթակի առջև:
- Օգտագործեք Velcro ՝ մանեկենի գլուխը գլխի հարթակին ամրացնելու համար: Երբ ամեն ինչ շարվի, առանձնացրեք երկու կտորները, որպեսզի մենք կարողանանք մուտք գործել servo եղջյուրի ամրացման պտուտակ: Այնուամենայնիվ, դեռ մի պտուտակեք սերվոյի վրա, քանի որ մենք պետք է համոզվենք, որ սերվոն նախ գտնվում է իր կենտրոնական դիրքում, որպեսզի կարողանանք ամեն ինչ շարել: Մենք դա կանենք հետագա քայլին:
Քայլ 7: Softwareրագրակազմ և ալգորիթմ
![Softwareրագրային ապահովում և ալգորիթմ Softwareրագրային ապահովում և ալգորիթմ](https://i.howwhatproduce.com/images/001/image-1340-17-j.webp)
Ակնարկ
Այս ծրագրի ծրագրակազմը գրված է C ++ - ով և ինտեգրված է Robot Operating System (ROS) - ին, որը ռոբոտաշինության ծրագրեր գրելու շրջանակ է: ROS- ում համակարգի ծրագրակազմը բաժանված է հանգույցներ կոչվող ծրագրերի հավաքածուի, որտեղ յուրաքանչյուր հանգույց իրականացնում է համակարգի ֆունկցիոնալության որոշակի ենթաբաժին: Տվյալները փոխանցվում են հանգույցների միջև ՝ հրապարակման/բաժանորդագրման եղանակով, որտեղ տվյալները արտադրող հանգույցները հրապարակում են այն և այն տվյալները, որոնք սպառում են տվյալները, բաժանորդագրվում են դրան: Այս եղանակով կոդի անջատումը թույլ է տալիս համակարգի գործառույթները հեշտությամբ ընդլայնել, և թույլ է տալիս հանգույցները բաշխել համակարգերի միջև ՝ ավելի արագ զարգացման համար:
Այս համակարգում ROS- ը հիմնականում օգտագործվում է ձայնի աղբյուրի ժամանման ուղղությունը (DOA) հաշվարկող ծածկագիրը սերվոն վերահսկող ծածկագրից առանձնացնելու համար ՝ թույլ տալով այլ նախագծերի ներառել Kinect DOA- ի նախահաշիվը ՝ առանց ներառելու այն սերվո կոդը, որը նրանք կարող են կամ կարիք չունեն:. Եթե ցանկանում եք նայել հենց ծածկագրին, այն կարելի է գտնել GitHub- ում ՝
github.com/raikaDial/kinect_doa
Kinect DOA հանգույց
Kinect_doa հանգույցը այս համակարգի միսն ու ոսկորներն են, որոնք անում են հիմնականում ամեն ինչ հետաքրքիր: Գործարկելիս այն նախնականացնում է ROS հանգույցը ՝ հնարավոր դարձնելով բոլոր ROS կախարդական հնարավորությունները, այնուհետև որոնվածը ներբեռնում է Kinect- ում, որպեսզի ձայնային հոսքերը հասանելի դառնան: Այնուհետև ծնում է նոր թեմա, որը բացում է աուդիո հոսքերը և սկսում կարդալ խոսափողի տվյալների մեջ: Kinect- ը նմուշառում է իր չորս խոսափողերը `յուրաքանչյուրը 16 կՀց հաճախականությամբ, ուստի լավ է ունենալ խաչաձև հարաբերակցություն և տվյալների հավաքում առանձին թելերում` հաշվարկային բեռի պատճառով տվյալների բացակայությունից խուսափելու համար: Kinect- ի հետ շփումն իրականացվում է libfreenect- ի ՝ հանրաճանաչ բաց կոդով վարորդի միջոցով:
Հավաքածուի շարանը կատարում է հետադարձ կապի գործառույթ, երբ նոր տվյալներ են ստացվում, և երկուսն էլ պահում են տվյալները և որոշում, թե երբ պետք է գնահատել DOA- ն: Յուրաքանչյուր խոսափողի տվյալները պահվում են շարժական բուֆերներում, որոնք հավասար են մեր նմուշառման պատուհանի երկարությանը, որն այստեղ 8192 նմուշ է: Սա թարգմանում է մոտ կես վայրկյանի տվյալների արժեքի հետ փոխկապակցվածության հաշվարկ, այն, ինչ փորձերի արդյունքում գտա, որ լավ հավասարակշռություն է կատարման և հաշվարկային բեռի միջև: DOA- ի գնահատումը գործարկվում է յուրաքանչյուր 4096 նմուշի համար `ազդանշան տալով հիմնական շարանը, այնպես որ հաջորդական փոխկապակցումները համընկնում են 50%-ով: Հաշվի առեք մի դեպք, երբ համընկնում չկա, և դուք շատ արագ աղմուկ եք բարձրացնում, որը կիսով չափ կտրվում է նմուշառման պատուհանից: Ձեր տարբերակիչ ձայնից առաջ և հետո ամենայն հավանականությամբ կլինի սպիտակ աղմուկ, որը դժվար է համընկնել խաչմերուկի հետ: Պատուհանների համընկնումը մեզ տալիս է ձայնի ավելի ամբողջական նմուշ ՝ մեծացնելով մեր փոխկապակցման հուսալիությունը ՝ տալով մեզ ավելի հստակ հատկանիշներ շարելու համար:
Հիմնական շարանը սպասում է հավաքման թելից ստացված ազդանշանին, այնուհետև հաշվարկում է DOA գնահատականը: Այնուամենայնիվ, առաջին հերթին այն ստուգում է, թե արդյոք գրավված ալիքի ձևերն էապես տարբերվում են սպիտակ աղմուկից: Առանց այս ստուգման, մենք կհաշվարկեինք մեր գնահատականը վայրկյանում չորս անգամ ՝ անկախ հետաքրքիր ձայների առկայությունից, թե ոչ, և մեր մանեկենի գլուխը սպաստիկ խառնաշփոթ կլիներ: Այս համակարգում օգտագործվող սպիտակ աղմուկի հայտնաբերման ալգորիթմը առաջինն է այստեղ թվարկված երկուսից: Մենք հաշվարկում ենք մեր ալիքի ձևի ածանցյալի բացարձակ ինտեգրալի հարաբերակցությունը նրա բացարձակ ինտեգրալի հետ. Սպիտակ աղմուկի բարձր պարունակությամբ ազդանշանների դեպքում այս հարաբերակցությունը ավելի բարձր է, քան պակաս աղմկոտ ազդանշանների դեպքում: Աղմուկից ոչ աղմուկից այս հարաբերակցության շեմ սահմանելով ՝ մենք կարող ենք խաչաձև հարաբերակցություն առաջացնել միայն անհրաժեշտության դեպքում: Իհարկե, այս հարաբերակցությունը մի բան է, որը պետք է նորից կարգավորվի ամեն անգամ, երբ համակարգը տեղափոխվում է նոր միջավայր:
Երբ որոշվում է, որ ալիքի ձևերը պարունակում են էական ոչ աղմուկի պարունակություն, ծրագիրը շարունակում է խաչաձև հարաբերությունները: Այնուամենայնիվ, այս հաշվարկների մեջ կառուցված են երեք կարևոր օպտիմալացում.
- Kinect- ում կա չորս խոսափող, ինչը նշանակում է, որ ալիքների ձևերի ընդհանուր զույգը կարող են փոխկապակցվել: Այնուամենայնիվ, եթե նայեք խոսափողի զանգվածի տարածական դասավորությանը, կտեսնեք, որ 2, 3 և 4 խոսափողերը շատ մոտ են միմյանց: Իրականում դրանք այնքան մոտ են, որ ձայնի արագության և մեր նմուշառման հաճախականության շնորհիվ 2, 3 և 4 -ում ստացված ալիքի ձևերը կառանձնացվեն առավելագույնը մեկ նմուշով առջևից կամ հետևից, ինչը մենք կարող ենք ճշտել maxlag = Δd հաշվարկով: *fs/vs, որտեղ Δd խոսափողի զույգի տարանջատումն է, fs նմուշառման հաճախականությունը, իսկ vs- ը `ձայնի արագությունը: Այսպիսով, այս երեքի միջև զույգերի փոխկապակցումն անօգուտ է, և մեզ անհրաժեշտ է միայն միկրոֆոնը 1-ը խաչաձեւել 2-ի, 3-ի և 4-ի հետ:
- Հայտնի է, որ ձայնային ազդանշանների ստանդարտ խաչմերուկը վատ է կատարում արձագանքների (էխո) առկայության դեպքում: Հզոր այլընտրանքը հայտնի է որպես փուլերի փոխակերպման ընդհանրացված փոխկապակցում (GCC-PHAT): Այս մեթոդը հիմնված է կշռման գործառույթի կիրառման վրա, որն ուժեղացնում է գագաթները խաչաձև հարաբերակցության մեջ, ինչը դյուրացնում է սկզբնական ազդանշանը էխոսից տարբերելը: Ես համեմատեցի GCC-PHAT- ի կատարումը արձագանքման պալատում պարզ փոխկապակցության հետ (կարդացեք. Բետոնի բաղնիքը վերափոխվում է) և գտա, որ GCC-PHAT- ը 7 անգամ ավելի արդյունավետ է ճիշտ անկյունը գնահատելու համար:
- Խաչաձև հարաբերակցությունը կատարելիս մենք վերցնում ենք երկու ազդանշանը ՝ սահելով մեկը մյուսի երկայնքով և ամեն քայլափոխի բազմապատկելով մեր ֆիքսված ազդանշանի յուրաքանչյուր կետ մեր լոգարիթմական ազդանշանի յուրաքանչյուր կետով: N երկարության երկու ազդանշանների դեպքում սա հանգեցնում է n^2 հաշվարկների: Մենք կարող ենք դա բարելավել ՝ փոխարենը կատարելով հաճախականության տիրույթում խաչաձև հարաբերություն, որը ենթադրում է արագ ֆուրեր փոխակերպում (nlogn հաշվարկներ) ՝ մեկ փոխակերպված ազդանշանի յուրաքանչյուր կետը բազմապատկելով մյուսի համապատասխան կետով (n հաշվարկներ), այնուհետև կատարելով հակադարձ չորս անգամ փոխակերպվել ՝ վերադառնալու ժամանակի տիրույթ (nlogn հաշվարկներ), որի արդյունքում ստացվել են n+2*nlogn հաշվարկներ, n^2 -ից պակաս: Այնուամենայնիվ, սա միամիտ մոտեցում է: Մեր զանգվածի խոսափողերն այնքան մոտ են իրար, և ձայնի արագությունն այնքան համեմատաբար դանդաղ է, որ աուդիոալիքային ձևերն արդեն հիմնականում հավասարեցված կլինեն:Այսպիսով, մենք կարող ենք պատուհան տալ մեր փոխկապակցվածությանը `հաշվի առնելով միայն փոքր-ինչ առաջ կամ հետ ընկած փոխհատուցումները: Խոսափողերի համար 1 և 4, հետաձգումը պետք է ընկնի +/- 12 նմուշների միջև, ինչը նշանակում է, որ յուրաքանչյուր փոխկապակցման համար մեզ անհրաժեշտ է կատարել միայն 24*n հաշվարկ, ինչը կհանգեցնի հաշվարկների խնայողության, երբ մեր ալիքի ձևերը ավելի քան 2900 նմուշ են:
Այս համակարգը գործի է դնում minidsp գրադարանը, որն իրականացնում է GCC-PHAT ալգորիթմը օպտիմալացմամբ 3:
Խոսափողի յուրաքանչյուր զույգի ազդանշանների մեջ հետաձգումը գտնելուց հետո ծրագիրն ընտրում է հետաձգման միջին արժեքը, այն օգտագործում է մոտավոր անկյունը հաշվարկելու համար և հրապարակում արդյունքը, որպեսզի այն կարողանա օգտագործվել սերվոն վերահսկելու համար:
Servo կառավարման հանգույց
Համեմատած kinect_doa հանգույցի հետ, servo հանգույցը համեմատաբար պարզ է: Նրա խնդիրն է միայն վերցնել գնահատված DOA- ն և սերվոն տեղափոխել այդ անկյան տակ: Այն օգտագործում է wiringPi գրադարանը ՝ Raspberry Pi- ի ապարատային PWM մոդուլին մուտք գործելու համար ՝ օգտագործելով այն սերվոյի անկյունը սահմանելու համար: Անալոգային սերվերի մեծ մասը վերահսկվում է PWM ազդանշանով `զարկերակի լայնությամբ` 1000 μs- ից մինչև 2000 μs, որը համապատասխանում է 0 ° -ից մինչև 180 ° անկյունին, սակայն իմ օգտագործած սերվոն վերահսկվում էր 500 μs- ից մինչև 2500 μs, համապատասխան անկյունին: 0 -ից 270 ° -ից: Այսպիսով, հանգույցը կարող է կարգավորվել տարբեր servo սարքավորումների համար `սահմանելով պարամետրեր նվազագույն զարկերակի լայնության, զարկերակի առավելագույն լայնության և առավելագույն և նվազագույն անկյունների միջև տարբերության համար: Բացի այդ, servo- ն անմիջապես չի շարժվում դեպի թիրախային անկյունը, այլ շարժվում է դեպի անկյունը կարգավորելի արագությամբ, ինչը Մարգարեթին տալիս է ավելի աստիճանական, սողացող տրամադրություն (գումարած ՝ արագ և առաջ շարժվող սերվոյի ձայնը շատ արագ նյարդայնացնում է)):
Քայլ 8: Կառուցեք և տեղադրեք
Կախվածության տեղադրում
Նախ, տեղադրեք libfreenect- ը: Մենք պետք է այն կառուցենք սկզբնաղբյուրից, քանի որ այն տարբերակը, որը կարող եք ձեռք բերել փաթեթի կառավարչի հետ, չի ներառում ձայնի աջակցություն: Դա տեղի է ունենում այն պատճառով, որ մենք պետք է ներբեռնենք որոնվածը Kinect- ում `ձայնը միացնելու համար, և այս որոնվածի վերաբաշխումը օրինական չէ որոշակի իրավասությունների շրջանակներում: Բացի այդ, մենք կարող ենք խուսափել օրինակների ստեղծումից, որոնք պահանջում են OpenGL և շատակերություն, որոնք անհարկի են 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/sudo//.rules /etc/udev/rules.d udevadm հսկողություն-վերաբեռնում-կանոններ && udevadm ձգան
Հաջորդը, մենք պետք է տեղադրենք wiringPi փաթեթը, որը թույլ է տալիս մեզ վերահսկել Pi- ի GPIO կապերը.
CD
git clone git: //git.drogon.net/wiringPi cd ~/wiringPi./ շինություն
Կցեք մանեկենի գլուխը
Տեղադրելով wiringPi- ն, մենք այժմ կարող ենք արագ ճանապարհով վերադառնալ ապարատային հող `մանեկենի գլուխը ստորին հարթակին ամրացնելու համար: Servo- ն հրամանի տողի միջոցով կենտրոնացնելու համար մուտքագրեք հետևյալ հրամանները.
gpio pwm-ms
gpio pwmc 192 gpio pwmr 2000 gpio -g pwm 18 150
Եթե շարժում չկա, ապա ձեր սերվոն հավանաբար արդեն կենտրոնացած է: Այնուամենայնիվ, վստահ լինելու համար, դուք կարող եք սերվոն սահմանել ոչ կենտրոնական արժեքի, օրինակ. gpio -g pwm 18 200, այնուհետև այն կրկին դրեք 150 -ի:
Երբ համոզվեք, որ servo- ն կենտրոնացած է, գլխի պլատֆորմի servo եղջյուրը կցեք servo- ին այնպես, որ ձեր մանեկենի գլուխը նայի ուղիղ առաջ: Այնուհետև եղջյուրը պտուտակացրեք սերվոյի վրա և ամրացրեք ձեր գլուխը Velcro բիտերի միջոցով:
Տեղադրեք ROS:
Հաջորդը, տեղադրեք ROS ձեր Pi- ի վրա: Տեղադրման հիանալի ուղեցույց կարելի է գտնել այստեղ. մեր համակարգի համար մեզ պետք չէ OpenCV, այնպես որ կարող եք բաց թողնել 3 -րդ քայլը: Այս կառուցումն ավարտելու համար կպահանջվի մի քանի ժամ: Տեղադրման ուղեցույցին հետևելուց հետո ավելացրեք տեղադրման աղբյուրը ձեր bashrc- ին, որպեսզի մենք կարողանանք օգտագործել մեր նոր տեղադրված ROS փաթեթները.
արձագանք "աղբյուր /opt/ros/kinetic/setup.bash" >> ~/.bashrc
Կառուցեք Kinect DOA փաթեթ
Այն բանից հետո, ինչ արված է, ստեղծեք catkin աշխատանքային տարածք մեր նախագծի համար և մուտքագրեք src գրացուցակը.
mkdir -p ~/kinect_doa_ws/src
cd ~/kinect_doa_ws/src
Այս նախագծի ծածկագիրը պարունակվում է kinect_doa փաթեթում, այնպես որ այն կլոնավորեք ձեր նոր աշխատանքային տարածքի src գրացուցակում ՝
git կլոն
Robot_upstart փաթեթը տրամադրում է գործածման ֆայլերի տեղադրման համար դյուրին գործիք, որպեսզի դրանք գործարկվեն գործարկման ժամանակ, այնպես որ սա նույնպես կլոնավորեք ձեր աշխատանքային տարածքի մեջ.
git կլոն
Այժմ, մենք կարող ենք կառուցել ծրագրի կոդը ՝ զանգահարելով catkin_make մեր աշխատանքային տարածքի վերին մակարդակի գրացուցակից, այնուհետև աղբյուրը դարձրեք մեր կառուցվածքը, որպեսզի մեր փաթեթները հասանելի լինեն.
cd ~/kinect_doa_ws
catkin_make echo "source /home/pi/kinect_doa_ws/devel/setup.bash" >> ~/.bashrc
Վազում և կարգաբերում
Ենթադրելով, որ ամեն ինչ միացված է և միացված է, այժմ դուք պետք է կարողանաք գործարկել համակարգը և ունենաք Kinect- ի ձեր ձայնը: Այնուամենայնիվ, եթե ունեք Kinect 1473, նախ բացեք ֆայլը ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa: գործարկեք տեքստային խմբագրիչում և պարամետրը օգտագործելով_kinect_1473- ը ճշմարիտ: Բացի այդ, եթե դուք օգտագործել եք այլ սերվո, քան ես, դա, հավանաբար, ստանդարտ անալոգային սերվո է: Այսպիսով, մինչ գործարկման ֆայլում, min_us պարամետրը փոխեք 1000 -ի, max_us- ի `2000 -ի, և max_deg- ի` 180 -ի:
roslaunch kinect_doa kinect_doa.launch
Որոշ ժամանակ խաղացեք դրա հետ: Եթե կարծում եք, որ համակարգը չափազանց զգայուն է (նայեք պատահական ուղղություններով, որոնք չեն համապատասխանում ձայներին կամ տարբերակիչ աղմուկներին), փորձեք փոխել գործարկման ֆայլում white_noise_ratio պարամետրը և վերագործարկեք համակարգը մինչև արձագանքման մակարդակը ձեզ հարմար լինի:. Հարաբերակցության բարձրացումը կդարձնի համակարգը ավելի քիչ արձագանքող և հակառակը: Ամենայն հավանականությամբ, ստիպված կլինեք կատարել այս կարգաբերումը, երբ համակարգը տեղափոխեք այլ վայր ՝ ձեր ուզած կատարումը ստանալու համար:
Pi- ն միացնելիս ծրագիրը գործարկելու համար մենք օգտագործում ենք robot_upstart փաթեթը ՝ մեր գործարկման ֆայլը տեղադրելու համար: Եթե ROS- ը ներկայումս չի աշխատում, սկսեք այն roscore հրամանով: Այնուհետև բացեք նոր տերմինալ և տեղադրեք գործարկումը հետևյալով.
rosrun robot_upstart տեղադրել kinect_doa/start/kinect_doa.launch -օգտագործողի արմատ --symlink
Գործարկման ֆայլին պատճենելու փոխարեն մենք ստեղծում ենք համացանց, որպեսզի կարողանանք փոխել պարամետրերը ՝ խմբագրելով ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch:
Քայլ 9: Թաքցնել այն գրասենյակում
![Թաքցնել այն գրասենյակում Թաքցնել այն գրասենյակում](https://i.howwhatproduce.com/images/001/image-1340-18-j.webp)
Հիմա զվարճալի մասի համար: Hoursամից հետո գործի անցեք և գաղտնի դրեք ձեր մանեկենը: Այնուհետև պարզապես նստեք և տեսեք, թե որքան ժամանակ է պահանջվում, որ ձեր գործընկերները հասնեն առաջ: Ձեր նոր ստեղծագործությունը երաշխավորված է, որ մի քանի գլուխ կշրջի…
Խորհուրդ ենք տալիս:
UWB տեղայնացման փետուր `6 քայլ
![UWB տեղայնացման փետուր `6 քայլ UWB տեղայնացման փետուր `6 քայլ](https://i.howwhatproduce.com/images/010/image-28637-j.webp)
UWB Տեղայնացման փետուր. Ultra-WideBand փետուրը ներառում է Decawave DWM1000 մոդուլը և ATSAMD21 ARM Cortex M0- ը Adafruit փետուրի ձևի գործոնի մեջ: DWM1000 մոդուլը IEEE802.15.4-2011 UWB- ին համապատասխանող անլար մոդուլ է, որը կարող է ճշգրիտ տեղորոշել փակ տարածքը
Ձայնի/ձայնի մակարդակի ցուցիչ `10 քայլ
![Ձայնի/ձայնի մակարդակի ցուցիչ `10 քայլ Ձայնի/ձայնի մակարդակի ցուցիչ `10 քայլ](https://i.howwhatproduce.com/images/011/image-31530-j.webp)
Ձայնի/ձայնի մակարդակի ցուցիչ. Այս նախագծում ես ձեզ ցույց կտամ, թե ինչպես կարելի է կառուցել ձայնի մակարդակի պարզ ցուցիչ `օգտագործելով գործառնական ուժեղացուցիչներ: Նշում. Հարցեր տալու համար այցելեք իմ կայքը ՝ Հարցրեք փորձագետին: Օգտակար լրացուցիչ տեսանյութեր. Հացի տախտակի վրա տեղադրված մոդելավորված շրջան (Proto
ՖՐԻZ - ԱՆԻՄԱՏՐՈՆԻ ՌՈԲՈՏԻԿ Գլուխ. 39 քայլ (նկարներով)
![ՖՐԻZ - ԱՆԻՄԱՏՐՈՆԻ ՌՈԲՈՏԻԿ Գլուխ. 39 քայլ (նկարներով) ՖՐԻZ - ԱՆԻՄԱՏՐՈՆԻ ՌՈԲՈՏԻԿ Գլուխ. 39 քայլ (նկարներով)](https://i.howwhatproduce.com/images/003/image-8054-12-j.webp)
ՖՐԻZ - ԱՆԻՄԱՏՐՈՆԱԿԱՆ ՌՈԲՈՏԻԿ ԳԼԽԱՎՈՐ. Հեյ, բարի գալուստ իմ հրահանգները: Եկեք պատրաստենք: Ֆրից - Animatronic Robotic Head- ը: Ֆրիցը բաց աղբյուր է և զարմանալիորեն զարմանալի: Այն կարող է օգտագործվել ամեն ինչի համար: Օրինակ ՝ մարդկային հույզեր սովորելը, ընդունող, Հելոուինի գամասեղը, սիրախաղը, երգիչ և շատ ավելին
Պտտվող տիկնիկի գլուխ. 5 քայլ (նկարներով)
![Պտտվող տիկնիկի գլուխ. 5 քայլ (նկարներով) Պտտվող տիկնիկի գլուխ. 5 քայլ (նկարներով)](https://i.howwhatproduce.com/images/004/image-10961-2-j.webp)
Պտտվող տիկնիկի գլուխ ՝ տիկնիկներ: Նրանք սիրուն են, այնպես չէ՞: Դե, ոչ այս մեկը: Այս տիկնիկը կատարյալ կլինի ձեզ համար Հելոուինի ժամանակ: Նրա պտտվող գլուխը և ցնցվող աչքերը սարսուռ կուղարկեն ձեր ողնաշարը: Իմ հրահանգով, ես ձեզ կառաջնորդեմ մի քանի պարզ քայլերի միջոցով ՝ ստեղծելու
Ունիվերսալ ականջակալ/ականջակալների ձայնի ձայնի կառավարում. 8 քայլ (նկարներով)
![Ունիվերսալ ականջակալ/ականջակալների ձայնի ձայնի կառավարում. 8 քայլ (նկարներով) Ունիվերսալ ականջակալ/ականջակալների ձայնի ձայնի կառավարում. 8 քայլ (նկարներով)](https://i.howwhatproduce.com/preview/how-and-what-to-produce/11123073-universal-earbudheadphone-volume-control-8-steps-with-pictures-j.webp)
Ունիվերսալ ականջակալ/ականջակալների ձայնի ձայնի կառավարում. Այսպիսով, ես Հոնկոնգից գնեցի PMP (դյուրակիր մեդիա նվագարկիչ), որպեսզի կարողանամ խաղալ NES- ի խաղերը ինքնաթիռի էմուլյատորի հետ, որտեղ հարմար էր: Երկար ճանապարհորդությունները, թռիչքները, սպասասրահները և այլն այն վայրերն են, որոնք ես սիրում եմ ժամանակ սպանել շարժական միջոցներով, բայց