Kazalo:

Manekenska glava z lokacijo zvoka s Kinectom: 9 korakov (s slikami)
Manekenska glava z lokacijo zvoka s Kinectom: 9 korakov (s slikami)

Video: Manekenska glava z lokacijo zvoka s Kinectom: 9 korakov (s slikami)

Video: Manekenska glava z lokacijo zvoka s Kinectom: 9 korakov (s slikami)
Video: Мужчина помогает умирающему тигру. Дальше произошло ужасное! 2024, Julij
Anonim
Zvočno lokalizirana manekenska glava s Kinectom
Zvočno lokalizirana manekenska glava s Kinectom

Spoznajte Margaret, preskusno lutko za sistem spremljanja utrujenosti voznika. Pred kratkim se je umaknila s svojih dolžnosti in našla pot v naš pisarniški prostor, od takrat pa je opozorila tiste, ki menijo, da je "grozljiva". V interesu pravičnosti sem ji dal možnost, da se sooči s svojimi tožilci; namesto da bi ti na videz sledila s svojim brezdušnim pogledom, zdaj to dejansko počne. Sistem uporablja niz mikrofonov Microsoft Kinect in servo, da jo usmeri v smeri ljudi, ki govorijo v njeni bližini.

1. korak: Teorija

Teorija
Teorija

Izračun kota

Ko nekaj slišimo, razen če je ta hrup neposredno pred nami, doseže eno uho pred drugim. Naši možgani zaznajo to zamudo pri prihodu in jo spremenijo v splošno smer, iz katere prihaja hrup, kar nam omogoča, da poiščemo vir. Enako lokalizacijo lahko dosežemo s parom mikrofonov. Razmislite o prikazanem diagramu, ki vsebuje par mikrofonov in vir zvoka. Če gledamo od zgoraj navzdol, so zvočni valovi krožni, če pa je razdalja do vira velika glede na razmik med mikrofoni, potem je z vidika naših senzorjev val približno raven. To je znano kot predpostavka o daljnem polju in poenostavlja geometrijo našega problema.

Zato predpostavimo, da je valovna črta ravna črta. Če zvok prihaja z desne strani, bo zadel mikrofon #2 v času t2 in mikrofon #1 v času t1. Razdalja d prevoženega zvoka med udarnim mikrofonom #2 in mikrofonom #1 je časovna razlika pri zaznavanju zvoka, pomnožena s hitrostjo zvoka v s:

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

To razdaljo lahko povežemo z razdaljo d 12 med mikrofonskim parom in kotom θ od para do vira zvoka z razmerjem:

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

Ker imamo samo dva mikrofona, bo pri izračunu prišlo do dvoumnosti glede tega, ali je vir zvoka pred nami ali za nami. V tem sistemu bomo domnevali, da je vir zvoka pred parom, in pritrdili kot med 0 stopinjami (popolnoma desno od para) do 180 stopinj (popolnoma levo).

Končno lahko za theta rešimo z inverznim kosinusom:

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

Če želimo narediti kot nekoliko bolj naraven, lahko od theta odštejemo 90 stopinj, tako da je 0 stopinj neposredno pred parom in +/- 90 stopinj polno levo ali desno. S tem se naš izraz spremeni iz inverznega kosinusa v inverzni sinus.

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

Iskanje zamude

Kot lahko vidite iz zgornje enačbe, moramo za kot rešiti le zamudo zvočnega vala, ki prihaja do mikrofona ena v primerjavi z mikrofonom dva; hitrost zvoka in razdalja med mikrofoni sta fiksni in znani. Da bi to dosegli, najprej vzorčimo zvočne signale na frekvenci fs, jih pretvorimo iz analognih v digitalne in podatke shranimo za kasnejšo uporabo. Vzorčujemo za časovno obdobje, znano kot okno za vzorčenje, ki je dovolj dolgo, da zajame značilnosti našega zvočnega vala. Na primer, naše okno bi lahko bilo zadnje pol sekunde zvočnih podatkov.

Po pridobitvi okenskih zvočnih signalov ugotovimo zamudo med obema z izračunom njune navzkrižne korelacije. Za izračun navzkrižne korelacije držimo okenski signal iz enega mikrofona pritrjen, drugi signal pa potisnemo vzdolž časovne osi od konca za prvim do konca pred prvim. Na vsakem koraku po diapozitivu vsako točko v našem fiksnem signalu pomnožimo z ustrezno točko v našem drsnem signalu, nato seštejemo vse rezultate, da izračunamo naš korelacijski koeficient za ta korak. Ko končamo s diapozitivom, korak, ki ima najvišji korelacijski koeficient, ustreza točki, kjer sta dva signala najbolj podobna, in na katerem koraku smo, koliko vzorcev n signal dva je odmaknjeno od signala 1. Če je n negativen, potem signal dva zaostaja za signalom ena, če je pozitiven, potem signal dva prednja, in če je nič, sta oba že poravnana. Ta vzorčni odmik pretvorimo v časovno zakasnitev z uporabo frekvence vzorčenja z razmerjem Δt = n/fs, tako da:

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

Korak: Komponente

Deli

  • Microsoft Kinect za Xbox 360, model 1414 ali 1473. Kinect ima štiri mikrofone, razporejene v linearni niz, ki ga bomo uporabljali.
  • Adapter za pretvorbo lastniškega priključka Kinect v napajanje USB + AC, kot je ta.
  • Raspberry Pi 2 ali 3 z Raspbian Stretch. Sprva sem poskušal uporabiti Pi 1 model B+, vendar ni bil dovolj močan. Vedno sem imel težave pri prekinitvi povezave s Kinectom.
  • Najbolj grozljiva manekenska glava, ki jo lahko najdete
  • Analogni servo dovolj močan, da vam obrne glavo manekena
  • 5V USB stenski polnilnik z dovolj jakosti za napajanje tako Pi kot servo in vsaj dveh vrat. (Uporabil sem 3-vratni vtič 5A, podoben temu
  • Podaljšek z dvema vtičnicama (ena za stenski polnilnik USB in druga za napajalnik Kinect AC).
  • Dva kabla USB: kabel tipa A do mikro-USB za napajanje Pi in drugi za napajanje servomotorja, ki ga ne smete razrezati
  • Platforma za vse, na kar lahko sedete, in še ena manjša platforma za glavo manekena. Kot osnovo sem uporabil plastični pladenj za serviranje in plastično ploščo kot platformo za glavo. Oba sta bila iz Walmarta in stala sta le nekaj dolarjev
  • 4x #8-32 1/2 "vijaki in matice za pritrditev servomotorja na večjo ploščad
  • 2x vijak M3 8 mm s podložkami (ali kakršne koli velikosti, ki jo potrebujete za pritrditev servo trupa na manjšo ploščad)
  • Dve mostičarski žici od moškega do moškega, ena rdeča in ena črna ter ena žica moški od moškega do moškega
  • Velcro trakovi z lepilno podlago
  • Električni trak
  • Lepilni trak za upravljanje kablov

Orodja

  • Dremel z rezalnim kolesom
  • Vrtalnik
  • Svedri 7/64 ", 11/16" in 5/16"
  • Pipa M3 (neobvezno, odvisno od servo trube)
  • Izvijač
  • Spajkalnik s spajkanjem
  • Roke za pomoč (neobvezno)
  • Marker
  • Kompas
  • Odstranjevalci žice
  • Multimeter (neobvezno)

OZO

  • Varnostna očala

  • Maska za obraz (za plastične kose z dremmel-ed).

Korak: Spodnji sklop platforme

Sklop spodnje ploščadi
Sklop spodnje ploščadi
Spodnji sklop platforme
Spodnji sklop platforme
Sklop spodnje ploščadi
Sklop spodnje ploščadi

Prvi del, ki ga bomo naredili, je spodnja platforma, ki bo držala naš Kinect, servo in vso našo elektroniko. Za izdelavo platforme boste potrebovali:

  • Plastični pladenj za serviranje
  • Servo
  • 4x #8-32 1/2 "vijaki z maticami
  • Dremel z rezalnim kolesom
  • Izvijač
  • Vrtalnik
  • 11/16 "sveder
  • Marker

Kako narediti

  1. Obrnite pladenj na glavo.
  2. Servo postavite stransko blizu zadnje strani pladnja, zagotovite, da izhodna naprava servo leži vzdolž osrednje črte pladnja, nato označite okoli dna servo.
  3. Z dremelom in rezalnim kolesom izrežite območje, ki ste ga označili, nato potisnite servo v režo.
  4. Označite središča montažnih lukenj na servo ohišju na pladnju, nato odstranite servo in te luknje izvrtajte s svojim svedrom 11/16 ". Tako tanko plastiko je pri vrtanju lukenj zelo enostavno razpokati, zato se mi zdi veliko varnejše za vrtenje svedra v obratni smeri in počasi odstranjevanje materiala. To je veliko počasneje kot pravilno vrtanje lukenj, vendar zagotavlja, da ni razpok.
  5. Servo vstavite nazaj v režo, nato pa ga pritrdite na pladenj z vijaki in maticami #8-32.

4. korak: Sestavljanje platforme glave

Sestava platforme za glavo
Sestava platforme za glavo
Sestava platforme za glavo
Sestava platforme za glavo
Sestava platforme za glavo
Sestava platforme za glavo
Sestava platforme za glavo
Sestava platforme za glavo

Naslednji del, ki ga bomo naredili, bo platforma za povezavo glave manekenke s servo pogonom. Za izdelavo platforme za glavo potrebujete:

  • Plastična plošča
  • Servo rog
  • 2x vijak M3 8 mm s podložkami
  • Izvijač
  • Vrtalnik
  • Svedri 7/64 "in 5/16"
  • Kompas
  • Dremel z rezalnim kolesom

Kako narediti

  1. Kompas nastavite na polmer podnožja glave manekena.
  2. S kompasom označite krog na sredini plošče. To bo dejanska velikost naše platforme za glavo.
  3. Z dremelom in rezalnim kolesom izrežite manjšo ploščad iz plošče.
  4. Izvrtajte sredino vaše nove platforme s svedrom 5/16 ". Tako bomo imeli dostop do vijaka, s katerim je naš servo rog pritrjen na naš servo. Da bi platformi zagotovili stabilnost, ko sem izvrtal luknjo, sem dal vrvico žico pod njim in izvrtano skozi sredino tuljave.
  5. Servo rog poravnajte s središčem platforme in označite dve luknji za pritrditev hupe na ploščad. Prepričajte se, da so te pritrdilne luknje dovolj oddaljene, da boste imeli prostor za glave vijakov in podložke M3.
  6. Izvrtajte te označene luknje s svedrom 7/64 ".
  7. Spodnja luknja mojega servoroga je bila gladka, torej ni imela navojev za vijak M3. Tako sem za vrtenje niti uporabil vrtalnik in pipo M3.
  8. Z vijaki in podložkami pritrdite servo rog na platformo glave.

5. korak: Servo napajalni kabel

Servo napajalni kabel
Servo napajalni kabel
Servo napajalni kabel
Servo napajalni kabel
Servo napajalni kabel
Servo napajalni kabel
Servo napajalni kabel
Servo napajalni kabel

Analogni servomotorji se običajno napajajo s 4,8-6V. Ker se bo Raspberry Pi že napajal s 5V iz USB -ja, bomo sistem poenostavili tudi z napajanjem servo iz USB -ja. Za to bomo morali spremeniti kabel USB. Za izdelavo servo napajalnega kabla boste potrebovali:

  • Rezervni kabel USB s koncem tipa A (takšen, ki je priključen na vaš računalnik)
  • Ena rdeča in ena črna mostična žica
  • Spajkalnik
  • Spajkanje
  • Odstranjevalci žice
  • Električni trak
  • Roke za pomoč (neobvezno)
  • Multimeter (neobvezno)

Kako narediti

  1. Odrežite priključek brez USB tipa A s kabla, nato odstranite malo izolacije, da razkrijete štiri notranje žice. Odrežite zaščito, ki obdaja izpostavljene žice.
  2. Običajno ima kabel USB štiri žice: dve za prenos in sprejem podatkov ter dve za napajanje in ozemljitev. Zanima nas moč in zemlja, ki sta običajno rdeča oziroma črna. Odstranite nekaj izolacije z rdeče in črne žice ter odrežite zeleno in belo žico. Če vas skrbi, da nimate ustreznih napajalnih in ozemljitvenih žic, lahko kabel priključite v napajalnik USB in z multimetrom preverite izhodno napetost.
  3. Nato odrežite en konec rdečih in črnih mostičnih kablov in odstranite nekaj izolacije.
  4. Zdaj zvijte izpostavljene črne žice mostička in kable USB. Prečkajte središča izpostavljenih žic in jih zavrtite drug okoli drugega. Nato na spajene žice nanesite spajkanje, da jih držite skupaj. Roke za pomoč bodo to olajšale, če držite kable na mestu.
  5. Ponovite 4. korak za rdeče žice.
  6. Odkrijte ožičenje z električnim trakom ali toplotno skrčljivo cevjo, če vam je všeč. Ti spoji bodo krhki, saj so žice tako majhne, zato na zunanjo izolacijo kabla USB dodajte drugo plast traku, ki drži mostične kable. Zaradi tega bo sklop bolj tog in zato manj verjetno, da bi se zlomil zaradi upogibanja.

Korak 6: Montaža elektronike

Montaža elektronike
Montaža elektronike
Montaža elektronike
Montaža elektronike
Montaža elektronike
Montaža elektronike

Nazadnje bomo vse združili, našo elektroniko in vse ostalo namestili na spodnjo platformo. Boste potrebovali:

  • Spodnja platforma
  • Platforma za glavo
  • Manekenska glava
  • Kinect z USB+napajalnikom
  • USB napajalnik
  • Podaljšek
  • Kabel mikro USB
  • Servo napajalni kabel
  • Malina Pi
  • Moški-do-ženski mostiček kabel
  • Lepilni Velcro
  • Škarje

Kako narediti

  1. Pi pritrdite na dno pladnja z Velcro.
  2. Napajalnik USB priključite z Velcro.
  3. Priključite servo in Pi v napajalnik USB.
  4. Priključite pin 12 (GPIO18) Pi na signalni kabel servo. To je šesti zatič na desni.
  5. Podaljšek podaljšajte skozi zadnji ročaj pladnja in priključite napajalnik USB na eno stran.
  6. Vzemite napajalnik Kinect USB+AC in priključite napajalnik na drugo stran podaljška, USB pa v Pi.
  7. Kinet Kinecta potisnite skozi sprednji ročaj pladnja in ga priključite na adapter Kinect.
  8. Za pritrditev kablov na spodnjo stran ploščadi sem uporabil lepilni trak. To ni videti najbolj elegantno, a na srečo je vse to skrito.
  9. Obrnite ploščad z desno stranjo navzgor in z velcro pritrdite Kinect na sprednjo stran ploščadi.
  10. Za pritrditev manekenske glave na platformo za glavo uporabite Velcro. Ko je vse poravnano, pa ločite oba kosa, da lahko dostopamo do vijaka za pritrditev servo roga. Vendar še ne privijajte hupe na servo, saj se moramo najprej prepričati, da je servo v sredinskem položaju, da lahko vse poravnamo. To bomo storili v naslednjem koraku.

7. korak: Programska oprema in algoritem

Programska oprema in algoritem
Programska oprema in algoritem

Pregled

Programska oprema za ta projekt je napisana v jeziku C ++ in je integrirana z robotskim operacijskim sistemom (ROS), okvirom za pisanje programske opreme za robotiko. V sistemu ROS je programska oprema sistema razdeljena na zbirko programov, imenovanih vozlišča, kjer vsako vozlišče izvaja določen pododdelek sistemskih funkcij. Podatki se med vozlišči prenašajo z metodo objave/naročnine, kjer jih objavijo vozlišča, ki proizvajajo podatke, in vozlišča, ki porabijo podatke, se nanjo naročijo. Ločevanje kode na ta način omogoča enostavno razširitev sistemske funkcionalnosti in omogoča skupno rabo vozlišč med sistemi za hitrejši razvoj.

V tem sistemu se ROS uporablja predvsem za ločevanje kode, ki izračuna smer prihoda (DOA) vira zvoka, od kode, ki nadzoruje servo, kar drugim projektom omogoča, da vključijo oceno Kinect DOA, ne da bi vključili servo kodo, ki je morda ne potrebujejo ali želijo. Če želite pogledati samo kodo, jo lahko najdete na GitHubu:

github.com/raikaDial/kinect_doa

Vozlišče Kinect DOA

Vozlišče kinect_doa je meso in kosti tega sistema, ki v bistvu počne vse, kar je zanimivo. Ob zagonu inicializira vozlišče ROS, kar omogoči vso magijo ROS, nato naloži vdelano programsko opremo v Kinect, tako da bodo zvočni tokovi na voljo. Nato ustvari novo nit, ki odpre zvočne tokove in začne brati podatke mikrofona. Kinect vzorči svoje štiri mikrofone pri frekvenci 16 kHz vsak, zato je dobro, da sta navzkrižna korelacija in zbiranje podatkov ločeni v ločenih niti, da se izognemo manjkajočim podatkom zaradi obremenitve računanja. Vzpostavitev povezave s Kinectom je dosežena z uporabo priljubljenega odprtokodnega gonilnika libfreenect.

Nit zbiranja izvede funkcijo povratnega klica vsakič, ko prejme nove podatke, oba shrani podatke in določi, kdaj oceniti DOA. Podatki iz vsakega mikrofona so shranjeni v tekočih pufrih, ki so enaki po dolžini našemu oknu za vzorčenje, ki je tukaj 8192 vzorcev. To pomeni, da se izračuna navzkrižna korelacija s podatki, ki so vredni približno pol sekunde, kar sem z eksperimentiranjem ugotovil kot dobro ravnovesje med zmogljivostjo in računalniško obremenitvijo. Ocena DOA se sproži za vsakih 4096 vzorcev s signalizacijo glavne niti, tako da se zaporedne navzkrižne korelacije prekrivajo za 50%. Razmislite o primeru, ko se prekrivanje ne pojavi, in zelo hitro ustvarite hrup, ki ga okno za vzorčenje prepolovi. Pred in po vašem značilnem zvoku bo verjetno bel šum, ki ga je težko uskladiti z navzkrižno korelacijo. Prekrivajoča se okna nam zagotavljajo popolnejši vzorec zvoka, povečujejo zanesljivost medsebojne korelacije in nam dajejo bolj izrazite lastnosti za postavitev.

Glavna nit čaka na signal iz zbirne niti, nato izračuna oceno DOA. Najprej pa preveri, ali se zajete valovne oblike bistveno razlikujejo od belega šuma ali ne. Brez tega preverjanja bi izračunali svojo oceno štirikrat na sekundo, ne glede na to, ali so bili zanimivi zvoki ali ne, naša manekenska glava pa bi bila spastična zmešnjava. Algoritem odkrivanja belega hrupa, ki se uporablja v tem sistemu, je prvi od dveh, navedenih tukaj. Izračunamo razmerje absolutnega integrala izpeljanke naše valovne oblike do njegovega absolutnega integrala; pri signalih z visoko vsebnostjo belih šumov je to razmerje višje kot pri manj hrupnih signalih. Z nastavitvijo praga za to razmerje, ki ločuje hrup od ne-hrupa, lahko sprožimo navzkrižno korelacijo le, kadar je to primerno. Seveda je to razmerje nekaj, kar je treba vsakič, ko se sistem premakne v novo okolje, znova nastaviti.

Ko ugotovi, da valovne oblike vsebujejo pomembno vsebino brez šuma, program nadaljuje z navzkrižnimi korelacijami. V te izračune pa so vgrajene tri pomembne optimizacije:

  1. Na Kinect-u so štirje mikrofoni, kar pomeni, da lahko skupaj križamo šest parov valovnih oblik. Če pa pogledate prostorsko razporeditev mikrofona, lahko vidite, da so mikrofoni 2, 3 in 4 zelo blizu drug drugemu. Pravzaprav so tako blizu, da bodo zaradi hitrosti zvoka in naše frekvence vzorčenja valovne oblike, prejete pri 2, 3 in 4, ločene z največ enim vzorcem naprej ali zadaj, kar lahko preverimo z izračunom maxlag = Δd *fs/vs, kjer je Δd ločitev mikrofonskega para, fs je frekvenca vzorčenja in vs hitrost zvoka. Tako je povezovanje parov med temi tremi neuporabno in le navzkrižno korelacijo mikrofona 1 z 2, 3 in 4.
  2. Znano je, da standardna navzkrižna korelacija zvočnih signalov slabo deluje v prisotnosti odmevov (odmevov). Robustna alternativa je znana kot splošna navzkrižna korelacija s fazno transformacijo (GCC-PHAT). Ta metoda se nanaša na uporabo utežne funkcije, ki poveča navzkrižne korelacije, kar olajša razlikovanje izvirnega signala od odmeva. Primerjal sem zmogljivost GCC-PHAT s preprosto navzkrižno korelacijo v odmevni komori (beri: betonska kopalnica se prenavlja) in ugotovil, da je GCC-PHAT 7-krat učinkovitejši pri oceni pravilnega kota.
  3. Pri izvajanju navzkrižne korelacije jemljemo dva signala, drsimo enega po drugem in na vsakem koraku pomnožimo vsako točko v našem fiksnem signalu z vsako točko v našem drsnem signalu. Za dva signala dolžine n to povzroči n^2 izračuna. To bi lahko izboljšali z izvajanjem navzkrižne korelacije v frekvenčni domeni, ki vključuje hitro fourierjevo pretvorbo (nlogn izračuni), pomnoži vsako točko v enem transformiranem signalu z ustrezno točko v drugi (n izračunov), nato izvedemo obratno fourierova pretvorba za vrnitev na časovno področje (nlogn izračuni), kar ima za posledico n+2*nlogn izračune, manjše od n^2. Vendar je to naiven pristop. Mikrofoni v našem nizu so tako blizu skupaj in hitrost zvoka je tako razmeroma počasna, da bodo zvočne valovne oblike že večinoma poravnane. Tako lahko svojo navzkrižno korelacijo okenimo samo tako, da upoštevamo odmike, ki so nekoliko naprej ali zadaj. Pri mikrofonih 1 in 4 mora zaostajanje pasti med +/- 12 vzorcev, kar pomeni, da moramo za vsako navzkrižno korelacijo opraviti le 24*n izračune, kar ima za posledico računske prihranke, če so naše valovne oblike daljše od 2900 vzorcev.

Ta sistem uporablja knjižnico minidsp, ki izvaja algoritem GCC-PHAT z optimizacijo 3.

Ko ugotovi zaostanek v signalih iz vsakega para mikrofonov, program izbere srednjo vrednost zamika, ga uporabi za izračun ocenjenega kota in objavi rezultat, tako da ga je mogoče uporabiti za nadzor servomotorja.

Servo krmilno vozlišče

V primerjavi z vozliščem kinect_doa je servo vozlišče razmeroma preprosto. Njegova naloga je, da vzame izključno ocenjeno vrednost DOA in premakne servo pod ta kot. Za dostop do strojnega PWM modula Raspberry Pi uporablja knjižnico wiringPi, s katero nastavi kot servo. Večino analognih servomotorjev krmili PWM signal s širino impulza od 1000 µs do 2000 µs, kar ustreza kotu od 0 ° do 180 °, vendar je bil servo, ki sem ga uporabil, nadzorovan s 500 µs do 2500 µs, kar ustreza kotu od 0 ° do 270 °. Tako je vozlišče nastavljivo za različno strojno opremo servo z nastavitvijo parametrov za najmanjšo širino impulza, največjo širino impulza in razliko med največjim in najmanjšim kotom. Poleg tega se servo ne premakne takoj do ciljnega kota, temveč se premakne proti kotu s nastavljivo hitrostjo, kar daje Margaret bolj postopno in grozljivo vibracijo (poleg tega pa zvok servo hitro premikanja naprej in nazaj zelo moti).

8. korak: Zgradba in namestitev

Namestitev odvisnosti:

Najprej namestite libfreenect. Zgraditi ga moramo iz vira, ker različica, ki jo dobite z upraviteljem paketov, ne vključuje podpore za zvok. To je zato, ker moramo v Kinect naložiti vdelano programsko opremo, da omogočimo zvok, zato razširjanje te vdelane programske opreme v nekaterih jurisdikcijah ni zakonito. Poleg tega se lahko izognemo gradnji primerov, ki zahtevajo OpenGL in prenapetost, nepotrebne za brezglave namestitve Raspbian.

sudo apt-get install git cmake build-bistvena 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 naredi sudo naredi namestitev sudo crectrect/lib kpnect/lib.rules /etc/udev/rules.d udevadm control --reload-rules && udevadm sprožilec

Nato moramo namestiti paket wiringPi, ki nam omogoča nadzor nad zatiči GPIO za Pi:

cd

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

Pritrdite manekensko glavo:

Z nameščenim wiringPi-jem se lahko zdaj hitro odpravimo nazaj do strojne opreme in pritrdimo glavo manekena na spodnjo ploščad. Če želite servo usmeriti prek ukazne vrstice, vnesite naslednje ukaze:

gpio pwm-ms

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

Če ni premika, je vaš servo verjetno že centriran. Zagotovo pa lahko nastavite servo na vrednost, ki ni na sredini, npr. gpio -g pwm 18 200, nato pa nastavite nazaj na 150.

Ko ste prepričani, da je servo centriran, pritrdite servo rog platforme glave na servo, tako da bo vaša glava manekenke gledala naravnost naprej. Nato privijte hupo na servo in pritrdite glavo s pomočjo Velcro nastavkov.

Namestite ROS:

Nato namestite ROS na svoj Pi. Odličen priročnik za namestitev najdete tukaj; za naš sistem ne potrebujemo OpenCV, zato lahko preskočite 3. korak. Ta gradnja bo trajala nekaj ur. Ko končate po navodilih za namestitev, dodajte vir namestitve v svoj bashrc, da bomo lahko uporabili naše na novo nameščene pakete ROS:

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

Zgradite paket Kinect DOA:

Po vsem tem naredite mačji delovni prostor za naš projekt in vnesite imenik src:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Koda za ta projekt je v paketu kinect_doa, zato jo klonirajte v imenik src vašega novega delovnega prostora:

git clone

Paket robot_upstart ponuja preprosto orodje za namestitev zagonskih datotek, tako da se lahko zaženejo ob zagonu, zato tudi to klonirajte v svoj delovni prostor:

git clone

Zdaj lahko kodo projekta sestavimo tako, da pokličemo catkin_make iz imenika na najvišji ravni našega delovnega prostora, nato pa izvorno izdelamo našo zgradbo, da bodo naši paketi na voljo:

cd ~/kinect_doa_ws

catkin_make odmev "vir /home/pi/kinect_doa_ws/devel/setup.bash" >> ~/.bashrc

Tek in uglaševanje:

Ob predpostavki, da je vse priključeno in vklopljeno, bi morali zdaj zagnati sistem in imeti glas, ki ga Kinect sledi! Če pa imate Kinect 1473, najprej odprite datoteko ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch v urejevalniku besedil in nastavite parameter using_kinect_1473 na true. Poleg tega, če ste uporabili drugačen servo kot jaz, je to verjetno standardni analogni servo, zato v datoteki za zagon spremenite parameter min_us na 1000, max_us na 2000 in max_deg na 180.

roslaunch kinect_doa kinect_doa.launch

Nekaj časa se igrajte z njim. Če menite, da je sistem preveč občutljiv (gledate v naključnih smereh, ki ne ustrezajo glasom ali značilnim zvokom), poskusite spremeniti parameter white_noise_ratio v zagonski datoteki in znova zagnati sistem, dokler odzivnost ni na ravni, ki vam ustreza. Z zvišanjem razmerja bo sistem manj odziven in obratno. To nastavitev boste verjetno morali izvesti vsakič, ko sistem premaknete na drugo mesto, da dosežete želeno zmogljivost.

Za zagon programa, ko vklopimo Pi, za namestitev zagonske datoteke uporabimo paket robot_upstart. Če ROS trenutno ne deluje, ga zaženite z ukazom roscore. Nato odprite nov terminal in namestite zagon z:

rosrun robot_upstart namestite kinect_doa/launch/kinect_doa.launch -root uporabnika --symlink

Namesto kopiranja ustvarimo simbolno povezavo do zagonske datoteke, tako da lahko spremenimo parametre z urejanjem ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch.

9. korak: Skrivanje v pisarni

Skrivanje v pisarni
Skrivanje v pisarni

Zdaj pa zabavni del. Po urah se odpravite na delo in skrivaj nastavite glavo manekena. Potem se le usedite in poglejte, koliko časa traja, da se vaši sodelavci ujamejo! Vaša nova stvaritev bo zagotovo obrnila nekaj glav …

Priporočena: