Innholdsfortegnelse:

Lydlokaliserende mannequinhode med Kinect: 9 trinn (med bilder)
Lydlokaliserende mannequinhode med Kinect: 9 trinn (med bilder)

Video: Lydlokaliserende mannequinhode med Kinect: 9 trinn (med bilder)

Video: Lydlokaliserende mannequinhode med Kinect: 9 trinn (med bilder)
Video: Автомобиль Эксперимента против Головы Манекена, Желе | Сокрушительные Хрустящие & Мягкие Вещи 2024, Juli
Anonim
Lyd Lokaliserende Mannequinhode med Kinect
Lyd Lokaliserende Mannequinhode med Kinect

Møt Margaret, en testdummy for et system for overvåkning av førerutmattelse. Hun trakk seg nylig fra pliktene sine og fant veien til kontoret, og har siden vakt oppmerksomheten til de som synes hun er "skummel". Av hensyn til rettferdighet har jeg gitt henne muligheten til å møte anklagerne direkte. i stedet for å tilsynelatende følge deg med sitt sjelløse blikk, nå gjør hun det faktisk. Systemet bruker mikrofonoppsettet til en Microsoft Kinect og en servo for å styre henne i retning av at folk snakker i nærheten av henne.

Trinn 1: Teori

Teori
Teori

Beregning av vinkelen

Når vi hører noe, med mindre den lyden er rett foran oss, når den det ene øret før det andre. Hjernen vår oppfatter den ankomstforsinkelsen og konverterer den til en generell retning som støy kommer fra, slik at vi kan finne kilden. Vi kan oppnå nøyaktig samme type lokalisering ved hjelp av et par mikrofoner. Tenk på diagrammet som inneholder et mikrofonpar og en lydkilde. Hvis vi ser ovenfra og ned, er lydbølger sirkulære, men hvis avstanden til kilden er stor i forhold til avstanden mellom mikrofonene, er bølgen omtrent fra planen til våre sensorer. Dette er kjent som fjernfeltantagelsen og forenkler geometrien til problemet vårt.

Så anta at bølgefronten er en rett linje. Hvis lyden kommer fra høyre, vil den treffe mikrofon #2 på tidspunktet t2 og mikrofon #1 på tidspunktet t1. Avstanden d lyden reiste mellom å treffe mikrofon #2 og mikrofon #1 er tidsforskjellen i å oppdage lyden multiplisert med lydens hastighet v s:

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

Vi kan relatere denne avstanden til avstanden d 12 mellom mikrofonparet og vinkelen θ fra paret til lydkilden med relasjonen:

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

Fordi vi bare har to mikrofoner, vil det være uklarhet i beregningen om lydkilden er foran eller bak oss. I dette systemet antar vi at lydkilden er foran paret og klemmer vinkelen mellom 0 grader (helt til høyre for paret) til 180 grader (helt til venstre).

Til slutt kan vi løse for theta ved å ta den inverse cosinus:

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

For å gjøre vinkelen litt mer naturlig, kan vi trekke 90 grader fra theta, slik at 0 grader er rett foran paret og +/- 90 grader er fullt til venstre eller helt til høyre. Dette gjør uttrykket vårt fra invers cosinus til invers sinus.

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

Finne forsinkelsen

Som du kan se fra ligningen ovenfor, er alt vi trenger å løse for vinkelen forsinkelsen i lydbølgen som kommer til mikrofon en sammenlignet med mikrofon to; lydens hastighet og avstanden mellom mikrofonene er både fast og kjent. For å oppnå dette, prøver vi først lydsignalene ved frekvensen fs, konverterer dem fra analog til digital og lagrer dataene for senere bruk. Vi prøver i en periode som kalles samplingsvindu, som har lang nok varighet til å fange kjennetegn ved lydbølgen vår. For eksempel kan vinduet vårt være det siste halve sekundets verdi av lyddata.

Etter å ha fått lydsignalene i vindu, finner vi forsinkelsen mellom de to ved å beregne deres kryss-korrelasjon. For å beregne kryss-korrelasjonen, holder vi det vindussignalet fra en mikrofon fast, og skyver det andre signalet langs tidsaksen fra hele veien bak den første til hele veien foran den første. Ved hvert trinn langs lysbildet multipliserer vi hvert punkt i vårt faste signal med det tilsvarende punktet i vårt glidesignal, og summerer deretter alle resultatene for å beregne korrelasjonskoeffisienten for det trinnet. Etter å ha fullført lysbildet, tilsvarer trinnet som har den høyeste korrelasjonskoeffisienten punktet der de to signalene er mest like, og hvilket trinn vi er på forteller oss hvor mange prøver n signal to er forskjøvet fra signal 1. Hvis n er negativ, da henger signal to bak signal ett, hvis det er positivt så er signal to foran, og hvis det er null, er de to allerede justert. Vi konverterer denne prøveforskyvningen til en tidsforsinkelse ved å bruke vår samplingsfrekvens med forholdet Δt = n/fs, således:

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

Trinn 2: Komponenter

Deler

  • Microsoft Kinect for Xbox 360, modell 1414 eller 1473. Kinect har fire mikrofoner arrangert i en lineær matrise vi skal bruke.
  • Adapter for å konvertere Kinect sin proprietære kontakt til USB + vekselstrøm som denne.
  • Raspberry Pi 2 eller 3 som kjører Raspbian Stretch. Jeg prøvde opprinnelig å bruke en Pi 1 Model B+, men den var ikke kraftig nok. Jeg fortsatte å ha problemer med å koble fra Kinect.
  • Det skumleste mannekenghodet du kan finne
  • En analog servo som er sterk nok til å snu mannekenghodet
  • En 5V USB -vegglader med nok strømstyrke til å drive både Pi og servoen og minst to porter. (Jeg brukte en 5A 3-port plugg som ligner på denne
  • En skjøteledning med to uttak (en for USB -vegglader og den andre for Kinect AC -adapter.
  • To USB-kabler: en type-A til mikro-USB-kabel for å drive Pi og en annen for å drive servoen som du ikke har noe imot å kutte opp
  • En plattform for alt å sitte på og en annen mindre plattform for mannequinhodet. Jeg brukte et serveringsbrett av plast som bunn og en plastplate som hodeplattform. Begge var fra Walmart og kostet bare noen få dollar
  • 4x #8-32 1/2 "bolter og muttere for å feste servoen din til den større plattformen
  • 2x M3 8 mm bolt med skiver (eller hvilken størrelse du trenger for å feste servohornet til den mindre plattformen)
  • To genser for mann til mann, en rød og en svart, og en hun-til-mann jumper wire
  • Selvklebende borrelåsstrimler
  • Elektrisk tape
  • Duct tape for kabelbehandling

Verktøy

  • Dremel med skjærehjul
  • Bore
  • 7/64 ", 11/16" og 5/16 "borekroner
  • M3 -trykk (valgfritt, avhengig av servohornet)
  • Skrujern
  • Loddejern med loddetinn
  • Hjelpende hender (valgfritt)
  • Markør
  • Kompass
  • Wire strippere
  • Multimeter (valgfritt)

PPE

  • Sikkerhetsbriller

  • Ansiktsmaske (for dremmel-ed plastbiter).

Trinn 3: Nedre plattformenhet

Nedre plattformenhet
Nedre plattformenhet
Nedre plattformenhet
Nedre plattformenhet
Nedre plattformenhet
Nedre plattformenhet

Den første delen vi skal lage er den nedre plattformen, som vil inneholde Kinect, servoen og all vår elektronikk. For å lage plattformen trenger du:

  • Serveringsbrett i plast
  • Servo
  • 4x #8-32 1/2 "bolter med muttere
  • Dremel med skjærehjul
  • Skrujern
  • Bore
  • 11/16 "bor
  • Markør

Hvordan lage

  1. Snu brettet opp ned.
  2. Plasser servoen din sidelengs nær baksiden av brettet, sørg for at utgangsgiret til servoen ligger langs midtlinjen på brettet, og merk deretter rundt bunnen av servoen.
  3. Klipp ut området du merket med dremel og skjærehjul, og skyv servoen inn i sporet.
  4. Merk midten av servohusets monteringshull på brettet, fjern deretter servoen og bor ut hullene med din 11/16 "borekrone. Det er veldig lett å knekke tynn plast slik når du borer hull, så jeg synes det er mye tryggere å kjøre boret i revers og sakte sive bort materialet. Det er mye tregere enn å bore hullene ordentlig, men det sikrer at det ikke er sprekker.
  5. Plasser servoen din tilbake i sporet, og fest den til brettet med boltene og mutrene #8-32.

Trinn 4: Head Platform Assembly

Head Platform Assembly
Head Platform Assembly
Head Platform Assembly
Head Platform Assembly
Head Platform Assembly
Head Platform Assembly
Head Platform Assembly
Head Platform Assembly

Den neste delen vi skal lage vil være en plattform for å koble mannequinhodet til servoen. For å lage hodeplattformen trenger du:

  • Plastplate
  • Servo horn
  • 2x M3 8 mm bolt med skiver
  • Skrujern
  • Bore
  • 7/64 "og 5/16" borekroner
  • Kompass
  • Dremel med skjærehjul

Hvordan lage

  1. Sett kompasset til radiusen på basen av mannequinhodet ditt.
  2. Bruk kompasset til å markere en sirkel sentrert på midten av tallerkenen. Dette vil være den faktiske størrelsen på hodeplattformen vår.
  3. Bruk dremel og skjærehjul til å kutte den mindre plattformen ut av platen.
  4. Bor ut midten av den nye plattformen med en 5/16 "borekrone. Dette gir oss tilgang til skruen som fester servohornet til servoen vår. For å gi plattformen stabilitet mens jeg boret hullet, satte jeg en spole med ledningen under den og boret gjennom midten av spolen.
  5. Rett opp servohornet med midten av plattformen og merk to hull for å feste hornet til plattformen. Sørg for at disse monteringshullene er langt nok fra hverandre, slik at det er plass til M3 bolthoder og skiver.
  6. Bor ut disse merkede hullene med et 7/64 "bor.
  7. Det nedre hullet på servohornet mitt var glatt, det vil si at det ikke hadde gjengene for M3 -bolten. Dermed brukte jeg boret mitt og en M3 -kran for å lage trådene.
  8. Bruk boltene og skivene for å feste servohornet til hodeplattformen.

Trinn 5: Servokabel

Servo strømkabel
Servo strømkabel
Servo strømkabel
Servo strømkabel
Servo strømkabel
Servo strømkabel
Servo strømkabel
Servo strømkabel

Analoge servoer er vanligvis drevet med 4,8-6V. Siden Raspberry Pi allerede kommer til å bli drevet av 5V fra USB, vil vi forenkle systemet vårt ved å også drive servoen fra USB. For å gjøre dette må vi endre en USB -kabel. For å lage servokabelen trenger du:

  • Ekstra USB-kabel med type A-ende (den som kobles til datamaskinen)
  • En rød og en svart jumper wire
  • Loddejern
  • Lodding
  • Wire strippere
  • Elektrisk tape
  • Hjelpende hender (valgfritt)
  • Multimeter (valgfritt)

Hvordan lage

  1. Kutt den ikke-USB type-A-kontakten av kabelen, og ta deretter av litt av isolasjonen for å avsløre de fire indre ledningene. Klipp av skjermingen rundt de eksponerte ledningene.
  2. Vanligvis vil USB -kabelen ha fire ledninger: to for dataoverføring og mottak og to for strøm og jord. Vi er interessert i kraft og jord, som vanligvis er henholdsvis rød og svart. Fjern noe av isolasjonen fra de røde og svarte ledningene og klipp av de grønne og hvite ledningene. Hvis du er bekymret for at du ikke har de riktige strøm- og jordledningene, kan du koble kabelen til USB -strømadapteren og kontrollere utgangsspenningen med et multimeter.
  3. Deretter kutter du den ene enden av de røde og svarte startkablene og fjerner en del av isolasjonen.
  4. Vri nå sammen de synlige svarte ledningene på jumperen din og USB -kablene. Kryss over midten av de eksponerte ledningene og vri dem rundt hverandre. Påfør deretter loddetinn på de sammenkoblede ledningene for å holde dem sammen. Å hjelpe hender vil gjøre dette lettere ved å holde kablene på plass.
  5. Gjenta trinn 4 for de røde ledningene.
  6. Dekk de eksponerte ledningene med elektrisk tape eller varmekrympeslange hvis du føler deg fancy. Disse leddene vil være skjøre siden ledningene er så små, så legg til et andre teiplag som holder jumperkablene til den ytre isolasjonen av USB -kabelen. Dette vil gjøre enheten mer stiv og dermed mindre sannsynlig å bryte fra å bli bøyd.

Trinn 6: Elektronikkmontering

Elektronikkmontering
Elektronikkmontering
Elektronikkmontering
Elektronikkmontering
Elektronikkmontering
Elektronikkmontering

Til slutt vil vi bringe alt sammen, montere vår elektronikk og alt annet til den nedre plattformen. Du vil trenge:

  • Nedre plattform
  • Hodeplattform
  • Mannequinhode
  • Kinect med USB+strømadapter
  • USB strømadapter
  • Skjøteledning
  • Micro USB -kabel
  • Servo strømkabel
  • Bringebær Pi
  • Mann-til-hunn-jumperkabel
  • Selvklebende borrelås
  • Saks

Hvordan lage

  1. Monter Pi til bunnen av brettet med borrelås.
  2. Fest USB -strømadapteren med borrelås.
  3. Koble servo og Pi til USB -strømadapteren.
  4. Koble pin 12 (GPIO18) på Pi til signalkabelen til servoen. Det er den sjette pinnen nede til høyre.
  5. Slå skjøteledningen gjennom det bakre håndtaket på skuffen og koble USB -strømadapteren til den ene siden.
  6. Ta Kinect USB+AC -adapteren, og koble strømadapteren til den andre siden av skjøteledningen og USB -en til Pi.
  7. Slå ledningen til Kinect gjennom det fremre håndtaket på skuffen, og plugg den inn i Kinect -adapteren.
  8. Jeg brukte tape til å holde kablene på undersiden av plattformen. Dette ser ikke det mest elegante ut, men alt dette er heldigvis skjult.
  9. Snu plattformen med høyre side opp og bruk borrelås for å montere Kinect på forsiden av plattformen.
  10. Bruk borrelås for å montere mannekenghodet på hodeplattformen. Når alt er stilt opp, skiller du imidlertid de to delene slik at vi får tilgang til monteringsskruen til servohornet. Ikke skru hornet til servoen ennå, ettersom vi må sørge for at servoen først er i senterposisjon, slik at vi kan stille alt opp. Vi gjør dette i et senere trinn.

Trinn 7: Programvare og algoritme

Programvare og algoritme
Programvare og algoritme

Oversikt

Programvaren for dette prosjektet er skrevet i C ++ og er integrert med Robot Operating System (ROS), et rammeverk for skriving av robotikkprogramvare. I ROS er programvaren for et system delt opp i en samling programmer som kalles noder, hvor hver node implementerer en bestemt underseksjon av systemets funksjonalitet. Data overføres mellom noder ved hjelp av en publiser/abonner -metode, der noder som produserer dataene publiserer dem og noder som bruker dataene, abonnerer på den. Ved å frakoble koden på denne måten kan systemfunksjonalitet enkelt utvides, og noder deles mellom systemer for raskere utvikling.

I dette systemet brukes ROS først og fremst for å skille koden som beregner ankomstretningen (DOA) for lydkilden fra koden som styrer servoen, slik at andre prosjekter kan inkludere Kinect DOA -estimering uten å inkludere servokode de kanskje ikke trenger eller ønsker. Hvis du ønsker å se på selve koden, kan du finne den på GitHub:

github.com/raikaDial/kinect_doa

Kinect DOA Node

Kinect_doa -noden er kjøttet og beinene i dette systemet, og gjør i utgangspunktet alt interessant. Ved oppstart initialiserer den ROS -noden, noe som gjør all ROS -magi mulig, og laster deretter opp fastvare til Kinect slik at lydstrømmene blir tilgjengelige. Det gyter deretter en ny tråd som åpner lydstrømmene og begynner å lese i mikrofondata. Kinect prøver sine fire mikrofoner med en frekvens på 16 kHz hver, så det er godt å ha kryss-korrelasjonen og datainnsamlingen i separate tråder for å unngå manglende data på grunn av beregningsbelastning. Grensesnitt med Kinect oppnås ved å bruke libfreenect, en populær åpen kildekode-driver.

Samlingstråden utfører en tilbakeringingsfunksjon når nye data mottas, og både lagrer dataene og bestemmer når DOA skal estimeres. Dataene fra hver mikrofon lagres i rullende buffere som er like lange som vårt samplingsvindu, som her er 8192 prøver. Dette betyr å beregne kryss-korrelasjonen med omtrent det siste halve sekundets data, det jeg fant gjennom å eksperimentere var en god balanse mellom ytelse og beregningsbelastning. DOA-estimeringen utløses for hver 4096 prøver ved å signalisere hovedtråden, slik at påfølgende kryss-korrelasjoner overlapper med 50%. Vurder et tilfelle der det ikke er noen overlapping, og du lager en veldig rask støy som blir halvert av prøvetakingsvinduet. Før og etter din særegne lyd vil sannsynligvis være hvit støy, noe som kan være vanskelig å stemme overens med kryss-korrelasjonen. Overlappende vinduer gir oss et mer komplett utvalg av lyden, noe som øker påliteligheten til kryss-korrelasjonen vår ved å gi oss flere forskjellige funksjoner å stille opp.

Hovedtråden venter på signalet fra innsamlingstråden, og beregner deretter DOA -estimatet. Først sjekker den imidlertid om de fangede bølgeformene er vesentlig forskjellige fra hvit støy. Uten denne kontrollen ville vi beregnet estimatet vårt fire ganger i sekundet, uavhengig av om det var interessante lyder eller ikke, og mannequinhodet vårt ville være et spastisk rot. Den hvite støy -deteksjonsalgoritmen som brukes i dette systemet er den første av de to som er oppført her. Vi beregner forholdet mellom det absolutte integralet av derivatet av bølgeformen og det absolutte integralet; For signaler med høyt hvitstøyinnhold er dette forholdet høyere enn for mindre bråkete signaler. Ved å sette en terskel for dette forholdet som skiller støy fra ikke-støy, kan vi utløse kryss-korrelasjonen bare når det er hensiktsmessig. Selvfølgelig er dette forholdet noe som må justeres hver gang systemet flyttes til et nytt miljø.

Når programmet er bestemt at bølgeformene inneholder betydelig ikke-støyinnhold, fortsetter programmet med tverrkorrelasjonene. Det er imidlertid tre viktige optimaliseringer innebygd i disse beregningene:

  1. Det er fire mikrofoner på Kinect, noe som betyr at det er seks totalt par bølgeformer vi kan kryss-korrelere. Men hvis du ser på det romlige arrangementet av mikrofonoppsettet, kan du se at mikrofonene 2, 3 og 4 er veldig nær hverandre. Faktisk er de så nære at på grunn av lydens hastighet og vår samplingsfrekvens vil bølgeformene mottatt ved 2, 3 og 4 skilles med høyst en prøve foran eller bak, som vi kan verifisere med beregningen maxlag = Δd *fs/vs, der Δd er separasjonen av mikrofonparet, fs er samplingsfrekvensen og vs er lydens hastighet. Dermed er det ubrukelig å korrelere par mellom disse tre, og vi trenger bare å krysskorrelere mikrofon 1 med 2, 3 og 4.
  2. Standard kryss-korrelasjon av lydsignaler er kjent for å fungere dårlig i nærvær av etterklang (ekko). Et robust alternativ er kjent som den generaliserte kryss-korrelasjonen med fasetransform (GCC-PHAT). Denne metoden går ut på å bruke en vektingsfunksjon som forsterker topper i kryss-korrelasjonen, noe som gjør det lettere å skille det originale signalet fra ekko. Jeg sammenlignet ytelsen til GCC-PHAT med den enkle kryss-korrelasjonen i et etterklangskammer (les: bad i betong som ble ombygd), og fant GCC-PHAT å være 7 ganger mer effektiv til å estimere riktig vinkel.
  3. Når vi utfører kryss-korrelasjonen, tar vi de to signalene, skyver det ene langs det andre og multipliserer hvert punkt i vårt faste signal med hvert punkt i vårt glidesignal. For to signaler med lengde n resulterer dette i n^2 beregninger. Vi kan forbedre dette ved å utføre kryss-korrelasjonen i frekvensdomenet i stedet, som innebærer en rask fouriertransformasjon (nlogn-beregninger), multiplisere hvert punkt i et transformert signal med det tilsvarende punktet i det andre (n-beregningene), og deretter utføre en invers fourier transform for å gå tilbake til tidsdomenet (nlogn -beregninger), noe som resulterer i n+2*nlogn -beregninger, mindre enn n^2. Dette er imidlertid den naive tilnærmingen. Mikrofonene i vårt utvalg er så tett sammen, og lydhastigheten er så relativt langsom at lydbølgeformene allerede vil være stort sett justert. Dermed kan vi åpne vår kryss-korrelasjon for å bare vurdere forskyvninger som er litt foran eller bak. For mikrofoner 1 og 4 må forsinkelsen falle mellom +/- 12 prøver, noe som betyr at for hver kryss-korrelasjon trenger vi bare å utføre 24*n beregninger, noe som resulterer i beregningsbesparelser når bølgeformene våre er lengre enn 2900 prøver.

Dette systemet utnytter minidsp-biblioteket, som implementerer GCC-PHAT-algoritmen med optimalisering 3.

Når vi har funnet forsinkelsen i signalene fra hvert mikrofonpar, velger programmet medianverdien for etterslep, bruker den til å beregne den estimerte vinkelen og publiserer resultatet slik at det kan brukes til å kontrollere servoen.

Servokontrollnode

Sammenlignet med kinect_doa -noden er servonoden relativt enkel. Jobben er å utelukkende ta estimert DOA og flytte servoen til den vinkelen. Den bruker wiringPi -biblioteket for å få tilgang til maskinvare -PWM -modulen til Raspberry Pi, ved å bruke den til å angi vinkelen på servoen. De fleste analoge servoer styres av et PWM -signal med en pulsbredde fra 1000 µs til 2000 µs, som tilsvarer en vinkel på 0 ° til 180 °, men servoen jeg brukte ble kontrollert med 500 µs til 2500 µs, tilsvarende en vinkel 0 til 270 °. Således er noden konfigurerbar for forskjellig servomaskinvare ved å angi parametere for minimum pulsbredde, maksimal pulsbredde og forskjellen mellom maksimal og minimum vinkel. I tillegg beveger servoen seg ikke umiddelbart til målvinkelen, men beveger seg heller mot vinkelen med en konfigurerbar hastighet, noe som gir Margaret en mer gradvis, skummel stemning (pluss at lyden av en servo som beveger seg raskt frem og tilbake blir irriterende veldig fort).

Trinn 8: Bygg og installasjon

Installer avhengigheter:

Installer først libfreenect. Vi må bygge den fra kilde fordi versjonen du kan få med pakkelederen ikke inneholder støtte for lyd. Dette er fordi vi må laste opp fastvare til Kinect for å aktivere lyd, og omfordeling av denne fastvaren er ikke lovlig i visse jurisdiksjoner. I tillegg kan vi unngå å bygge eksemplene som krever OpenGL og glut, unødvendig for hodeløse Raspbian -installasjoner.

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 = AV gjør sudo make install sudo cp ~/libfreenect/platform/linux/udev/51 -kinv.rules /etc/udev/rules.d udevadm control --reload-rules && udevadm trigger

Deretter må vi installere wiringPi -pakken, som lar oss kontrollere GPIO -pinnene på Pi:

cd

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

Fest Mannequinhode:

Med wiringPi installert kan vi nå ta en rask omvei tilbake til hardware-land for å feste mannequinhodet på den nedre plattformen. For å sentrere servoen via kommandolinjen, skriv inn følgende kommandoer:

gpio pwm-ms

gpio pwmc 192 gpio pwmr 2000 gpio -g pwm 18150

Hvis det ikke er noen bevegelse, er servoen din sannsynligvis allerede sentrert. For å være sikker kan du sette servoen til en ikke-senterverdi, f.eks. gpio -g pwm 18 200, og sett den deretter tilbake til 150.

Når du er sikker på at servoen er sentrert, fest servohornet på hodeplattformen til servoen slik at mannequinhodet ser rett frem. Deretter skrur du hornet på servoen og fester hodet ditt via borrelåsbitsene.

Installer ROS:

Deretter installerer du ROS på din Pi. En flott installasjonsguide finner du her; for vårt system trenger vi ikke OpenCV, så du kan hoppe over trinn 3. Denne bygningen vil ta flere timer å fullføre. Når du er ferdig med å følge installasjonsveiledningen, legger du til sourcing av installasjonen til bashrc slik at vi kan bruke våre nylig installerte ROS -pakker:

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

Bygg Kinect DOA -pakke:

Etter alt som er gjort, lager du et catkin -arbeidsområde for prosjektet vårt og skriver inn src -katalogen:

mkdir -p ~/kinect_doa_ws/src

cd ~/kinect_doa_ws/src

Koden for dette prosjektet er inneholdt i kinect_doa -pakken, så klon den inn i src -katalogen i det nye arbeidsområdet:

git -klon

Pakken robot_upstart gir et brukervennlig verktøy for å installere lanseringsfiler slik at de kjøres ved oppstart, så klon dette også inn i arbeidsområdet ditt:

git -klon

Nå kan vi bygge prosjektkoden ved å ringe catkin_make fra katalogen på øverste nivå i arbeidsområdet vårt, og deretter kilde bygningen vår slik at pakkene våre er tilgjengelige:

cd ~/kinect_doa_ws

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

Løping og tuning:

Forutsatt at alt er koblet til og slått på, bør du nå kunne starte systemet og ha Kinect -sporet du stemmer! Hvis du imidlertid har en Kinect 1473, åpner du først filen ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch i et tekstredigeringsprogram og setter parameteren using_kinect_1473 til true. I tillegg, hvis du brukte en annen servo enn jeg gjorde, er det sannsynligvis en standard analog servo, så mens du er i lanseringsfilen, endrer du parameteren min_us til 1000, max_us til 2000 og max_deg til 180.

roslaunch kinect_doa kinect_doa.launch

Lek med det en stund. Hvis du føler at systemet er for sensitivt (ser i tilfeldige retninger som ikke samsvarer med stemmer eller særegne lyder), kan du prøve å endre parameteren white_noise_ratio i lanseringsfilen og starte systemet på nytt til responsen er på et nivå du er komfortabel med. Økning av forholdet vil gjøre systemet mindre responsivt og omvendt. Du må sannsynligvis utføre denne tuningen når du flytter systemet til et annet sted for å få den ytelsen du ønsker.

For å starte programmet når vi slår på Pi, bruker vi pakken robot_upstart til å installere lanseringsfilen. Hvis ROS ikke kjører for øyeblikket, start det med kommandoen roscore. Deretter åpner du en ny terminal og installerer lanseringen med:

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

Vi oppretter en symlink til lanseringsfilen i stedet for å kopiere den slik at vi kan endre parametere ved å redigere ~/kinect_doa_ws/src/kinect_doa/launch/kinect_doa.launch.

Trinn 9: Skjule det på kontoret

Skjul det på kontoret
Skjul det på kontoret

Nå for den morsomme delen. Gå på jobb etter timer og sett mannequinhodet ditt i hemmelighet. Da er det bare å lene seg tilbake og se hvor lang tid det tar før medarbeiderne får det til! Din nye skapelse vil garantert snu noen hoder …

Anbefalt: