Sadržaj:

Manekenska glava lokalizirana zvukom sa Kinect -om: 9 koraka (sa slikama)
Manekenska glava lokalizirana zvukom sa Kinect -om: 9 koraka (sa slikama)

Video: Manekenska glava lokalizirana zvukom sa Kinect -om: 9 koraka (sa slikama)

Video: Manekenska glava lokalizirana zvukom sa Kinect -om: 9 koraka (sa slikama)
Video: СТРАШНЫЕ призраки снятые на камеру | БОЛЬШАЯ подборка 2024, Novembar
Anonim
Manekenska glava lokalizirana zvukom s Kinectom
Manekenska glava lokalizirana zvukom s Kinectom

Upoznajte Margaret, ispitnu lutku za sistem praćenja umora vozača. Nedavno se povukla sa svojih dužnosti i pronašla put do našeg poslovnog prostora, i od tada je skrenula pažnju 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 zaista čini. Sistem koristi niz mikrofona Microsoft Kinect -a i servo za usmjeravanje u pravcu ljudi koji govore u njenoj blizini.

Korak 1: Teorija

Teorija
Teorija

Izračunavanje ugla

Kad nešto čujemo, osim ako se ta buka nalazi ispred nas, ona dopire jedno uho prije drugog. Naš mozak opaža to kašnjenje dolaska i pretvara ga u opći smjer iz kojeg dolazi buka, omogućavajuć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. Ovo je poznato kao pretpostavka dalekog polja i pojednostavljuje geometriju našeg problema.

Zato 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, doći će do nejasnoća u izračunu je li izvor zvuka ispred ili iza nas. U ovom sistemu ćemo pretpostaviti da je izvor zvuka ispred para i stegnuti kut između 0 stepeni (potpuno desno od para) do 180 stepeni (potpuno lijevo).

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

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

Da bismo kut učinili prirodnijim, možemo oduzeti 90 stepeni od theta, tako da je 0 stepeni direktno ispred para, a +/- 90 stepeni potpuno lijevo ili potpuno 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 kašnjenja

Kao što vidite iz gornje jednadžbe, sve što trebamo riješiti za kut je kašnjenje zvučnog vala koji dolazi na mikrofon jedan u odnosu na mikrofon dva; brzina zvuka i udaljenost između mikrofona su fiksni 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 vreme poznato kao prozor uzorkovanja, koje je dovoljno dugo da uhvati prepoznatljive karakteristike našeg zvučnog talasa. Na primjer, naš prozor bi mogao biti vrijednost audio podataka u 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 završetka slajda, korak koji ima najveći koeficijent korelacije odgovara tač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 sa odnosom Δt = n/fs, pa:

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

Korak 2: Komponente

Delovi

  • 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 konektora Kinect -a u USB + AC napajanje poput ovog.
  • Raspberry Pi 2 ili 3 koji pokreću Raspbian Stretch. Prvo sam pokušao koristiti Pi 1 model B+, ali nije bio dovoljno moćan. I dalje sam imao problema s odvajanjem od Kinecta.
  • Najstrašnija manekenska glava koju možete pronaći
  • Analogni servo dovoljno jak da vam okrene glavu
  • 5V USB zidni punjač sa 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 Kinect adapter naizmjenične struje.
  • 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 podlogu i plastičnu ploču kao platformu za glavu. Oboje su iz Walmarta i koštali 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 kratkospojne žice muški na muški, jedna crvena i jedna crna, i jedna žica kratkospojnik ženka-muškarac
  • Čičak trake s ljepljivom podlogom
  • Električna traka
  • Ljepljiva traka za upravljanje kablovima

Alati

  • Dremel sa reznim točkom
  • Drill
  • Svrdla 7/64 ", 11/16" i 5/16"
  • M3 slavina (opcionalno, ovisno o servo trubi)
  • Šrafciger
  • Lemilica sa lemljenjem
  • Ruke za pomoć (nije obavezno)
  • Marker
  • Kompas
  • Strojevi za skidanje žice
  • Multimetar (opcionalno)

PPE

  • Sigurnosne naočale

  • Maska za lice (za plastične komade iscrtane dremlom).

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 sa maticama
  • Dremel sa točkićem za rezanje
  • Šrafciger
  • Drill
  • 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 serva 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 otvor.
  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 razbiti tanku plastiku poput ove prilikom bušenja rupa, tako da je mnogo sigurnije 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 u otvor, 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 lutke na servo. Za izradu platforme za glavu trebat će vam:

  • Plastična ploča
  • Servo truba
  • 2x M3 vijak od 8 mm sa podloškama
  • Šrafciger
  • Drill
  • Svrdla 7/64 "i 5/16"
  • Kompas
  • Dremel sa reznim točkom

Kako napraviti

  1. Postavite kompas u radijus osnove glave vaše manekenke.
  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 reznog kotača izrežite manju platformu s 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 žica ispod njega i izbušena kroz središte kalema.
  5. Poravnajte servo trubu sa središtem platforme i označite dvije rupe za pričvršćivanje trube na platformu. Uvjerite se da su 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 bušilicom 7/64 ".
  7. Donja rupa moje servo trube bila je glatka, odnosno nije imala navoje za vijak M3. Tako sam upotrijebio svoju bušilicu i slavinu M3 za izradu niti.
  8. Koristite vijke i podloške za pričvršćivanje servo trube na platformu glave.

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 servo motori se obično napajaju sa 4.8-6V. Budući da će Raspberry Pi već biti napajan 5V sa USB -a, pojednostavit ćemo naš sistem napajanjem servo -a i sa USB -a. Da bismo to učinili, morat ćemo izmijeniti USB kabel. Za izradu servo kabla za napajanje trebat će vam:

  • Rezervni USB kabel s krajem tipa A (koji se priključuje na vaš računar)
  • Jedna crvena i jedna crna kratkospojna žica
  • Lemilica
  • Solder
  • Strojevi za skidanje žice
  • Električna traka
  • Ruke za pomoć (nije obavezno)
  • Multimetar (opcionalno)

Kako napraviti

  1. Odrežite kabl koji nije USB tipa A, a zatim skinite malo izolacije kako biste otkrili četiri unutrašnje ž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 uzemljenje. Zanima nas snaga i tlo, koje su obično crvene i crne. Skinite dio izolacije s crvene i crne žice i odrežite zelenu i bijelu žicu. 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 izložene crne žice kratkospojnika i USB kabele. Pređ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. Ruke za pomoć će ovo olakšati držanjem kabela 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. Ovi spojevi bit će 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 stoga manje vjerovatno 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 sa USB+AC adapterom
  • USB adapter za napajanje
  • Produžni kabl
  • Mikro USB kabl
  • Servo kabel za napajanje
  • Raspberry Pi
  • Premosni kabel muško-žensko
  • Adhesive Velcro
  • Makaze

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 šesta igla dolje desno.
  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 kabla, 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. Pomoću čičak trake montirajte glavu lutke na platformu za glavu. Međutim, kad se sve poređa, odvojite dva dijela kako bismo mogli pristupiti vijku za montažu servo trube. Ipak, nemojte još zavijati trubu na servo, jer moramo biti sigurni da je servo prvo 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 sistem je podijeljen u zbirku programa koji se nazivaju čvorovi, gdje svaki čvor implementira određeni pododsjek funkcionalnosti sistema. 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ćava jednostavno proširenje funkcionalnosti sistema i omogućava dijeljenje čvorova između sistema radi bržeg razvoja.

U ovom sistemu, ROS se 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 ž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 je meso i kosti ovog sistema, čineći u osnovi sve zanimljivo. Prilikom pokretanja, inicijalizira ROS čvor, omogućujući svu ROS magiju, zatim otprema 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 dobro imati unakrsnu korelaciju i prikupljanje podataka u zasebnim nitima kako bi se izbjeglo propuštanje podataka zbog opterećenja računanja. Povezivanje sa Kinect-om postiže se pomoću libfreenect-a, popularnog upravljačkog programa otvorenog koda.

Nit zbirke izvršava funkciju povratnog poziva svaki put kada se prime novi podaci, i pohranjuje podatke i određuje kada treba procijeniti DOA. Podaci sa svakog mikrofona pohranjeni su u rolerima koji su jednaki po dužini našem prozoru za uzorkovanje, koji ovdje sadrži 8192 uzorka. Ovo se prevodi u izračunavanje unakrsne korelacije sa podacima vrijednim otprilike pola sekunde, što sam kroz eksperimentisanje otkrio kao dobar balans između performansi i računarskog opterećenja. Procjena DOA-e pokreće se za svakih 4096 uzoraka signalizacijom 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 će vjerovatno 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 karakteristike za poredanje.

Glavna nit čeka signal iz niti prikupljanja, a zatim izračunava DOA procjenu. Prvo, međutim, provjerava jesu li snimljeni talasni oblici značajno različiti od bijele buke. Bez ove provjere izračunali bismo svoju procjenu četiri puta u sekundi, bez obzira na to je li bilo zanimljivih zvukova ili ne, a naša glava manekena bila bi u grču. Algoritam za otkrivanje bijele buke koji se koristi u ovom sistemu prvi je od dva ovdje navedena. Izračunavamo omjer apsolutnog integrala derivacije našeg valnog oblika i njegovog apsolutnog integrala; za signale sa visokim sadržajem belog šuma ovaj odnos je 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 ponovo podešavati svaki put kada se sistem premjesti 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 Kinect-u postoje četiri mikrofona, što znači da postoji ukupno šest parova talasnih oblika koje možemo međusobno korelirati. Međutim, ako pogledate prostorni raspored mikrofona, možete vidjeti da su mikrofoni 2, 3 i 4 vrlo blizu jedan drugome. Zapravo, oni su toliko blizu da će zbog brzine zvuka i naše frekvencije uzorkovanja talasni oblici primljeni na 2, 3 i 4 biti odvojeni 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 radi loše u prisustvu odjeka (odjeka). Robusna alternativa je poznata kao generalizovana unakrsna korelacija sa faznom transformacijom (GCC-PHAT). Ova metoda se svodi na primjenu funkcije ponderiranja koja pojačava vrhove u unakrsnoj korelaciji, olakšavajući razlikovanje izvornog signala od odjeka. Uporedio sam performanse GCC-PHAT-a sa jednostavnom unakrsnom korelacijom u komori za odjek (čitaj: betonsko kupatilo se prepravlja) i otkrio da je GCC-PHAT 7 puta efikasniji u proceni ispravnog ugla.
  3. Prilikom izvođenja unakrsne korelacije, uzimamo dva signala, klizeći jedan po drugom, i u svakom koraku množimo svaku tačku u našem fiksnom signalu sa svakom tačkom u našem kliznom signalu. Za dva signala dužine n, ovo rezultira s izračunavanjem n^2. To bismo mogli poboljšati izvođenjem unakrsne korelacije u frekvencijskom domenu, koja uključuje brzu Fourierovu transformaciju (nlogn proračuni), množenjem svake točke u jednom transformiranom signalu s odgovarajućom tačkom u drugoj (n proračuna), a zatim izvođenjem inverznog Fourierova transformacija za povratak na vremensku domenu (nlogn proračuni), što rezultira n+2*nlogn proračunima, manjim od n^2. Međutim, ovo je naivan pristup. Mikrofoni u našem nizu su toliko blizu jedan uz drugog, a brzina zvuka je tako relativno spora da će zvučni talasi već biti uglavnom usklađeni. Dakle, možemo upotrijebiti našu unakrsnu korelaciju samo za razmatranje pomaka 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 talasni oblici duži od 2900 uzoraka.

Ovaj sistem koristi minidsp biblioteku koja implementira GCC-PHAT algoritam sa optimizacijom 3.

Nakon što pronađe zaostajanje u signalima iz svakog para mikrofona, program bira srednju vrijednost zaostajanja, koristi ga za izračunavanje procijenjenog ugla i objavljuje rezultat tako da se može koristiti za kontrolu servo -a.

Servo upravljački čvor

U poređenju sa čvorom kinect_doa, servo čvor je relativno jednostavan. Njegov je posao samo uzeti procjenu DOA -e i pomaknuti servo pod tim kutom. Koristi biblioteku wiringPi za pristup hardverskom PWM modulu Raspberry Pi -a, koristeći je za postavljanje kuta servo pogona. Većina analognih servo servera kontrolira se 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 ciljnog kuta, već se pomiče prema kutu konfiguriranom brzinom, dajući Margaret postepeniju, jezivu vibraciju (plus, zvuk serva koji se brzo kreće naprijed -nazad postaje jako dosadan).

Korak 8: Izgradnja i instalacija

Instalacije ovisnosti:

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 učitati firmver u Kinect da bismo omogućili zvuk, a distribucija 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 klon https://github.com/OpenKinect/libfreenect cd libfreenect mkdir build cd build cmake.. -DCMAKE_BUILD_REDIST_PACKAGE = OFF -DCMAKE_BUILD_EXAMPLES = OFF sudo make install sudo cp/lib.rules /etc/udev/rules.d udevadm kontrola --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 kako bismo glavu lutke pričvrstili na donju platformu. Da biste centrirali servo preko komandne linije, unesite sljedeće naredbe:

gpio pwm-ms

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

Ako nema pokreta, vaš servo je 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 pravo 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š sistem ne treba nam OpenCV, pa možete preskočiti korak 3. Ova izgradnja će potrajati nekoliko sati. Kada završite slijedeći vodič za instalaciju, dodajte izvornu instalaciju u svoj bashrc kako bismo mogli koristiti naše novoinstalirane ROS pakete:

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

Izgradite 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 se nalazi u paketu kinect_doa, pa ga klonirajte u src direktorij vašeg novog radnog prostora:

git clone

Paket robot_upstart pruža alat za korištenje koji je jednostavan za instaliranje datoteka za pokretanje tako da se pokreću pri pokretanju, pa ih klonirajte i u radni prostor:

git clone

Sada možemo izgraditi kôd projekta pozivanjem catkin_make iz direktorija najvišeg nivoa našeg radnog prostora, a zatim izvornu verziju naše verzije 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 sistem 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, to je vjerojatno standardni analogni servo. Stoga, dok ste u pokretačkoj datoteci, promijenite parametar min_us na 1000, max_us na 2000 i max_deg na 180.

roslaunch kinect_doa kinect_doa.launch

Igrajte se s njim neko vrijeme. Ako mislite da je sistem 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 ponovo pokrenuti sistem dok odaziv ne bude na nivou koji vam odgovara. Povećanje omjera učinit će sistem manje osjetljivim i obrnuto. Ovo podešavanje ćete vjerojatno morati izvesti kad god premjestite sistem na drugu lokaciju da biste dobili ž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 tako da možemo 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 garantovano će okrenuti nekoliko glava …

Preporučuje se: