Sadržaj:

Maneken glava koja lokalizira zvuk s Kinectom: 9 koraka (sa slikama)
Maneken glava koja lokalizira zvuk s Kinectom: 9 koraka (sa slikama)

Video: Maneken glava koja lokalizira zvuk s Kinectom: 9 koraka (sa slikama)

Video: Maneken glava koja lokalizira zvuk s Kinectom: 9 koraka (sa slikama)
Video: Подвесной манекен onePRO FILIPPOV из натуральной кожи 2024, Srpanj
Anonim
Manekenska glava lokalizirana zvukom s Kinectom
Manekenska glava lokalizirana zvukom s Kinectom

Upoznajte Margaret, ispitnu lutku za sustav praćenja umora vozača. Nedavno se povukla sa svojih dužnosti i pronašla put do našeg uredskog prostora, a od tada je skrenula pozornost onima koji misle da je 'jeziva'. U interesu pravde, dao sam joj mogućnost da se suoči s optužbama direktno; umjesto da te naizgled prati svojim bezdušnim pogledom, sada to zapravo čini. Sustav koristi niz mikrofona Microsoft Kinect -a i servo za usmjeravanje u smjeru ljudi koji govore u njezinoj blizini.

Korak 1: Teorija

Teorija
Teorija

Izračunavanje kuta

Kad nešto čujemo, osim ako je ta buka izravno ispred nas, dopire jedno uho prije drugog. Naš mozak opaža to kašnjenje dolaska i pretvara ga u opći smjer iz kojeg dolazi buka, dopuštajući nam da pronađemo izvor. Potpuno istu vrstu lokalizacije možemo postići pomoću para mikrofona. Razmotrite prikazani dijagram koji sadrži par mikrofona i izvor zvuka. Ako gledamo odozgo prema dolje, zvučni valovi su kružni, ali ako je udaljenost do izvora velika u odnosu na razmak između mikrofona, tada je s gledišta naših senzora val približno ravan. To je poznato kao pretpostavka udaljenog polja i pojednostavljuje geometriju našeg problema.

Stoga pretpostavimo da je valna fronta ravna linija. Ako zvuk dolazi s desne strane, udarit će u mikrofon #2 u trenutku t2 i mikrofon #1 u trenutku t1. Udaljenost d zvuka koji je prešao između mikrofona #2 i mikrofona #1 je vremenska razlika u otkrivanju zvuka pomnožena sa brzinom zvuka v s:

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

Ovu udaljenost možemo povezati s udaljenošću d 12 između para mikrofona i kutom θ od para do izvora zvuka sa relacijom:

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

Budući da imamo samo dva mikrofona, u našem izračunu bit će nejasnoća o tome je li izvor zvuka ispred ili iza nas. U ovom sustavu pretpostavit ćemo da je izvor zvuka ispred para i stegnuti kut između 0 stupnjeva (potpuno desno od para) do 180 stupnjeva (potpuno lijevo).

Konačno, možemo riješiti tetu uzimanjem inverznog kosinusa:

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

Kako bismo kut učinili prirodnijim, možemo oduzeti 90 stupnjeva od theta, tako da je 0 stupnjeva izravno ispred para, a +/- 90 stupnjeva potpuno lijevo ili desno. Ovo pretvara naš izraz iz inverznog kosinusa u inverzni sinus.

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

Pronalaženje odgode

Kao što možete vidjeti iz gornje jednadžbe, sve što moramo riješiti za kut je kašnjenje zvučnog vala koji dolazi na mikrofon jedan u usporedbi s mikrofonom dva; brzina zvuka i udaljenost između mikrofona fiksni su i poznati. Da bismo to postigli, prvo uzorkujemo audio signale na frekvenciji fs, pretvarajući ih iz analognih u digitalne i pohranjujući podatke za kasniju upotrebu. Mi uzorkujemo neko vrijeme poznato kao prozor uzorkovanja, koje je dovoljno dugo da uhvati prepoznatljive značajke našeg zvučnog vala. Na primjer, naš prozor mogao bi biti zvučni podatak vrijedan posljednjih pola sekunde.

Nakon dobivanja prozorskih audio signala, nalazimo kašnjenje između njih dvojice računajući njihovu međusobnu korelaciju. Da bismo izračunali unakrsnu korelaciju, držimo prozorski signal s jednog mikrofona fiksnim, a drugi signal klizimo duž vremenske osi od kraja iza prvog do kraja ispred prvog. Na svakom koraku duž našeg slajda množimo svaku točku u našem fiksnom signalu s odgovarajućom točkom u našem kliznom signalu, zatim zbrajamo sve rezultate kako bismo izračunali naš koeficijent korelacije za taj korak. Nakon dovršetka slajda, korak koji ima najveći koeficijent korelacije odgovara točki gdje su dva signala najsličnija, a na kojem smo koraku govori nam koliko je uzoraka n signal dva pomaknut od signala 1. Ako je n negativan, tada signal dva zaostaje za signalom jedan, ako je pozitivan onda je signal dva ispred, a ako je nula onda su dva već poravnana. Ovaj pomak uzorka pretvaramo u vremensko kašnjenje koristeći našu frekvenciju uzorkovanja s odnosom Δt = n/fs, dakle:

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

Korak 2: Komponente

Dijelovi

  • Microsoft Kinect za Xbox 360, model 1414 ili 1473. Kinect ima četiri mikrofona raspoređena u linearni niz koji ćemo koristiti.
  • Adapter za pretvaranje vlasničkog priključka tvrtke Kinect u USB + izmjenično napajanje poput ovog.
  • Raspberry Pi 2 ili 3 pokreće Raspbian Stretch. Prvotno sam pokušao koristiti Pi 1 model B+, ali nije bio dovoljno moćan. Stalno sam imao problema s odvajanjem od Kinecta.
  • Najstrašnija manekenska glava koju možete pronaći
  • Analogni servo dovoljno jak da vam okrene glavu manekena
  • 5V USB zidni punjač s dovoljno amperaže za napajanje i Pi i servo i najmanje dva priključka. (Koristio sam 3-portni utikač 5A sličan ovom
  • Produžni kabel s dvije utičnice (jedna za USB zidni punjač, a druga za AC adapter Kinect.
  • Dva USB kabela: kabel tipa A do mikro-USB za napajanje Pi-a i drugi za napajanje servo-a koji vam ne smeta rezati
  • Platforma za sjedenje i još jedna manja platforma za glavu lutke. Koristio sam plastični poslužavnik za posluživanje kao podlogu, a plastičnu ploču kao platformu za glavu. Obje su bile iz Walmarta i koštale su samo nekoliko dolara
  • 4x #8-32 1/2 "vijka i matica za pričvršćivanje servo servera na veću platformu
  • 2x M3 vijak od 8 mm s podloškama (ili bilo koje veličine koja vam je potrebna za pričvršćivanje servo trube na manju platformu)
  • Dvije žice kratkospojnika muško-muško, jedna crvena i jedna crna, te jedna žica kratkospojnika ženka-muškarac
  • Ljepljive trake s čičak trakom
  • Električna traka
  • Ljepljiva traka za upravljanje kablovima

Alati

  • Dremel s reznim kotačem
  • Bušilica
  • Svrdla 7/64 ", 11/16" i 5/16"
  • M3 slavina (izborno, ovisno o servo trubi)
  • Odvijač
  • Lemilica s lemljenjem
  • Ruke za pomoć (izborno)
  • Marker
  • Kompas
  • Skidači žica
  • Multimetar (izborno)

OZO

  • Zaštitne naočale

  • Maska za lice (za plastične komadiće s dremmel-ed).

Korak 3: Donji sklop platforme

Donji sklop platforme
Donji sklop platforme
Donji sklop platforme
Donji sklop platforme
Donji sklop platforme
Donji sklop platforme

Prvi dio koji ćemo napraviti je donja platforma koja će držati naš Kinect, servo i svu našu elektroniku. Za izradu platforme trebat će vam:

  • Plastični poslužavnik
  • Servo
  • 4x #8-32 1/2 "vijka s maticama
  • Dremel s kotačem za rezanje
  • Odvijač
  • Bušilica
  • Bušilica 11/16"
  • Marker

Kako napraviti

  1. Okrenite poslužavnik naopako.
  2. Postavite servo bočno blizu stražnje strane ladice, pazite da izlazni zupčanik servo servera leži uz središnju liniju ladice, a zatim označite oko baze serva.
  3. Pomoću dremela i reznog kotačića izrežite područje koje ste označili, a zatim gurnite servo u njegov utor.
  4. Označite središta rupa za montažu servo kućišta na ladici, a zatim uklonite servo i izbušite te rupe svojom svrdlom od 11/16 ". Vrlo je lako takvu tanku plastiku ispucati prilikom bušenja rupa, tako da je mnogo sigurnije za pokretanje bušilice unatrag i polako uklanjanje materijala. To je mnogo sporije nego pravilno bušenje rupa, ali osigurava da nema pukotina.
  5. Vratite servo natrag u utor, a zatim ga pričvrstite na ladicu s vijcima i maticama #8-32.

Korak 4: Montaža platforme glave

Sklop glavne platforme
Sklop glavne platforme
Sklop glavne platforme
Sklop glavne platforme
Sklop glavne platforme
Sklop glavne platforme
Sklop glavne platforme
Sklop glavne platforme

Sljedeći dio koji ćemo napraviti bit će platforma za povezivanje glave manekena sa servo pogonom. Za izradu platforme za glavu trebat će vam:

  • Plastična ploča
  • Servo truba
  • 2x M3 vijak od 8 mm s podloškama
  • Odvijač
  • Bušilica
  • Svrdla 7/64 "i 5/16"
  • Kompas
  • Dremel s reznim kotačem

Kako napraviti

  1. Postavite kompas u radijus baze vaše glave lutke.
  2. Kompasom označite krug centriran na sredini ploče. Ovo će biti stvarna veličina naše platforme za glavu.
  3. Pomoću dremela i kotača za rezanje izrežite manju platformu iz ploče.
  4. Izbušite središte vaše nove platforme svrdlom od 5/16 ". To će nam omogućiti pristup vijku koji montira našu servo trubu na naš servo. Da bih platformi dao stabilnost dok sam bušio rupu, stavio sam kalem žice ispod nje i izbušene kroz središte kalema.
  5. Poravnajte servo trubu sa središtem platforme i označite dvije rupe za pričvršćivanje trube na platformu. Provjerite jesu li ove montažne rupe dovoljno udaljene jedna od druge kako bi bilo mjesta za vaše glave vijaka i podloške M3.
  6. Izbušite ove označene rupe svrdlom 7/64 ".
  7. Donja rupa moje servo trube bila je glatka, tj. Nije imala navoje za vijak M3. Tako sam upotrijebio svoju bušilicu i slavinu M3 za izradu niti.
  8. Vijcima i podloškama pričvrstite servo trup na platformu za glavu.

Korak 5: Servo kabel za napajanje

Servo kabel za napajanje
Servo kabel za napajanje
Servo kabel za napajanje
Servo kabel za napajanje
Servo kabel za napajanje
Servo kabel za napajanje
Servo kabel za napajanje
Servo kabel za napajanje

Analogni servomotori se tipično napajaju sa 4.8-6V. Budući da će Raspberry Pi već biti napajan 5V s USB -a, pojednostavit ćemo naš sustav napajanjem servo -a i s USB -a. Za to ćemo morati promijeniti USB kabel. Za izradu servo kabela za napajanje trebat će vam:

  • Rezervni USB kabel s krajem tipa A (koji se priključuje na vaše računalo)
  • Jedna crvena i jedna crna kratkospojna žica
  • Lemilica
  • Lem
  • Skidači žica
  • Električna traka
  • Ruke za pomoć (izborno)
  • Multimetar (opcionalno)

Kako napraviti

  1. Odrežite kabl koji nije USB tipa A, a zatim skinite malo izolacije kako biste otkrili četiri unutarnje žice. Odrežite oklop koji okružuje izložene žice.
  2. Obično će USB kabel imati četiri žice: dvije za prijenos i prijem podataka i dvije za napajanje i masu. Zanima nas snaga i tlo, koje su obično crvene, odnosno crne. Skinite dio izolacije s crvene i crne žice i odrežite zelene i bijele žice. Ako ste zabrinuti da nemate ispravne žice za napajanje i uzemljenje, možete priključiti kabel u USB adapter za napajanje i provjeriti izlazni napon multimetrom.
  3. Zatim odrežite jedan kraj crveno -crnih kratkospojnih kabela i skinite dio izolacije.
  4. Sada uvijte zajedno izložene crne žice vašeg kratkospojnika i USB kabela. Prijeđite preko središta izloženih žica i uvijte ih jedno oko drugog. Zatim nanesite lemljenje na spojene žice kako biste ih držali zajedno. Rukama za pomoć to ćete olakšati držeći kabele na mjestu.
  5. Ponovite korak 4 za crvene žice.
  6. Prekrijte izloženo ožičenje električnom trakom ili toplinski skupljajućom cijevi ako vam se sviđa. Ti će spojevi biti krhki jer su žice tako male, pa dodajte vanjski sloj USB kabela drugi sloj trake koja drži kratkospojne kabele. To će sklop učiniti krutijim i time manje vjerojatno da će se slomiti od savijanja.

Korak 6: Montaža elektronike

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

Konačno, sve ćemo spojiti, montirajući našu elektroniku i sve ostalo na donju platformu. Trebat će vam:

  • Donja platforma
  • Platforma za glavu
  • Manekenska glava
  • Kinect s USB+AC adapterom
  • USB adapter za napajanje
  • Produžni kabel
  • Mikro USB kabel
  • Servo kabel za napajanje
  • Malina Pi
  • Kabel za spajanje muško-žensko
  • Ljepljivi čičak
  • Škare

Kako napraviti

  1. Montirajte Pi na dno ladice pomoću čičak trake.
  2. Priključite USB adapter za napajanje pomoću čičak trake.
  3. Priključite servo i Pi u USB adapter za napajanje.
  4. Spojite pin 12 (GPIO18) Pi na signalni kabel servo -a. To je 6. pin dolje s desne strane.
  5. Provucite produžni kabel kroz stražnju ručku ladice i priključite USB adapter za napajanje na jednu stranu.
  6. Uzmite Kinect USB+AC adapter i priključite adapter za napajanje na drugu stranu produžnog kabela, a USB u Pi.
  7. Provucite kabel Kinecta kroz prednju ručku ladice i priključite ga u adapter Kinect.
  8. Koristio sam ljepljivu traku za držanje kabela na donjoj strani platforme. Ovo ne izgleda najelegantnije, ali srećom sve je to skriveno.
  9. Okrenite platformu desnom stranom prema gore i pomoću čičak trake montirajte Kinect na prednju stranu platforme.
  10. Upotrijebite čičak za montiranje glave lutke na platformu za glavu. Ipak, kad se sve poređa, odvojite dva dijela kako bismo mogli pristupiti vijku za montažu servo trube. Ipak, nemojte još privijati trubu na servo, jer moramo biti sigurni da je servo u središnjem položaju kako bismo mogli sve poravnati. To ćemo učiniti u kasnijem koraku.

Korak 7: Softver i algoritam

Softver i algoritam
Softver i algoritam

Pregled

Softver za ovaj projekt napisan je na C ++ i integriran je s Robot Operating System (ROS), okvirom za pisanje softvera za robotiku. U ROS -u, softver za sustav podijeljen je u zbirku programa koji se nazivaju čvorovi, gdje svaki čvor implementira određeni pododsjek funkcionalnosti sustava. Podaci se prenose između čvorova pomoću metode objave/pretplate, gdje ih čvorovi koji proizvode podatke objavljuju i čvorovi koji troše podatke pretplaćuju se na njih. Odvajanje koda na ovaj način omogućuje jednostavno proširenje funkcionalnosti sustava i omogućuje dijeljenje čvorova među sustavima radi bržeg razvoja.

U ovom se sustavu ROS prvenstveno koristi za odvajanje koda koji izračunava smjer dolaska (DOA) izvora zvuka od koda koji kontrolira servo, dopuštajući drugim projektima da uključe procjenu Kinect DOA bez uključivanja servo koda koji im možda ne treba ili ne želi. Ako želite pogledati sam kod, može se pronaći na GitHub -u:

github.com/raikaDial/kinect_doa

Kinect DOA čvor

Čvor kinect_doa meso je i kosti ovog sustava, čineći u osnovi sve zanimljivo. Prilikom pokretanja, inicijalizira ROS čvor, omogućujući svu ROS magiju, a zatim učitava firmver u Kinect kako bi audio tokovi postali dostupni. Zatim pokreće novu nit koja otvara audio tokove i počinje čitati podatke mikrofona. Kinect uzorkuje svoja četiri mikrofona na frekvenciji od 16 kHz svaki, pa je međusobno povezivanje i prikupljanje podataka dobro imati u zasebnim nitima kako bi se izbjeglo propuštanje podataka zbog računalnog opterećenja. Povezivanje s Kinectom postiže se korištenjem libfreenect, popularnog upravljačkog programa otvorenog koda.

Nit zbirke izvršava funkciju povratnog poziva svaki put kada se dobiju novi podaci, i pohranjuje podatke i određuje kada treba procijeniti DOA. Podaci sa svakog mikrofona pohranjeni su u rolnim međuspremnicima jednake duljine našem prozoru za uzorkovanje, koji ovdje sadrži 8192 uzorka. To se prevodi u izračunavanje unakrsne korelacije s podacima vrijednim otprilike pola sekunde, što sam eksperimentiranjem otkrio kao dobar balans između performansi i računalnog opterećenja. Procjena DOA-e pokreće se za svakih 4096 uzoraka signaliziranjem glavne niti, tako da se uzastopne unakrsne korelacije preklapaju za 50%. Razmotrite slučaj u kojem nema preklapanja i stvarate vrlo brzu buku koju prozor za uzorkovanje prepolovi. Prije i poslije vaš karakterističan zvuk vjerojatno će biti bijeli šum, što može biti teško uskladiti s unakrsnom korelacijom. Preklapajući prozori pružaju nam potpuniji uzorak zvuka, povećavajući pouzdanost naše međusobne korelacije dajući nam jasnije značajke za poredanje.

Glavna nit čeka signal iz zbirne niti, zatim izračunava DOA procjenu. Ipak, prvo se provjerava razlikuju li se snimljeni valni oblici značajno od bijelog šuma. Bez ove provjere izračunali bismo svoju procjenu četiri puta u sekundi, bez obzira na to ima li zanimljivih zvukova ili ne, a naša bi glava manekena bila u grču. Algoritam za otkrivanje bijele buke koji se koristi u ovom sustavu prvi je od dva ovdje navedena. Izračunavamo omjer apsolutnog integrala izvedenice našeg valnog oblika prema njegovom apsolutnom integralu; za signale s visokim sadržajem bijele buke taj je omjer veći nego za manje bučne signale. Postavljanjem praga za ovaj omjer odvajajući buku od buke, možemo pokrenuti unakrsnu korelaciju samo kada je to prikladno. Naravno, ovaj omjer je nešto što se mora ponovno podešavati svaki put kad se sustav preseli u novo okruženje.

Nakon što utvrdi da valni oblici sadrže značajan sadržaj bez šuma, program nastavlja s unakrsnim korelacijama. U ove izračune ugrađene su tri važne optimizacije:

  1. Na Kinectu postoje četiri mikrofona, što znači da postoji ukupno šest parova valnih oblika koje možemo međusobno međusobno povezati. Međutim, ako pogledate prostorni raspored niza mikrofona, možete vidjeti da su mikrofoni 2, 3 i 4 vrlo blizu jedan drugome. Zapravo, toliko su blizu da će zbog brzine zvuka i naše frekvencije uzorkovanja valni oblici primljeni na 2, 3 i 4 biti razdvojeni najviše jednim uzorkom ispred ili iza, što možemo provjeriti proračunom maxlag = Δd *fs/vs, gdje je Δd razdvajanje para mikrofona, fs je frekvencija uzorkovanja, a vs brzina zvuka. Dakle, koreliranje parova između ova tri je beskorisno, a mi samo trebamo međusobno povezati mikrofon 1 s 2, 3 i 4.
  2. Poznato je da standardna uzajamna korelacija audio signala slabo radi u prisutnosti odjeka (odjeka). Robusna alternativa poznata je kao generalizirana unakrsna korelacija s faznom transformacijom (GCC-PHAT). Ova se metoda svodi na primjenu funkcije ponderiranja koja pojačava vrhove u unakrsnoj korelaciji, olakšavajući razlikovanje izvornog signala od odjeka. Usporedio sam performanse GCC-PHAT-a s jednostavnom unakrsnom korelacijom u odjeku za odjek (čitaj: preuređivanje betonske kupaonice) i otkrio da je GCC-PHAT 7 puta učinkovitiji u procjeni ispravnog kuta.
  3. Prilikom izvođenja unakrsne korelacije, uzimamo dva signala, klizeći jedan uz drugi, i u svakom koraku množimo svaku točku u našem fiksnom signalu sa svakom točkom u našem kliznom signalu. Za dva signala duljine n, to rezultira s n^2 proračuna. To bismo mogli poboljšati izvođenjem unakrsne korelacije u frekvencijskoj domeni, koja uključuje brzu Fourierovu transformaciju (nlogn izračuni), množenjem svake točke u jednom transformiranom signalu s odgovarajućom točkom u drugoj (n izračuna), a zatim izvođenjem inverznog fourierova transformacija za povratak na vremensku domenu (nlogn izračuni), što rezultira n+2*nlogn izračunima, manjim od n^2. Međutim, ovo je naivan pristup. Mikrofoni u našem nizu su toliko blizu jedan drugome, a brzina zvuka je tako relativno spora da će zvučni valovi već biti uglavnom usklađeni. Dakle, možemo upotrijebiti svoju unakrsnu korelaciju da bismo uzeli u obzir samo pomake koji su malo ispred ili iza. Za mikrofone 1 i 4 kašnjenje mora pasti između +/- 12 uzoraka, što znači da za svaku unakrsnu korelaciju trebamo izvršiti samo 24*n proračuna, što rezultira računarskom uštedom kada su naši valni oblici dulji od 2900 uzoraka.

Ovaj sustav koristi knjižnicu minidsp koja implementira GCC-PHAT algoritam s optimizacijom 3.

Nakon što pronađe zaostajanje u signalima iz svakog para mikrofona, program bira srednju vrijednost zaostajanja, koristi je za izračun procijenjenog kuta i objavljuje rezultat tako da se može koristiti za upravljanje servo -pogonom.

Servo upravljački čvor

U usporedbi s čvorom kinect_doa, servo čvor je relativno jednostavan. Njegov je posao samo uzeti procjenu DOA -e i pomaknuti servo pod tim kutom. Koristi knjižnicu wiringPi za pristup hardverskom PWM modulu Raspberry Pi -a, pomoću kojega postavlja kut servo pogona. Većina analognih servo upravljana je PWM signalom s širinom impulsa u rasponu od 1000 µs do 2000 µs, što odgovara kutu od 0 ° do 180 °, ali servo koji sam koristio kontroliran je s 500 µs do 2500 µs, što odgovara kutu od 0 ° do 270 °. Dakle, čvor se može konfigurirati za različiti servo hardver postavljanjem parametara za minimalnu širinu impulsa, maksimalnu širinu impulsa i razliku između maksimalnog i minimalnog kuta. Osim toga, servo se ne pomiče odmah do ciljanog kuta, već se pomiče prema kutu konfiguriranom brzinom, dajući Margaret postupniju, jezivu vibraciju (plus, zvuk servo brzog kretanja naprijed -natrag postaje jako dosadan).

Korak 8: Izgradnja i instalacija

Ovisnosti o instaliranju:

Prvo instalirajte libfreenect. Moramo ga izgraditi iz izvora jer verzija koju možete dobiti s upraviteljem paketa ne uključuje podršku za zvuk. To je zato što moramo umetnuti firmver u Kinect kako bismo omogućili zvuk, a preraspodjela ovog firmvera nije legalna u određenim jurisdikcijama. Osim toga, možemo izbjeći izgradnju primjera koji zahtijevaju OpenGL i prekomjernost, nepotrebne za Raspbian instalacije bez glave.

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 install sudo crectre/kb/lib.rules /etc/udev/rules.d udevadm control --reload-rules && udevadm okidač

Zatim moramo instalirati paket wiringPi koji nam omogućuje kontrolu GPIO pinova Pi:

CD

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

Pričvrstite glavu lutke:

S instaliranim wiringPi-om sada možemo brzo skrenuti natrag na hardversko zemljište za pričvršćivanje glave lutke na donju platformu. Da biste centrirali servo putem naredbenog retka, unesite sljedeće naredbe:

gpio pwm-ms

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

Ako nema pomaka, onda je vaš servo vjerojatno već centriran. Kako biste bili sigurni, mogli biste postaviti servo na vrijednost koja nije u središtu, npr. gpio -g pwm 18 200, a zatim ga vratite na 150.

Kada budete sigurni da je servo centriran, pričvrstite servo trup platforme glave na servo tako da će vaša glava manekena gledati ravno naprijed. Zatim pričvrstite trubu na servo i pričvrstite glavu pomoću čičak bitova.

Instalirajte ROS:

Zatim instalirajte ROS na svoj Pi. Odličan vodič za instalaciju možete pronaći ovdje; za naš sustav ne treba nam OpenCV, pa možete preskočiti 3. korak. Ova će izgradnja potrajati nekoliko sati. Kad završite s uputama za instalaciju, dodajte instalaciju izvornim izvorima u svoj bashrc kako bismo mogli koristiti naše novoinstalirane ROS pakete:

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

Build Kinect DOA paket:

Nakon što je sve učinjeno, napravite catkin radni prostor za naš projekt i unesite src direktorij:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Kôd za ovaj projekt sadržan je u paketu kinect_doa pa ga klonirajte u src direktorij vašeg novog radnog prostora:

git clone

Paket robot_upstart pruža alat za jednostavno instaliranje datoteka za pokretanje tako da se pokreću pri pokretanju, pa ih klonirajte i u svoj radni prostor:

git clone

Sada možemo izgraditi kôd projekta pozivom catkin_make iz direktorija najviše razine našeg radnog prostora, a zatim izvornu datoteku izgraditi tako da su naši paketi dostupni:

cd ~/kinect_doa_ws

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

Trčanje i ugađanje:

Pod pretpostavkom da je sve uključeno i uključeno, sada biste trebali moći pokrenuti sustav i imati Kinect da vas prati! Međutim, ako imate Kinect 1473, prvo otvorite datoteku ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch u uređivaču teksta i postavite parametar using_kinect_1473 na true. Osim toga, ako ste koristili drugačiji servo od mene, vjerojatno je to standardni analogni servo. Stoga, dok ste u pokretačkoj datoteci, promijenite parametar min_us na 1000, max_us na 2000, a max_deg na 180.

roslaunch kinect_doa kinect_doa.pokretanje

Poigrajte se s njim neko vrijeme. Ako mislite da je sustav previše osjetljiv (gledate u nasumičnim smjerovima koji ne odgovaraju glasovima ili karakterističnim šumovima), pokušajte promijeniti parametar white_noise_ratio u datoteci za pokretanje i ponovno pokrenuti sustav dok odaziv ne bude na razini koja vam odgovara. Povećanje omjera učinit će sustav manje osjetljivim i obrnuto. Ovo podešavanje ćete vjerojatno morati izvesti svaki put kada premjestite sustav na drugo mjesto kako biste postigli željene performanse.

Za pokretanje programa kada uključimo Pi, koristimo paket robot_upstart za instaliranje naše datoteke za pokretanje. Ako ROS trenutno nije pokrenut, pokrenite ga naredbom roscore. Zatim otvorite novi terminal i instalirajte pokretanje s:

rosrun robot_upstart install kinect_doa/launch/kinect_doa.launch -root korisnika --symlink

Kreiramo simboličku vezu do datoteke za pokretanje umjesto kopiranja kako bismo mogli promijeniti parametre uređivanjem ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch.

Korak 9: Sakrijte ga u uredu

Skrivanje u uredu
Skrivanje u uredu

A sada zabavni dio. Idite na posao nakon radnog vremena i namjestite glavu manekena u tajnost. Onda samo sjednite i pogledajte koliko je potrebno vašim suradnicima da se uhvate! Vaša nova kreacija zajamčeno će okrenuti nekoliko glava …

Preporučeni: