Taula de continguts:

Cap de maniquí localitzador de so amb Kinect: 9 passos (amb imatges)
Cap de maniquí localitzador de so amb Kinect: 9 passos (amb imatges)

Vídeo: Cap de maniquí localitzador de so amb Kinect: 9 passos (amb imatges)

Vídeo: Cap de maniquí localitzador de so amb Kinect: 9 passos (amb imatges)
Vídeo: Как охотиться на людей ► 1 Прохождение Manhunt (PS2) 2024, Desembre
Anonim
Cap de maniquí localitzador de so amb Kinect
Cap de maniquí localitzador de so amb Kinect

Coneix Margaret, un maniquí de proves per a un sistema de control de fatiga del conductor. Recentment, es va retirar de les seves funcions i es va dirigir a la nostra oficina i, des de llavors, ha cridat l’atenció a aquells que pensen que és “esgarrifosa”. En interès de la justícia, li he donat la possibilitat d’enfrontar-se frontalment als seus acusadors; en lloc de semblar-te seguir amb la seva mirada sense ànima, ara ho fa en realitat. El sistema utilitza el conjunt de micròfons d’un Microsoft Kinect i un servo per dirigir-la cap a la gent que parla a prop seu.

Pas 1: teoria

Teoria
Teoria

Càlcul de l’angle

Quan sentim alguna cosa, tret que aquest soroll estigui directament davant nostre, arriba a una orella abans que l’altra. Els nostres cervells perceben aquest retard d’arribada i el converteixen en una direcció general que prové del soroll, cosa que ens permet trobar la font. Podem aconseguir exactament el mateix tipus de localització mitjançant un parell de micròfons. Penseu en el diagrama que es mostra, que conté un parell de micròfons i una font de so. Si mirem de dalt a baix, les ones sonores són circulars, però si la distància a la font és gran en relació a l’espaiat entre els micròfons, des del punt de vista dels nostres sensors l’ona és aproximadament plana. Això es coneix com suposició de camp llunyà i simplifica la geometria del nostre problema.

Suposem, doncs, que el front d’ona és una línia recta. Si el so ve de la dreta, tocarà el micròfon núm. 2 a l'hora t2 i el micròfon núm. 1 a l'hora t1. La distància del so recorreguda entre el micròfon núm. 2 i el micròfon núm. 1 és la diferència horària en detectar el so multiplicat per la velocitat del so v s:

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

Podem relacionar aquesta distància amb la distància d 12 entre el parell de micròfon i l’angle θ del parell amb la font de so amb la relació:

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

Com que només tenim dos micròfons, hi haurà ambigüitat en el nostre càlcul sobre si la font de so es troba davant o darrere nostre. En aquest sistema, assumirem que la font de so es troba davant del parell i fixar l’angle entre 0 graus (completament a la dreta del parell) a 180 graus (completament a l’esquerra).

Finalment, podem resoldre el theta prenent el cosinus invers:

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

Per fer que l’angle sigui una mica més natural, podem restar 90 graus de theta, de manera que 0 graus estigui directament davant del parell i +/- 90 graus sigui completament esquerre o completament dret. Això converteix la nostra expressió del cosinus invers en el sinus invers.

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

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

Trobar el retard

Com podeu veure a l’equació anterior, tot el que hem de resoldre per a l’angle és el retard de l’ona sonora que arriba al micròfon un en comparació amb el micròfon dos; la velocitat del so i la distància entre els micròfons són fixes i conegudes. Per aconseguir-ho, primer mostrem els senyals d’àudio a la freqüència fs, convertint-los d’analògic a digital i emmagatzemant les dades per a un ús posterior. Mostrem durant un període de temps conegut com a finestra de mostreig, que té una durada suficientment llarga com per captar trets distingibles de la nostra ona sonora. Per exemple, la nostra finestra podria ser el valor de dades d'àudio del darrer mig segon.

Després d’obtenir els senyals d’àudio amb finestra, trobem el retard entre tots dos calculant la seva correlació creuada. Per calcular la correlació creuada, mantenim fix el senyal obert des d’un micròfon i fem lliscar el segon senyal al llarg de l’eix del temps des de darrere del primer fins tot el camí per davant del primer. A cada pas al llarg de la nostra diapositiva multiplicem cada punt del nostre senyal fix pel seu punt corresponent en el nostre senyal lliscant, i després sumem tots els resultats per calcular el nostre coeficient de correlació per a aquest pas. Després de completar la diapositiva, el pas que té el coeficient de correlació més alt correspon al punt en què els dos senyals són més similars i en quin pas estem ens indica quantes mostres n el senyal dos està compensat del senyal 1. Si n és negatiu, llavors el senyal dos es queda per darrere del senyal un, si és positiu, el senyal dos està per davant i, si és zero, els dos ja estan alineats. Convertim aquest desplaçament de mostra a un retard de temps utilitzant la nostra freqüència de mostreig amb la relació Δt = n / fs, així:

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

Pas 2: components

Parts

  • Microsoft Kinect per a Xbox 360, model 1414 o 1473. El Kinect té quatre micròfons disposats en una matriu lineal que utilitzarem.
  • Adaptador per convertir el connector propietari del Kinect a USB + CA d'alimentació com aquesta.
  • Raspberry Pi 2 o 3 amb Raspbian Stretch. Originalment vaig intentar utilitzar un Pi 1 Model B +, però no era prou potent. Continuava tenint problemes per desconnectar de Kinect.
  • El cap de maniquí més esgarrifós que podeu trobar
  • Un servo analògic prou fort com per girar el cap del maniquí
  • Un carregador de paret USB de 5V amb suficient amperatge per alimentar tant el Pi com el servo i almenys dos ports. (He utilitzat un endoll de 3 ports 5A similar a aquest
  • Un cable d’extensió amb dues sortides (una per al carregador de paret USB i l’altra per a l’adaptador de CA Kinect.
  • Dos cables USB: un cable de tipus A a micro-USB per alimentar el Pi i un altre per alimentar el servo que no us importa tallar
  • Una plataforma perquè tot s’hi pugui asseure i una altra plataforma més petita per al cap de maniquí. Vaig utilitzar una safata de plàstic com a base i una placa de plàstic com a plataforma del cap. Tots dos eren de Walmart i només costaven uns quants dòlars
  • 4x perns i femelles # 8-32 1/2 "per fixar el servo a la plataforma més gran
  • 2x perns M3 de 8 mm amb volanderes (o de la mida que necessiteu per fixar la banya del servo a la plataforma més petita)
  • Dos cables de pont home-a-home, un de color vermell i un de negre i un cable de pont de femella a home
  • Tires de velcro amb respatller adhesiu
  • Cinta elèctrica
  • Cinta adhesiva per a la gestió de cables

Eines

  • Dremel amb roda de tall
  • Trepant
  • Broques de 7/64 ", 11/16" i 5/16"
  • Toqueu M3 (opcional, depenent del vostre servocorn)
  • Tornavís
  • Soldador amb soldadura
  • Mans ajudants (opcional)
  • Marcador
  • Brúixola
  • Decapants de filferro
  • Multímetre (opcional)

EPI

  • Ulleres de seguretat

  • Màscara facial (per a trossos de plàstic amb dremmel).

Pas 3: Muntatge inferior de la plataforma

Muntatge de la plataforma inferior
Muntatge de la plataforma inferior
Muntatge de la plataforma inferior
Muntatge de la plataforma inferior
Muntatge de la plataforma inferior
Muntatge de la plataforma inferior

La primera part que farem és la plataforma inferior, que contindrà el nostre Kinect, el servo i tota la nostra electrònica. Per fer la plataforma necessitareu:

  • Safata de plàstic
  • Servo
  • 4x perns # 8-32 1/2 "amb femelles
  • Dremel amb roda de tall
  • Tornavís
  • Trepant
  • Broca de 11/16"
  • Marcador

Com fer

  1. Gireu la safata al revés.
  2. Col·loqueu el servo de costat cap a la part posterior de la safata, assegureu-vos que l’engranatge de sortida del servo estigui al llarg de la línia central de la safata i, a continuació, marqueu al voltant de la base del servo.
  3. Amb el dremel i la roda de tall, retalleu l'àrea que hàgiu marcat i, a continuació, introduïu el servo a la seva ranura.
  4. Marqueu els centres dels forats de muntatge de la carcassa del servo a la safata i, a continuació, traieu el servo i traieu els forats amb la broca de 11/16 ". És molt fàcil trencar plàstic prim així com foradar els forats, de manera que em sembla molt més segur per executar el trepant a la inversa i reduir lentament el material, és molt més lent que perforar els forats correctament, però assegura que no hi hagi esquerdes.
  5. Col·loqueu el servo a la ranura i, a continuació, monteu-lo a la safata amb els perns i femelles # 8-32.

Pas 4: Muntatge de plataforma de capçalera

Muntatge de la plataforma del cap
Muntatge de la plataforma del cap
Muntatge de la plataforma del cap
Muntatge de la plataforma del cap
Muntatge de la plataforma del cap
Muntatge de la plataforma del cap
Muntatge de la plataforma del cap
Muntatge de la plataforma del cap

La següent part que farem serà una plataforma per connectar el cap de maniquí al servo. Per fer la plataforma principal necessitareu:

  • Plàstic de plàstic
  • Servocorn
  • 2x pern M3 de 8 mm amb arandelles
  • Tornavís
  • Trepant
  • Broques de 7/64 "i 5/16"
  • Brúixola
  • Dremel amb roda de tall

Com fer

  1. Ajusteu la brúixola al radi de la base del cap del maniquí.
  2. Utilitzeu la brúixola per marcar un cercle centrat al centre de la placa. Aquesta serà la mida real de la nostra plataforma principal.
  3. Utilitzeu el dremel i la roda de tall per tallar la plataforma més petita de la placa.
  4. Traieu el centre de la vostra nova plataforma amb una broca de 5/16 ". Això ens donarà accés al cargol que munta la nostra banya servo al nostre servo. Per donar estabilitat a la plataforma mentre perforava el forat, he posat una bobina de cable sota i perforat pel centre del carret.
  5. Alineeu la vostra banya servo amb el centre de la plataforma i marqueu dos forats per fixar la banya a la plataforma. Assegureu-vos que aquests forats de muntatge estiguin prou separats perquè hi hagi espai per als capçals i les volandes de cargol M3.
  6. Traieu aquests forats marcats amb una broca de 7/64 ".
  7. El forat inferior de la meva banya de servo era llis, és a dir, no tenia els fils per al cargol M3. Per tant, he utilitzat la broca i una aixeta M3 per fer els fils.
  8. Utilitzeu els cargols i les arandeles per fixar la banya del servo a la plataforma del cap.

Pas 5: cable d'alimentació servo

Cable d'alimentació servo
Cable d'alimentació servo
Cable d'alimentació servo
Cable d'alimentació servo
Cable d'alimentació servo
Cable d'alimentació servo
Cable d'alimentació servo
Cable d'alimentació servo

Els servos analògics solen funcionar amb 4,8-6 V. Com que el Raspberry Pi ja funcionarà amb 5 V des d’USB, simplificarem el nostre sistema alimentant també el servo des d’USB. Per fer-ho haurem de modificar un cable USB. Per fabricar el cable d'alimentació servo necessitareu:

  • Cable USB de recanvi amb un extrem tipus A (el que es connecta a l'ordinador)
  • Un cable vermell i un negre
  • Soldador
  • Soldar
  • Decapants de filferro
  • Cinta elèctrica
  • Mans ajudants (opcional)
  • Multímetre (opcional)

Com fer

  1. Retalleu el cable del connector A no USB tipus A i, a continuació, retireu una mica l'aïllament per revelar els quatre cables interiors. Tallar el blindatge que envolta els cables exposats.
  2. Normalment, el cable USB tindrà quatre cables: dos per a la transmissió i recepció de dades i dos per a alimentació i connexió a terra. Ens interessa l’alimentació i el sòl, que solen ser de color vermell i negre, respectivament. Retireu una mica de l'aïllament dels cables vermells i negres i talleu els cables verds i blancs. Si us preocupa que no tingueu els cables d’alimentació i de terra correctes, podeu connectar el cable a l’adaptador d’alimentació USB i comprovar el voltatge de sortida amb un multímetre.
  3. A continuació, talleu un extrem dels cables de pont vermell i negre i retireu una mica de l'aïllament.
  4. Ara, torceu els cables negres exposats del pont i els cables USB. Travesseu els centres dels cables exposats i torceu-los l’un al voltant de l’altre. A continuació, apliqueu la soldadura als cables aparellats per mantenir-los units. Ajudar les mans ho farà més fàcil mantenint els cables al seu lloc.
  5. Repetiu el pas 4 per als cables vermells.
  6. Tapeu el cablejat exposat amb cinta elèctrica o tubs termorretractors si us ve de gust. Aquestes juntes seran fràgils ja que els cables són tan petits, de manera que afegiu una segona capa de cinta que subjecti els cables del pont a l'aïllament exterior del cable USB. Això farà que el conjunt sigui més rígid i, per tant, sigui menys probable que es trenqui en doblar-se.

Pas 6: muntatge electrònic

Muntatge electrònic
Muntatge electrònic
Muntatge electrònic
Muntatge electrònic
Muntatge electrònic
Muntatge electrònic

Finalment, ho reunirem tot, muntarem la nostra electrònica i tota la resta a la plataforma inferior. Necessitarà:

  • Plataforma inferior
  • Plataforma capçalera
  • Cap de maniquí
  • Kinect amb adaptador USB + AC
  • Adaptador d'alimentació USB
  • Allargador
  • Cable micro USB
  • Cable d'alimentació servo
  • Raspberry Pi
  • Cable jumper home a dona
  • Velcro adhesiu
  • Tisores

Com fer

  1. Muntar el Pi a la part inferior de la safata amb velcro.
  2. Connecteu l'adaptador d'alimentació USB amb velcro.
  3. Connecteu el servo i Pi a l'adaptador d'alimentació USB.
  4. Connecteu el pin 12 (GPIO18) del Pi al cable de senyal del servo. És el 6è pin de la dreta.
  5. Col·loqueu el cable d’extensió per la nansa posterior de la safata i connecteu l’adaptador d’alimentació USB a un costat.
  6. Agafeu l'adaptador Kinect USB + CA i connecteu l'adaptador d'alimentació a l'altre costat del cable d'extensió i l'USB al Pi.
  7. Col·loqueu el cable del Kinect per la serp mitjançant la nansa frontal de la safata i connecteu-lo a l’adaptador Kinect.
  8. Vaig utilitzar cinta adhesiva per subjectar els cables a la part inferior de la plataforma. Això no sembla el més elegant, però per sort tot això està amagat.
  9. Gireu la plataforma cap a la dreta cap amunt i utilitzeu Velcro per muntar el Kinect a la part frontal de la plataforma.
  10. Utilitzeu velcro per muntar el cap del maniquí a la plataforma del cap. Un cop tot alineado, separeu les dues peces perquè puguem accedir al cargol de muntatge del servocorn. Tot i això, no cargoleu la banya al servo, ja que primer hem d’assegurar-nos que el servo estigui en la seva posició central per poder alinear-ho tot. Ho farem en un pas posterior.

Pas 7: Programari i algorisme

Programari i algorisme
Programari i algorisme

Visió general

El programari d’aquest projecte està escrit en C ++ i s’integra amb Robot Operating System (ROS), un marc per escriure programari de robòtica. A ROS, el programari d’un sistema es divideix en una col·lecció de programes anomenats nodes, on cada node implementa una subsecció específica de la funcionalitat del sistema. Les dades es transmeten entre nodes mitjançant un mètode de publicació / subscripció, on els nodes que produeixen les dades ho publiquen i els nodes que en consumeixen es subscriuen. El desacoblament del codi d’aquesta manera permet ampliar fàcilment la funcionalitat del sistema i compartir nodes entre sistemes per a un desenvolupament més ràpid.

En aquest sistema, ROS s'utilitza principalment per separar el codi que calcula la direcció d'arribada (DOA) de la font de so del codi que controla el servo, permetent a altres projectes incloure l'estimació DOA Kinect sense incloure codi servo que potser no necessiten o desitgen. Si voleu mirar el codi en si, el podeu trobar a GitHub:

github.com/raikaDial/kinect_doa

Node Kinect DOA

El node kinect_doa és la carn i els ossos d’aquest sistema, fent bàsicament tot allò interessant. En iniciar-se, inicialitza el node ROS, fent possible tota la màgia ROS, i després penja el firmware al Kinect perquè els fluxos d’àudio estiguin disponibles. A continuació, genera un nou fil que obre els fluxos d'àudio i comença a llegir les dades del micròfon. El Kinect mostra els seus quatre micròfons a una freqüència de 16 kHz cadascun, de manera que és bo tenir la correlació creuada i la recopilació de dades en fils separats per evitar que falten dades a causa de la càrrega computacional. La interfície amb el Kinect s’aconsegueix amb libfreenect, un popular controlador de codi obert.

El fil de recopilació executa una funció de devolució de trucada cada vegada que es reben dades noves, i emmagatzema les dades i determina quan cal estimar el DOA. Les dades de cada micròfon s’emmagatzemen en memòries intermèdies de laminació iguals a la nostra finestra de mostreig, que aquí són 8192 mostres. Això es tradueix en calcular la correlació creuada amb aproximadament el valor de les dades del darrer mig segon, el que he trobat a través de l’experimentació com un bon equilibri entre el rendiment i la càrrega computacional. L'estimació de DOA s'activa per cada 4096 mostres mitjançant la senyalització del fil principal, de manera que les correlacions creuades consecutives se superposen en un 50%. Penseu en un cas en què no hi hagi solapament i feu un soroll molt ràpid que es redueix a la meitat per la finestra de mostreig. Abans i després del so distintiu, probablement hi haurà sorolls blancs, que poden ser difícils d’alinear amb la correlació creuada. Les finestres superposades ens proporcionen una mostra més completa del so, augmentant la fiabilitat de la nostra correlació creuada, donant-nos funcions més diferents per alinear-les.

El fil principal espera el senyal del fil de recollida i, a continuació, calcula l'estimació de DOA. En primer lloc, però, comprova si les formes d'ona capturades són significativament diferents del soroll blanc. Sense aquesta comprovació, calcularíem la nostra estimació quatre vegades per segon, independentment de si hi havia sorolls interessants o no, i el nostre cap de maniquí seria un embolic espàstic. L’algorisme de detecció de soroll blanc utilitzat en aquest sistema és el primer dels dos que s’enumeren aquí. Calculem la proporció de la integral absoluta de la derivada de la nostra forma d'ona a la seva integral absoluta; per a senyals amb alt contingut de soroll blanc, aquesta proporció és superior a la de senyals menys sorollosos. En establir un llindar per a aquesta relació que separa el soroll del no soroll, només podem provocar la correlació creuada quan correspongui. Per descomptat, aquesta relació és quelcom que s’ha de tornar a sintonitzar cada vegada que el sistema es trasllada a un entorn nou.

Un cop determinat que les formes d'ona contenen un contingut significatiu no sorollós, el programa continua amb les correlacions creuades. No obstant això, hi ha tres optimitzacions importants incorporades en aquests càlculs:

  1. Hi ha quatre micròfons al Kinect, és a dir, hi ha sis parells totals de formes d'ona que podem correlacionar creuadament. Tanmateix, si observeu la disposició espacial de la matriu de micròfons, podeu veure que els micròfons 2, 3 i 4 estan molt a prop l'un de l'altre. De fet, són tan a prop que, a causa de la velocitat del so i la nostra freqüència de mostreig, les formes d’ona rebudes a 2, 3 i 4 estaran separades com a màxim per una mostra per davant o per darrere, cosa que podem verificar amb el càlcul maxlag = Δd * fs / vs, on Δd és la separació del parell de micròfons, fs és la freqüència de mostreig i vs és la velocitat del so. Per tant, la correlació de parells entre aquests tres no serveix de res, i només necessitem correlacionar el micròfon 1 amb 2, 3 i 4.
  2. Se sap que la correlació creuada estàndard dels senyals d’àudio funciona malament en presència de reverberacions (ecos). Una alternativa sòlida es coneix com la correlació creuada generalitzada amb transformació de fase (GCC-PHAT). Aquest mètode es resumeix en aplicar una funció de ponderació que amplifica els pics en la correlació creuada, cosa que facilita la distinció del senyal original dels ecos. Vaig comparar el rendiment de GCC-PHAT amb la simple correlació creuada en una cambra de reverberació (llegiu: es remodelava el bany de formigó) i vaig trobar que GCC-PHAT era 7 vegades més eficaç per estimar l’angle correcte.
  3. Quan realitzem la correlació creuada, estem prenent els dos senyals, lliscant l'un al llarg de l'altre i multiplicant cada punt del nostre senyal fix per cada punt del nostre senyal lliscant. Per a dos senyals de longitud n, això resulta en càlculs n ^ 2. Podríem millorar-ho realitzant la correlació creuada en el domini de freqüències, que implica una transformada de fourier ràpida (càlculs de nlogn), multiplicant cada punt en un senyal transformat pel punt corresponent de l’altre (n càlculs) i realitzant una inversa transformada de fourier per tornar al domini del temps (càlculs de nlogn), donant lloc a n + 2 * càlculs de nlogn, inferior a n ^ 2. No obstant això, aquest és l'enfocament ingenu. Els micròfons de la nostra matriu estan tan junts i la velocitat del so és tan relativament lenta que les formes d'ona d'àudio ja estaran majoritàriament alineades. Per tant, podem mostrar la nostra correlació creuada per considerar només les compensacions que estan lleugerament per davant o per darrere. Per als micròfons 1 i 4, el retard ha de situar-se entre +/- 12 mostres, és a dir, per a cada correlació creuada només necessitem realitzar càlculs de 24 * n, cosa que comporta un estalvi computacional quan les nostres formes d’ona superen els 2900 mostres.

Aquest sistema aprofita la biblioteca minidsp, que implementa l'algorisme GCC-PHAT amb l'optimització 3.

Un cop trobat el retard en els senyals de cada parell de micròfons, el programa tria el valor mitjà del lag, l’utilitza per calcular l’angle estimat i publica el resultat perquè es pugui utilitzar per controlar el servo.

Node de control servo

En comparació amb el node kinect_doa, el node servo és relativament senzill. La seva tasca és agafar únicament la DOA estimada i moure el servo a aquest angle. Utilitza la biblioteca wiringPi per accedir al mòdul de maquinari PWM del Raspberry Pi, que l’utilitza per configurar l’angle del servo. La majoria dels servos analògics estan controlats per un senyal PWM amb una amplada de pols que oscil·la entre 1000 µs i 2000 µs, que correspon a un angle de 0 ° a 180 °, però el servo que he utilitzat es controla amb 500 µs a 2500 µs, corresponent a un angle de 0 ° a 270 °. Per tant, el node es pot configurar per a diferents servomaterials configurant paràmetres per a l'amplada mínima del pols, l'amplada màxima del pols i la diferència entre els angles màxim i mínim. A més, el servo no es mou immediatament cap a l’angle objectiu, sinó que es dirigeix cap a l’angle a una velocitat configurable, donant a Margaret un ambient més gradual i esgarrifós (a més, el so d’un servo que es mou ràpidament cap endavant i cap enrere es molesta molt ràpidament).

Pas 8: construcció i instal·lació

Instal·leu dependències:

Primer, instal·leu libfreenect. L'hem de construir des de l'origen, perquè la versió que podeu obtenir amb el gestor de paquets no inclou suport per a àudio. Això es deu al fet que hem de carregar el microprogramari a Kinect per habilitar l'àudio i que la redistribució d'aquest microprogramari no és legal en determinades jurisdiccions. A més, podem evitar crear exemples que requereixin OpenGL i glut, innecessaris per a instal·lacions Raspbian sense cap.

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 cp ~ / libfreenect / platform / lin /.rules /etc/udev/rules.d control udevadm --reload-rules && udevadm trigger

A continuació, hem d’instal·lar el paquet wiringPi, que ens permet controlar els pins GPIO del Pi:

cd

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

Enganxa cap de maniquí:

Amb wiringPi instal·lat, ara podem fer una ràpida desviació cap a la terra de maquinari per fixar el cap del maniquí a la plataforma inferior. Per centrar el servo mitjançant la línia d'ordres, introduïu les ordres següents:

gpio pwm-ms

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

Si no hi ha moviment, és probable que el vostre servo ja estigui centrat. Tanmateix, per assegurar-vos que podeu configurar el servo a un valor que no sigui central, p. gpio -g pwm 18 200 i, a continuació, torneu a establir-lo a 150.

Un cop esteu segur que el servo està centrat, fixeu la banya del servo de la plataforma del cap al servo de manera que el cap del maniquí estigui mirant cap endavant. A continuació, cargoleu la banya al servo i fixeu el cap a través de les puntes de velcro.

Instal·leu ROS:

A continuació, instal·leu ROS al vostre Pi. Podeu trobar una excel·lent guia d’instal·lació aquí; per al nostre sistema no necessitem OpenCV, de manera que podeu ometre el pas 3. Aquesta compilació trigarà diverses hores a completar-se. Quan hàgiu acabat de seguir la guia d’instal·lació, afegiu la font d’instal·lació al vostre bashrc perquè puguem utilitzar els paquets ROS acabats d’instal·lar:

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

Construeix el paquet Kinect DOA:

Després de tot el que s'ha fet, creeu un espai de treball de catkin per al nostre projecte i introduïu el directori src:

mkdir -p ~ / kinect_doa_ws / src

cd ~ / kinect_doa_ws / src

El codi d’aquest projecte es troba al paquet kinect_doa, així que cloneu-lo al directori src del vostre nou espai de treball:

git clone

El paquet robot_upstart proporciona una eina fàcil d'utilitzar per instal·lar fitxers d'inici perquè s'executin a l'inici, de manera que també cloneu-lo al vostre espai de treball:

git clone

Ara podem crear el codi del projecte trucant a catkin_make des del directori de nivell superior del nostre espai de treball i, a continuació, obtenir la nostra compilació perquè els nostres paquets estiguin disponibles:

cd ~ / kinect_doa_ws

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

Funcionament i afinació:

Suposant que tot estigui endollat i encès, ara hauríeu de poder iniciar el sistema i fer que el seguiment de Kinect sigui la vostra veu. Tanmateix, si teniu un Kinect 1473, primer obriu el fitxer ~ / kinect_doa_ws / src / kinect_doa / launch / kinect_doa.launch en un editor de text i configureu el paràmetre using_kinect_1473 a true. A més, si heu utilitzat un servo diferent del que he fet, probablement sigui un servo analògic estàndard. Per tant, mentre esteu al fitxer de llançament, canvieu el paràmetre min_us a 1000, max_us a 2000 i max_deg a 180.

roslaunch kinect_doa kinect_doa.launch

Juga-hi una estona. Si creieu que el sistema és massa sensible (mirant en direccions aleatòries que no corresponen a veus ni sorolls distintius), proveu de canviar el paràmetre white_noise_ratio al fitxer d'inici i rellançar el sistema fins que la capacitat de resposta estigui en un nivell que us agradi. Augmentar la proporció farà que el sistema sigui menys sensible i viceversa. Probablement haureu de realitzar aquesta sintonització sempre que moveu el sistema a una ubicació diferent per obtenir el rendiment que desitgeu.

Per iniciar el programa quan encengem el Pi, fem servir el paquet robot_upstart per instal·lar el nostre fitxer de llançament. Si ROS no s’executa actualment, inicieu-lo amb l’ordre roscore. A continuació, obriu un terminal nou i instal·leu el llançament amb:

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

Creem un enllaç simbòlic al fitxer d’inici en lloc de copiar-lo perquè puguem canviar els paràmetres editant ~ / kinect_doa_ws / src / kinect_doa / launch / kinect_doa.launch.

Pas 9: amagar-lo a l'oficina

Amagant-ho a l'oficina
Amagant-ho a l'oficina

Ara per la part divertida. Vés a la feina després d’hores i posa el maniquí cap amunt en secret. Aleshores, només cal seure i veure quant de temps triguen els seus companys a agafar-se! La vostra nova creació està garantida per girar uns quants caps …

Recomanat: