INHOUDSOPGAWE:

Klank lokaliseer Mannequin kop met Kinect: 9 stappe (met foto's)
Klank lokaliseer Mannequin kop met Kinect: 9 stappe (met foto's)

Video: Klank lokaliseer Mannequin kop met Kinect: 9 stappe (met foto's)

Video: Klank lokaliseer Mannequin kop met Kinect: 9 stappe (met foto's)
Video: SCP 2718 Что происходит после | Класс объекта неизвестен | infohazard scp 2024, Julie
Anonim
Klank lokaliseer Mannequin -kop met Kinect
Klank lokaliseer Mannequin -kop met Kinect

Ontmoet Margaret, 'n toets -dummy vir 'n bestuurder -moegheidstelsel. Sy het onlangs uit haar pligte teruggetree en haar weg gevind na ons kantoorruimte, en het sedertdien die aandag getrek van diegene wat dink sy is 'creepy'. In die belang van geregtigheid het ek haar die vermoë gegee om haar aanklaers reguit te trotseer; in plaas daarvan om jou skynbaar met haar siellose blik te volg, doen sy dit nou eintlik. Die stelsel gebruik die mikrofoonreeks van 'n Microsoft Kinect en 'n servo om haar te stuur in die rigting van mense wat naby haar praat.

Stap 1: Teorie

Teorie
Teorie

Berekening van die hoek

As ons iets hoor, bereik die een oor voor die ander, tensy die geraas direk voor ons is. Ons brein sien die aankomsvertraging om en verander dit in 'n algemene rigting waaruit geraas kom, sodat ons die bron kan vind. Ons kan presies dieselfde soort lokalisering bereik met behulp van 'n paar mikrofone. Kyk na die diagram wat 'n mikrofoonpaar en 'n klankbron bevat. As ons van bo na onder kyk, is klankgolwe sirkelvormig, maar as die afstand tot die bron groot is in verhouding tot die afstand tussen die mikrofone, is die golf uit die oogpunt van ons sensors ongeveer vlak. Dit staan bekend as die ver-veld aanname en vereenvoudig die meetkunde van ons probleem.

Gestel dus dat die golffront 'n reguit lyn is. As die geluid van regs af kom, raak dit mikrofoon #2 op tyd t2 en mikrofoon #1 op tyd t1. Die afstand d wat die geluid afgelê het tussen mikrofoon #2 en mikrofoon #1, is die tydsverskil om die klank op te spoor vermenigvuldig met die spoed van klank v s:

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

Ons kan hierdie afstand in verband bring met die afstand d 12 tussen die mikrofoonpaar en die hoek θ van die paar na die klankbron met die verhouding:

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

Omdat ons net twee mikrofone het, is daar onduidelikheid in ons berekening of die klankbron voor of agter ons is. In hierdie stelsel sal ons aanvaar dat die klankbron voor die paar is en die hoek tussen 0 grade (heeltemal regs van die paar) tot 180 grade (heeltemal links) vasdruk.

Ten slotte kan ons vir theta oplos deur die inverse cosinus te neem:

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

Om die hoek 'n bietjie meer natuurlik te maak, kan ons 90 grade van theta aftrek, sodat 0 grade direk voor die paar is en +/- 90 grade links of regs is. Dit draai ons uitdrukking van die inverse cosinus na die inverse sinus.

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

Vind die vertraging

Soos u kan sien uit die vergelyking hierbo, is alles wat ons vir die hoek moet oplos, die vertraging in die klankgolf wat by mikrofoon een kom in vergelyking met mikrofoon twee; die spoed van klank en die afstand tussen die mikrofone is vas en bekend. Om dit te bereik, neem ons eers die klankseine met die frekwensie fs, omskakel dit van analoog na digitaal en stoor die data vir later gebruik. Ons neem 'n monster vir 'n tydperk wat bekend staan as 'n monstervenster, wat lank genoeg is om kenmerkende kenmerke van ons klankgolf vas te vang. Ons venster kan byvoorbeeld die oudio -data van die laaste halfsekonde wees.

Nadat ons die klankseine met venster gekry het, vind ons die vertraging tussen die twee deur die kruiskorrelasie daarvan te bereken. Om die kruiskorrelasie te bereken, hou ons die venstersignaal van die een mikrofoon vas en skuif die tweede sein langs die tydas van agter tot by die eerste tot by die eerste. By elke stap langs ons skyfie vermenigvuldig ons elke punt in ons vaste sein met die ooreenstemmende punt in ons glysein, en som dan al die resultate saam om ons korrelasiekoëffisiënt vir daardie stap te bereken. Na voltooiing van ons skyfie, stem die stap met die hoogste korrelasiekoëffisiënt ooreen met die punt waar die twee seine die meeste ooreenstem, en op watter stap ons sê, hoeveel monsters n sein twee word verreken van sein 1. As n negatief is, dan bly sein twee agter sein een, as dit positief is, dan is sein twee voor, en as dit nul is, is die twee reeds in lyn. Ons omskakel hierdie steekproefverrekening na 'n tydvertraging met behulp van ons bemonsteringsfrekwensie met die verhouding Δt = n/fs, dus:

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

Stap 2: Komponente

Dele

  • Microsoft Kinect vir Xbox 360, model 1414 of 1473. Die Kinect het vier mikrofone in 'n lineêre skikking wat ons sal gebruik.
  • Adapter om die eie aansluiting van die Kinect na USB + wisselstroom soos hierdie om te skakel.
  • Raspberry Pi 2 of 3 met Raspbian Stretch. Ek het oorspronklik probeer om 'n Pi 1 Model B+te gebruik, maar dit was nie kragtig genoeg nie. Ek het voortdurend probleme ondervind met die ontkoppeling van die Kinect.
  • Die grillerigste mannekynkop wat jy kan vind
  • 'N Analoog servo wat sterk genoeg is om jou mannekynkop te draai
  • 'N 5V USB -muurlaaier met genoeg stroom om beide die Pi en die servo aan te dryf en ten minste twee poorte. (Ek het 'n 5A 3-poortprop soortgelyk aan hierdie gebruik
  • 'N Verlengsnoer met twee afsetpunte (een vir die USB -muurlaaier en die ander vir die Kinect -wisselstroomadapter.
  • Twee USB-kabels: 'n tipe A na mikro-USB-kabel om die Pi aan te dryf en 'n ander om die servo aan te dryf wat u nie omgee nie
  • 'N Platform vir alles om op te sit en nog 'n kleiner platform vir die mannekynkop. Ek het 'n plastiese opdienbak as die basis gebruik en 'n plastiekbord as die kopplatform. Albei was van Walmart en kos slegs 'n paar dollar
  • 4x #8-32 1/2 "boute en moere om u servo aan die groter platform vas te maak
  • 2x M3 8 mm bout met ringe (of watter grootte u ook al benodig om u servohoring aan die kleiner platform te heg)
  • Twee man-tot-man trui drade, een rooi en een swart, en een vrou-tot-man trui
  • Kleefbandstroke met kleefsteun
  • Elektriese band
  • Buisband vir kabelbestuur

Gereedskap

  • Dremel met snywiel
  • Boor
  • 7/64 ", 11/16" en 5/16 "boorpunte
  • M3 -kraan (opsioneel, afhangende van u servohoring)
  • Skroewedraaier
  • Soldeerbout met soldeer
  • Helpende hande (opsioneel)
  • Merker
  • Kompas
  • Draadstroppers
  • Multimeter (opsioneel)

PPE

  • Veiligheidsbril

  • Gesigsmasker (vir dremmel-plastiekstukke).

Stap 3: Laer platformversameling

Onderste platform
Onderste platform
Onderste platform
Onderste platform
Onderste platform
Onderste platform

Die eerste deel wat ons maak, is die onderste platform, wat ons Kinect, servo en al ons elektronika bevat. Om die platform te maak, benodig u:

  • Plastiese opdienbak
  • Servo
  • 4x #8-32 1/2 "boute met moere
  • Dremel met snywiel
  • Skroewedraaier
  • Boor
  • 11/16 "boor
  • Merker

Hoe om te maak

  1. Draai jou skinkbord onderstebo.
  2. Plaas u servo sywaarts naby die agterkant van die skinkbord, maak seker dat die uitset van die servo langs die middellyn van die skinkbord lê en merk dan rondom die basis van die servo.
  3. Sny die gebied wat u gemerk het met u dremel en snywiel uit en skuif u servo in die gleuf.
  4. Merk die middelpunte van die montagegate van die servo -behuising op die skinkbord, verwyder dan die servo en boor die gate met u 11/16 "boorpunt. Dit is baie maklik om dun plastiek so te kraak as u gate boor, so ek vind dit baie veiliger om die boor in trurat te laat loop en die materiaal stadig weg te maak. Dit is baie stadiger as om die gate behoorlik te boor, maar dit verseker dat daar geen krake is nie.
  5. Plaas u servo terug in die gleuf en monteer dit dan op die skinkbord met die boute en moere #8-32.

Stap 4: Hoofplatformsamestelling

Hoofplatform Vergadering
Hoofplatform Vergadering
Hoofplatform Vergadering
Hoofplatform Vergadering
Hoofplatform Vergadering
Hoofplatform Vergadering
Hoofplatform Vergadering
Hoofplatform Vergadering

Die volgende deel wat ons maak, is 'n platform om die mannekynkop aan die servo te koppel. Om die hoofplatform te maak, benodig u:

  • Plastiek bord
  • Servo horing
  • 2x M3 8 mm bout met ringe
  • Skroewedraaier
  • Boor
  • 7/64 "en 5/16" boorpunte
  • Kompas
  • Dremel met snywiel

Hoe om te maak

  1. Stel u kompas op die radius van die basis van u mannekynkop.
  2. Gebruik u kompas om 'n sirkel in die middel van die bord te merk. Dit is die werklike grootte van ons kopplatform.
  3. Gebruik u dremel en snywiel om die kleiner platform uit die bord te sny.
  4. Boor die middel van u nuwe platform uit met 'n 5/16 "boorpunt. Dit gee ons toegang tot die skroef wat ons servohoring aan ons servo bevestig. Om die platform stabiliteit te gee terwyl ek die gat boor, het ek 'n spoel draad daaronder en deur die middel van die spoel geboor.
  5. Rangskik jou servohoring met die middel van die platform en merk twee gate om die horing aan die platform vas te maak. Maak seker dat hierdie bevestigingsgate ver genoeg uitmekaar is, sodat daar plek is vir u M3 -boutkoppe en ringe.
  6. Boor hierdie gemerkte gate met 'n 7/64 "boorpunt.
  7. Die onderste gat van my servohoring was glad, dit wil sê, dit het nie die drade vir die M3 -bout nie. Ek het dus my boor en 'n M3 -kraan gebruik om die drade te maak.
  8. Gebruik die boute en ringe om die servohoring aan die kopplatform vas te maak.

Stap 5: Servokragkabel

Servokragkabel
Servokragkabel
Servokragkabel
Servokragkabel
Servokragkabel
Servokragkabel
Servokragkabel
Servokragkabel

Analoog servo's word tipies aangedryf met 4.8-6V. Aangesien die Raspberry Pi reeds deur 5V via USB aangedryf word, sal ons ons stelsel vereenvoudig deur die servo ook van USB af te skakel. Om dit te kan doen, moet ons 'n USB -kabel verander. Om die servokragkabel te maak, benodig u:

  • 'N Ondersteunde USB-kabel met 'n tipe A-einde (die tipe wat by u rekenaar aangesluit kan word)
  • Een rooi en een swart springdraad
  • Soldeerbout
  • Soldeer
  • Draadstroppers
  • Elektriese band
  • Helpende hande (opsioneel)
  • Multimeter (opsioneel)

Hoe om te maak

  1. Sny die nie-USB-tipe A-aansluiting van u kabel af en verwyder dan 'n bietjie isolasie om die vier binnedrade te openbaar. Sny die afskerming rondom die blootgestelde drade af.
  2. Gewoonlik sal die USB -kabel vier drade hê: twee vir data -oordrag en ontvangs en twee vir krag en grond. Ons is geïnteresseerd in krag en grond, wat onderskeidelik rooi en swart is. Trek die isolasie van die rooi en swart drade af en sny die groen en wit drade af. As u bekommerd is dat u nie die regte krag- en aarddrade het nie, kan u u kabel in u USB -adapter aansluit en die uitgangsspanning met 'n multimeter kontroleer.
  3. Sny dan die een kant van u rooi en swart springkabels af en verwyder die isolasie.
  4. Draai nou die blootgestelde swart drade van u trui en USB -kabels saam. Kruis die middelpunte van die blootgestelde drade en draai dit om mekaar. Smeer dan soldeer op die gekoppelde drade om dit bymekaar te hou. Helpende hande sal dit makliker maak deur u kabels op hul plek te hou.
  5. Herhaal stap 4 vir die rooi drade.
  6. Bedek die blootgestelde bedrading met elektriese band of krimpkous as u lus is. Hierdie verbindings sal broos wees, aangesien die drade so klein is, en voeg 'n tweede laag band vas wat die jumperkabels aan die buitekant van die USB -kabel hou. Dit sal die samestelling stewiger maak en dus minder geneig wees om te buig as dit gebuig word.

Stap 6: Elektroniese montering

Elektroniese montering
Elektroniese montering
Elektroniese montering
Elektroniese montering
Elektroniese montering
Elektroniese montering

Uiteindelik bring ons alles bymekaar, monteer ons elektronika en alles op die onderste platform. Jy sal nodig hê:

  • Laer platform
  • Hoofplatform
  • Mannequin kop
  • Kinect met USB+wisselstroomadapter
  • USB -kragadapter
  • Verlengkoord
  • Mikro USB kabel
  • Servokragkabel
  • Framboos Pi
  • Man-tot-vroulike springkabel
  • Kleefband
  • Skêr

Hoe om te maak

  1. Monteer die Pi aan die onderkant van die skinkbord met klittenband.
  2. Koppel die USB -kragadapter met klittenband.
  3. Koppel servo en Pi aan op die USB -kragadapter.
  4. Koppel pen 12 (GPIO18) van die Pi aan die seinkabel van die servo. Dit is die sesde pen aan die regterkant.
  5. Slang jou verlengsnoer deur die agterste handvatsel van die skinkbord en steek die USB -kragadapter aan die een kant.
  6. Neem die Kinect USB+wisselstroomadapter en steek die kragadapter aan die ander kant van die verlengsnoer en die USB in die Pi.
  7. Slang die koord van die Kinect deur die voorste handvatsel van die skinkbord en steek dit in die Kinect -adapter.
  8. Ek het kleefband gebruik om die kabels aan die onderkant van die platform vas te hou. Dit lyk nie die elegantste nie, maar gelukkig is dit alles weggesteek.
  9. Draai die platform regs na bo en gebruik Velcro om die Kinect aan die voorkant van die platform te monteer.
  10. Gebruik klittenband om die mannekynkop op die kopplatform te monteer. As alles eers in orde is, skei die twee stukke, sodat ons toegang kan kry tot die monteerbout van die servohoring. Moet egter nog nie die horing aan die servo vasskroef nie, want ons moet eers seker maak dat die servo eers in die middelste posisie is, sodat ons alles in lyn kan bring. Ons sal dit in 'n latere stap doen.

Stap 7: Sagteware en algoritme

Sagteware en algoritme
Sagteware en algoritme

Oorsig

Die sagteware vir hierdie projek is in C ++ geskryf en is geïntegreer met Robot Operating System (ROS), 'n raamwerk vir die skryf van robotika sagteware. In ROS word die sagteware vir 'n stelsel opgebreek in 'n versameling programme genaamd nodes, waar elke knoop 'n spesifieke onderafdeling van die funksionaliteit van die stelsel implementeer. Data word tussen nodusse oorgedra deur 'n publiseer-/intekeningsmetode te gebruik, waar nodusse wat die data produseer, dit publiseer en nodusse wat die data verbruik, daarop inteken. Deur die kode op hierdie manier te ontkoppel, kan die stelselfunksionaliteit maklik uitgebrei word en kan nodusse tussen stelsels gedeel word vir vinniger ontwikkeling.

In hierdie stelsel word ROS hoofsaaklik gebruik om die kode wat die aankomsrigting (DOA) van die klankbron bereken, te skei van die kode wat die servo beheer, sodat ander projekte die Kinect DOA -skatting kan insluit sonder om servokode in te sluit wat hulle nie nodig mag hê nie. As u na die kode self wil kyk, kan u dit op GitHub vind:

github.com/raikaDial/kinect_doa

Kinect DOA Node

Die kinect_doa -knoop is die vleis en bene van hierdie stelsel, wat basies alles interessant doen. By die opstart initialiseer dit die ROS -knoop, wat al die ROS -magie moontlik maak, en laai dan firmware op na die Kinect sodat die klankstrome beskikbaar word. Dit laat 'n nuwe draad ontstaan wat die klankstrome oopmaak en in mikrofoondata begin lees. Die Kinect neem sy vier mikrofone met 'n frekwensie van 16 kHz elk, daarom is dit goed om die kruiskorrelasie en die data-insameling in afsonderlike drade te hê om ontbrekende data te voorkom as gevolg van rekenkrag. Interaksie met die Kinect word bewerkstellig met libfreenect, 'n gewilde open source-bestuurder.

Die versameldraad voer 'n terugbelfunksie uit wanneer nuwe data ontvang word, en beide stoor die data en bepaal wanneer die DOA geraam moet word. Die data van elke mikrofoon word in rollende buffers gestoor wat ewe lank is as ons monstervenster, wat 8192 monsters bevat. Dit beteken die berekening van die kruiskorrelasie met die waarde van ongeveer die afgelope halfsekonde, wat ek deur middel van eksperimentering as 'n goeie balans tussen prestasie en rekenkrag gevind het. Die DOA-skatting word vir elke 4096 monsters geaktiveer deur die hoofdraad aan te dui, sodat opeenvolgende kruiskorrelasies met 50%oorvleuel. Oorweeg 'n geval waar daar geen oorvleueling is nie, en u maak 'n baie vinnige geluid wat deur die monsternemingsvenster middeldeur gesny word. Voor en na u kenmerkende klank sal waarskynlik wit geraas wees, wat moeilik kan wees om by die kruiskorrelasie te pas. Deur die oorvleuelende vensters word ons 'n meer volledige voorbeeld van die klank gegee, wat die betroubaarheid van ons kruiskorrelasie verhoog deur ons meer duidelike kenmerke te gee.

Die hoofdraad wag op die sein van die versameldraad en bereken dan die DOA -skatting. Eerstens kyk dit egter of die vasgelegde golfvorme aansienlik verskil van wit geraas. Sonder hierdie toets sou ons ons skatting vier keer per sekonde bereken, ongeag of daar interessante geluide was of nie, en ons mannekynkop sou 'n spastiese gemors wees. Die algoritme vir opsporing van wit geraas wat in hierdie stelsel gebruik word, is die eerste van die twee wat hier gelys word. Ons bereken die verhouding van die absolute integraal van die afgeleide van ons golfvorm tot die absolute integraal daarvan; Vir seine met 'n hoë witruisinhoud is hierdie verhouding hoër as vir minder raserige seine. Deur 'n drempel te stel vir hierdie verhouding wat geraas van nie-geraas skei, kan ons die kruiskorrelasie slegs veroorsaak wanneer dit toepaslik is. Hierdie verhouding is natuurlik iets wat herinstel moet word elke keer as die stelsel na 'n nuwe omgewing verskuif word.

Nadat die program bepaal is dat die golfvorme aansienlike nie-geraasinhoud bevat, gaan die program voort met die kruiskorrelasies. Daar is egter drie belangrike optimalisasies in hierdie berekeninge ingebou:

  1. Daar is vier mikrofone op die Kinect, wat beteken dat daar ses totale pare golfvorme is wat ons kan kruiskorreleer. As u egter na die ruimtelike rangskikking van die mikrofoonreeks kyk, kan u sien dat mikrofone 2, 3 en 4 baie na aan mekaar is. Trouens, hulle is so naby dat as gevolg van die klanksnelheid en ons bemonsteringsfrekwensie die golfvorme wat by 2, 3 en 4 ontvang word, hoogstens een monster voor of agter geskei word, wat ons kan verifieer met die berekening maxlag = Δd *fs/vs, waar Δd die skeiding van die mikrofoonpaar is, is fs die bemonsteringsfrekwensie en vs is die spoed van klank. Die korrelasie van pare tussen hierdie drie is dus nutteloos, en ons hoef slegs mikrofoon 1 met 2, 3 en 4 te kruiskorreleer.
  2. Dit is bekend dat standaard kruiskorrelasie van klankseine swak presteer in die teenwoordigheid van nagalm (eggo's). 'N Robuuste alternatief staan bekend as die algemene kruiskorrelasie met fasetransformasie (GCC-PHAT). Hierdie metode kom daarop neer dat 'n weegfunksie toegepas word wat pieke in die kruiskorrelasie versterk, wat dit makliker maak om die oorspronklike sein van echo's te onderskei. Ek het die prestasie van GCC-PHAT vergelyk met die eenvoudige kruiskorrelasie in 'n nagalmkamer (lees: betonbadkamer wat opgeknap word) en het gevind dat GCC-PHAT 7 keer meer effektief was om die regte hoek te skat.
  3. As ons die kruiskorrelasie uitvoer, neem ons die twee seine, skuif die een langs die ander en vermenigvuldig elke punt in ons vaste sein met elke punt in ons glysein. Vir twee seine van lengte n, lei dit tot n^2 berekeninge. Ons kan dit verbeter deur eerder die kruiskorrelasie in die frekwensiedomein uit te voer, wat 'n vinnige fouriertransformasie (nlogn-berekeninge) behels, elke punt in een getransformeerde sein te vermenigvuldig met die ooreenstemmende punt in die ander (n berekeninge) en dan 'n inverse fourier transform om terug te gaan na die tydsgebied (nlogn berekeninge), wat n+2*nlogn berekeninge tot gevolg het, minder as n^2. Dit is egter die naïewe benadering. Die mikrofone in ons skikking is so naby aan mekaar en die klanksnelheid is so relatief stadig dat die klankgolfforme reeds meestal in lyn sal wees. Ons kan dus ons kruiskorrelasie oopmaak om slegs die offset te oorweeg wat effens voor of agter is. Vir mikrofone 1 en 4 moet die vertraging tussen +/- 12 monsters val, wat beteken dat ons vir elke kruiskorrelasie slegs 24*n berekeninge hoef uit te voer, wat berekeningsbesparings tot gevolg het as ons golfvorme langer as 2900 monsters is.

Hierdie stelsel maak gebruik van die minidsp-biblioteek, wat die GCC-PHAT-algoritme implementeer met optimalisering 3.

Sodra die vertraging in die seine van elke mikrofoonpaar gevind is, kies die program die mediaanwaarde vir vertraging, gebruik dit om die geskatte hoek te bereken en publiseer die resultaat sodat dit gebruik kan word om die servo te beheer.

Servokontroleknoop

In vergelyking met die kinect_doa -knoop, is die servoknoop relatief eenvoudig. Die taak is om slegs die geskatte DOA te neem en die servo na die hoek te skuif. Dit gebruik die wiringPi -biblioteek om toegang te verkry tot die hardeware PWM -module van die Raspberry Pi en dit gebruik om die hoek van die servo in te stel. Die meeste analoog servo's word beheer deur 'n PWM -sein met 'n pulswydte wat wissel van 1000 µs tot 2000 µs, wat ooreenstem met 'n hoek van 0 ° tot 180 °, maar die servo wat ek gebruik het, word beheer met 500 µs tot 2500 µs, wat ooreenstem met 'n hoek van 0 ° tot 270 °. Die node is dus konfigureerbaar vir verskillende servo -hardeware deur parameters in te stel vir die minimum pulswydte, maksimum pulswydte en die verskil tussen die maksimum en minimum hoeke. Boonop beweeg die servo nie onmiddellik na die doelhoek nie, maar beweeg hy eerder in 'n instelbare snelheid na die hoek, wat Margaret 'n meer geleidelike, grillerige atmosfeer gee (plus, die geluid van 'n servo wat vinnig heen en weer beweeg, word baie irriterend)).

Stap 8: Bou en installering

Installeer afhanklikhede:

Installeer eers libfreenect. Ons moet dit uit die bron bou, want die weergawe wat u met die pakketbestuurder kan kry, bevat nie ondersteuning vir klank nie. Dit is omdat ons firmware na die Kinect moet oplaai om klank moontlik te maak, en die herverdeling van hierdie firmware is nie wettig in sekere jurisdiksies nie. Boonop kan ons vermy om voorbeelde te bou wat OpenGL en glut vereis, onnodig vir koplose Raspbian -installasies.

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 maak sudo make install sudo cp ~/libfreenect/platform/linux/udev/51 -kin.rules /etc/udev/rules.d udevadm-beheer-herlaai-reëls en& udevadm-sneller

Vervolgens moet ons die wiringPi -pakket installeer, waarmee ons die GPIO -penne van die Pi kan beheer:

cd

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

Heg Mannequin -kop vas:

Met wiringPi geïnstalleer, kan ons nou 'n vinnige ompad terugneem na hardeware-land om die mannekynkop op die onderste platform vas te maak. Om die servo te sentreer via die opdragreël, voer die volgende opdragte in:

gpio pwm-ms

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

As daar geen beweging is nie, is u servo waarskynlik reeds gesentreer. Om seker te wees, kan u die servo egter op 'n nie-sentrale waarde stel, bv. gpio -g pwm 18 200, en stel dit dan terug op 150.

As u seker is dat die servo in die middel is, bevestig die servohoring van die kopplatform aan die servo, sodat u mannekynkop reguit vorentoe sal kyk. Skroef dan die horing op die servo vas en maak u kop vas met die klittenbandstukke.

Installeer ROS:

Installeer vervolgens ROS op u Pi. U kan hier 'n uitstekende installeringsgids vind; vir ons stelsel het ons nie OpenCV nodig nie, sodat u stap 3. kan oorslaan. Hierdie opbou sal 'n paar uur neem om te voltooi. As u klaar is met die installeringsgids, voeg die installering by u bashrc, sodat ons ons nuut geïnstalleerde ROS -pakkette kan gebruik:

eggo "bron /opt/ros/kinetic/setup.bash" >> ~/.bashrc

Bou Kinect DOA -pakket:

Na alles wat gedoen is, maak 'n werkplek vir ons projek en voer die src -gids in:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Die kode vir hierdie projek is vervat in die kinect_doa -pakket, dus kloon dit in die src -gids van u nuwe werkruimte:

git -kloon

Die robot_upstart -pakket bied 'n maklik om te gebruik hulpmiddel om lanseerlêers te installeer sodat dit by die aanvang kan loop, en kloon dit dus ook in u werkruimte:

git -kloon

Nou kan ons die projekkode bou deur catkin_make uit die gids op die hoogste vlak van ons werkruimte te bel, en dan ons build te kry sodat ons pakkette beskikbaar is:

cd ~/kinect_doa_ws

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

Hardloop en stem:

Gestel alles is ingeprop en aangeskakel, moet u die stelsel nou kan begin en die Kinect -snit laat stem! As u egter 'n Kinect 1473 het, moet u eers die lêer ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch in 'n teksredigeerder oopmaak en die parameter met behulp van_kinect_1473 op true stel. As u ook 'n ander servo as ek gebruik het, is dit waarskynlik 'n standaard analoog servo, dus verander die parameter min_us na 1000, max_us na 2000 en max_deg na 180 terwyl u in die bekendstellingslêer is.

roslaunch kinect_doa kinect_doa.launch

Speel 'n rukkie daarmee. As u voel dat die stelsel te sensitief is (in willekeurige rigtings kyk wat nie ooreenstem met stemme of kenmerkende geluide nie), probeer dan om die parameter white_noise_ratio in die bekendstellingslêer te verander en die stelsel weer te begin totdat die reaksie op 'n vlak is waarmee u gemaklik is. Deur die verhouding te verhoog, sal die stelsel minder reageer en omgekeerd. U sal waarskynlik hierdie instelling moet uitvoer wanneer u die stelsel na 'n ander plek verskuif om die gewenste prestasie te kry.

Om die program te begin as ons die Pi aanskakel, gebruik ons die robot_upstart -pakket om ons bekendstellingslêer te installeer. As ROS tans nie werk nie, begin dit met die opdrag roscore. Maak dan 'n nuwe terminale oop en installeer die bekendstelling met:

rosrun robot_upstart installeer kinect_doa/launch/kinect_doa.launch -gebruiker wortel -simlink

Ons skep 'n simlink na die bekendstellingslêer in plaas daarvan om dit te kopieer, sodat ons parameters kan verander deur ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch te wysig.

Stap 9: Verberg dit by die kantoor

Steek dit weg by die kantoor
Steek dit weg by die kantoor

Nou vir die lekker deel. Gaan na ure aan die werk en sit u mannekynkop in die geheim op. Sit dan net terug en kyk hoe lank dit neem voordat u medewerkers dit regkry! U sal sekerlik 'n paar koppe draai …

Aanbeveel: