Tabla de contenido:

Cabeza de maniquí de localización de sonido con Kinect: 9 pasos (con imágenes)
Cabeza de maniquí de localización de sonido con Kinect: 9 pasos (con imágenes)

Video: Cabeza de maniquí de localización de sonido con Kinect: 9 pasos (con imágenes)

Video: Cabeza de maniquí de localización de sonido con Kinect: 9 pasos (con imágenes)
Video: 🌟Conéctate con la Estrella/Radio📻:Lengua Materna Guna - Primaria (3Trimestre) #4 : (Retransmisión) 2024, Mes de julio
Anonim
Cabeza de maniquí de localización de sonido con Kinect
Cabeza de maniquí de localización de sonido con Kinect

Conozca a Margaret, un muñeco de pruebas para un sistema de monitoreo de la fatiga del conductor. Recientemente se retiró de sus deberes y encontró su camino hacia nuestro espacio de oficina, y desde entonces ha llamado la atención de aquellos que piensan que es 'espeluznante'. En aras de la justicia, le he dado la capacidad de enfrentar a sus acusadores de frente; en lugar de seguirte aparentemente con su mirada desalmada, ahora realmente lo hace. El sistema utiliza la matriz de micrófonos de un Kinect de Microsoft y un servo para dirigirla en la dirección de las personas que hablan cerca de ella.

Paso 1: Teoría

Teoría
Teoría

Calcular el ángulo

Cuando escuchamos algo, a menos que ese ruido esté directamente frente a nosotros, llega a un oído antes que al otro. Nuestros cerebros perciben ese retraso en la llegada y lo convierten en una dirección general de donde proviene el ruido, lo que nos permite encontrar la fuente. Podemos lograr exactamente el mismo tipo de localización usando un par de micrófonos. Considere el diagrama que se muestra, que contiene un par de micrófonos y una fuente de sonido. Si miramos de arriba hacia abajo, las ondas sonoras son circulares, pero si la distancia a la fuente es grande en relación con el espacio entre los micrófonos, entonces, desde el punto de vista de nuestros sensores, la onda es aproximadamente plana. Esto se conoce como el supuesto de campo lejano y simplifica la geometría de nuestro problema.

Así que suponga que el frente de onda es una línea recta. Si el sonido proviene de la derecha, llegará al micrófono n. ° 2 en el momento t2 y al micrófono n. ° 1 en el momento t1. La distancia d que recorrió el sonido entre golpear el micrófono n. ° 2 y el micrófono n. ° 1 es la diferencia de tiempo en la detección del sonido multiplicada por la velocidad del sonido v s:

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

Podemos relacionar esta distancia con la distancia d 12 entre el par de micrófonos y el ángulo θ del par a la fuente de sonido con la relación:

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

Debido a que solo tenemos dos micrófonos, habrá ambigüedad en nuestro cálculo sobre si la fuente de sonido está delante o detrás de nosotros. En este sistema, asumiremos que la fuente de sonido está delante del par y fijaremos el ángulo entre 0 grados (completamente a la derecha del par) y 180 grados (completamente a la izquierda).

Finalmente, podemos resolver theta tomando el coseno inverso:

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

Para hacer que el ángulo sea un poco más natural, podemos restar 90 grados de theta, de modo que 0 grados estén directamente frente al par y +/- 90 grados sean completamente a la izquierda o completamente a la derecha. Esto convierte nuestra expresión del coseno inverso al seno inverso.

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

Encontrar el retraso

Como puede ver en la ecuación anterior, todo lo que necesitamos resolver para el ángulo es el retraso en la onda de sonido que llega al micrófono uno en comparación con el micrófono dos; la velocidad del sonido y la distancia entre los micrófonos son fijas y conocidas. Para lograr esto, primero probamos las señales de audio en la frecuencia fs, convirtiéndolas de analógicas a digitales y almacenando los datos para su uso posterior. Tomamos muestras durante un período de tiempo conocido como ventana de muestreo, que tiene una duración lo suficientemente larga como para capturar características distinguibles de nuestra onda de sonido. Por ejemplo, nuestra ventana podría ser el valor de los datos de audio del último medio segundo.

Después de obtener las señales de audio en ventana, encontramos el retraso entre los dos calculando su correlación cruzada. Para calcular la correlación cruzada, mantenemos fija la señal de ventana de un micrófono y deslizamos la segunda señal a lo largo del eje del tiempo desde atrás del primero hasta delante del primero. En cada paso a lo largo de nuestra diapositiva, multiplicamos cada punto en nuestra señal fija por su punto correspondiente en nuestra señal deslizante, luego sumamos todos los resultados para calcular nuestro coeficiente de correlación para ese paso. Después de completar nuestra diapositiva, el paso que tiene el coeficiente de correlación más alto corresponde al punto donde las dos señales son más similares, y en qué paso estamos nos dice cuántas muestras n la señal dos está compensada de la señal 1. Si n es negativo, entonces la señal dos está rezagada con respecto a la señal uno, si es positiva, la señal dos está adelante, y si es cero, las dos ya están alineadas. Convertimos este desplazamiento de muestra en un retardo de tiempo usando nuestra frecuencia de muestreo con la relación Δt = n / fs, así:

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

Paso 2: componentes

Partes

  • Microsoft Kinect para Xbox 360, modelo 1414 o 1473. El Kinect tiene cuatro micrófonos dispuestos en una matriz lineal que usaremos.
  • Adaptador para convertir el conector patentado de Kinect a USB + corriente alterna como este.
  • Raspberry Pi 2 o 3 ejecutando Raspbian Stretch. Originalmente intenté usar un Pi 1 Model B +, pero no era lo suficientemente potente. Seguí teniendo problemas para desconectarme de Kinect.
  • La cabeza de maniquí más espeluznante que puedes encontrar
  • Un servo analógico lo suficientemente fuerte como para girar la cabeza de tu maniquí
  • Un cargador de pared USB de 5V con suficiente amperaje para alimentar tanto el Pi como el servo y al menos dos puertos. (Usé un enchufe de 3 puertos 5A similar a este
  • Un cable de extensión con dos salidas (una para el cargador de pared USB y la otra para el adaptador de CA Kinect.
  • Dos cables USB: un cable tipo A a micro-USB para alimentar el Pi y otro para alimentar el servo que no te importa cortar
  • Una plataforma para que todo se siente y otra plataforma más pequeña para la cabeza del maniquí. Usé una bandeja de plástico para servir como base y un plato de plástico como plataforma para la cabeza. Ambos eran de Walmart y solo costaban unos pocos dólares.
  • 4 tornillos y tuercas # 8-32 de 1/2 "para unir su servo a la plataforma más grande
  • 2x pernos M3 de 8 mm con arandelas (o del tamaño que necesite para conectar su bocina servo a la plataforma más pequeña)
  • Dos cables de puente de macho a macho, uno rojo y otro negro, y un cable de puente de hembra a macho
  • Tiras de velcro con respaldo adhesivo
  • Cinta eléctrica
  • Cinta adhesiva para la gestión de cables

Instrumentos

  • Dremel con rueda de corte
  • Taladro
  • Brocas de 7/64 ", 11/16" y 5/16"
  • Grifo M3 (opcional, dependiendo de la bocina de su servo)
  • Destornillador
  • Soldador con soldadura
  • Manos amigas (opcional)
  • Marcador
  • Brújula
  • Pelacables
  • Multímetro (opcional)

EPI

  • Lentes de seguridad

  • Mascarilla (para piezas de plástico dremmel-ed).

Paso 3: Ensamblaje de la plataforma inferior

Conjunto de plataforma inferior
Conjunto de plataforma inferior
Conjunto de plataforma inferior
Conjunto de plataforma inferior
Conjunto de plataforma inferior
Conjunto de plataforma inferior

La primera parte que haremos es la plataforma inferior, que albergará nuestro Kinect, servo y toda nuestra electrónica. Para hacer la plataforma necesitarás:

  • Bandeja de plástico para servir
  • Servo
  • 4 tornillos # 8-32 1/2 "con tuercas
  • Dremel con rueda de corte
  • Destornillador
  • Taladro
  • Broca de 11/16"
  • Marcador

Cómo hacer

  1. Dale la vuelta a tu bandeja.
  2. Coloque su servo de lado cerca de la parte posterior de la bandeja, asegúrese de que el engranaje de salida del servo se encuentre a lo largo de la línea central de la bandeja, luego marque alrededor de la base del servo.
  3. Usando su dremel y la rueda de corte, corte el área que marcó, luego deslice su servo en su ranura.
  4. Marque los centros de los orificios de montaje de la carcasa del servo en la bandeja, luego retire el servo y taladre esos orificios con su broca de 11/16 ". Es muy fácil romper plástico delgado como este al perforar orificios, así que lo encuentro mucho más seguro para hacer funcionar el taladro en reversa y cortar lentamente el material. Es mucho más lento que perforar los agujeros correctamente, pero asegura que no haya grietas.
  5. Coloque su servo nuevamente en la ranura, luego móntelo en la bandeja con los pernos y tuercas # 8-32.

Paso 4: Montaje de la plataforma del cabezal

Montaje de la plataforma principal
Montaje de la plataforma principal
Montaje de la plataforma principal
Montaje de la plataforma principal
Montaje de la plataforma principal
Montaje de la plataforma principal
Montaje de la plataforma principal
Montaje de la plataforma principal

La siguiente parte que haremos será una plataforma para conectar la cabeza del maniquí al servo. Para hacer la plataforma de la cabeza, necesitará:

  • Plato de plástico
  • Bocina servo
  • 2x pernos M3 de 8 mm con arandelas
  • Destornillador
  • Taladro
  • Brocas de 7/64 "y 5/16"
  • Brújula
  • Dremel con rueda de corte

Cómo hacer

  1. Coloca tu brújula en el radio de la base de tu cabeza de maniquí.
  2. Usa tu brújula para marcar un círculo centrado en el centro de la placa. Este será el tamaño real de nuestra plataforma principal.
  3. Utilice su dremel y la rueda de corte para cortar la plataforma más pequeña de la placa.
  4. Taladre el centro de su nueva plataforma con una broca de 5/16 ". Esto nos dará acceso al tornillo que monta nuestra bocina del servo en nuestro servo. Para darle estabilidad a la plataforma mientras perforaba el orificio, puse un carrete de alambre debajo de él y perforado a través del centro del carrete.
  5. Alinee la bocina del servo con el centro de la plataforma y marque dos orificios para colocar la bocina en la plataforma. Asegúrese de que estos orificios de montaje estén lo suficientemente separados para que haya espacio para las cabezas de los pernos M3 y las arandelas.
  6. Taladre estos orificios marcados con una broca de 7/64 ".
  7. El orificio inferior de la bocina de mi servo era liso, es decir, no tenía las roscas para el perno M3. Por lo tanto, usé mi taladro y un macho de roscar M3 para hacer las roscas.
  8. Utilice los pernos y las arandelas para sujetar la bocina del servo a la plataforma del cabezal.

Paso 5: Cable de alimentación servo

Cable de alimentación servo
Cable de alimentación servo
Cable de alimentación servo
Cable de alimentación servo
Cable de alimentación servo
Cable de alimentación servo
Cable de alimentación servo
Cable de alimentación servo

Los servos analógicos generalmente se alimentan con 4.8-6V. Dado que la Raspberry Pi ya será alimentada por 5V desde USB, simplificaremos nuestro sistema alimentando también el servo desde USB. Para ello necesitaremos modificar un cable USB. Para hacer el cable de alimentación del servo, necesitará:

  • Cable USB de repuesto con un extremo tipo A (del tipo que se conecta a su computadora)
  • Un cable de puente rojo y uno negro
  • Soldador
  • Soldar
  • Pelacables
  • Cinta eléctrica
  • Manos amigas (opcional)
  • Multímetro (opcional)

Cómo hacer

  1. Corte el conector que no sea USB tipo A de su cable, luego quite un poco del aislamiento para revelar los cuatro cables internos. Corta el blindaje que rodea los cables expuestos.
  2. Normalmente, el cable USB tendrá cuatro hilos: dos para transmisión y recepción de datos y dos para alimentación y tierra. Estamos interesados en el poder y el suelo, que comúnmente son rojo y negro, respectivamente. Quite parte del aislamiento de los cables rojo y negro y corte los cables verde y blanco. Si le preocupa no tener los cables de alimentación y tierra correctos, puede conectar el cable a su adaptador de corriente USB y verificar el voltaje de salida con un multímetro.
  3. A continuación, corte un extremo de los cables de puente rojo y negro y quite parte del aislamiento.
  4. Ahora, retuerza los cables negros expuestos de su puente y los cables USB. Cruce los centros de los cables expuestos y gírelos entre sí. Luego, aplique soldadura a los cables acoplados para mantenerlos juntos. Ayudar a las manos hará que esto sea más fácil al sostener los cables en su lugar.
  5. Repita el paso 4 para los cables rojos.
  6. Cubre el cableado expuesto con cinta aislante o tubo termorretráctil si te apetece. Estas uniones serán frágiles debido a que los cables son muy pequeños, así que agregue una segunda capa de cinta que sujete los cables de puente al aislamiento exterior del cable USB. Esto hará que el conjunto sea más rígido y, por lo tanto, será menos probable que se rompa por doblarse.

Paso 6: Montaje de la electrónica

Montaje de electrónica
Montaje de electrónica
Montaje de electrónica
Montaje de electrónica
Montaje de electrónica
Montaje de electrónica

Finalmente, reuniremos todo, montando nuestra electrónica y todo lo demás en la plataforma inferior. Necesitará:

  • Plataforma inferior
  • Plataforma de la cabeza
  • Cabeza de maniquí
  • Kinect con adaptador USB + CA
  • Adaptador de corriente USB
  • Cable de extensión
  • Cable micro USB
  • Cable de alimentación servo
  • Frambuesa pi
  • Cable de puente macho a hembra
  • Velcro adhesivo
  • Tijeras

Cómo hacer

  1. Monte el Pi en la parte inferior de la bandeja con velcro.
  2. Conecte el adaptador de corriente USB con velcro.
  3. Conecte el servo y Pi en el adaptador de corriente USB.
  4. Conecte el pin 12 (GPIO18) del Pi al cable de señal del servo. Es el sexto pin a la derecha.
  5. Pase el cable de extensión por el asa trasera de la bandeja y enchufe el adaptador de corriente USB en un lado.
  6. Tome el adaptador Kinect USB + CA y enchufe el adaptador de corriente en el otro lado del cable de extensión y el USB en el Pi.
  7. Pase el cable del Kinect a través del asa frontal de la bandeja y conéctelo al adaptador Kinect.
  8. Usé cinta adhesiva para sujetar los cables a la parte inferior de la plataforma. Esto no parece el más elegante, pero afortunadamente todo esto está oculto.
  9. Gire la plataforma con el lado derecho hacia arriba y use Velcro para montar el Kinect en la parte delantera de la plataforma.
  10. Utilice velcro para montar la cabeza del maniquí en la plataforma de la cabeza. Sin embargo, una vez que todo esté alineado, separe las dos piezas para que podamos acceder al tornillo de montaje de la bocina del servo. Sin embargo, no atornille la bocina al servo todavía, ya que primero debemos asegurarnos de que el servo esté en su posición central para que podamos alinear todo. Haremos esto en un paso posterior.

Paso 7: software y algoritmo

Software y algoritmo
Software y algoritmo

Visión general

El software para este proyecto está escrito en C ++ y está integrado con Robot Operating System (ROS), un marco para escribir software de robótica. En ROS, el software de un sistema se divide en una colección de programas llamados nodos, donde cada nodo implementa una subsección específica de la funcionalidad del sistema. Los datos se pasan entre nodos utilizando un método de publicación / suscripción, donde los nodos que producen los datos los publican y los nodos que consumen los datos se suscriben. Desacoplar el código de esta manera permite que la funcionalidad del sistema se expanda fácilmente y permite que los nodos se compartan entre sistemas para un desarrollo más rápido.

En este sistema, ROS se usa principalmente para separar el código que calcula la dirección de llegada (DOA) de la fuente de sonido del código que controla el servo, lo que permite que otros proyectos incluyan la estimación de DOA de Kinect sin incluir el código de servo que pueden no necesitar o no desear.. Si desea ver el código en sí, puede encontrarlo en GitHub:

github.com/raikaDial/kinect_doa

Nodo DOA de Kinect

El nodo kinect_doa es la carne y los huesos de este sistema, haciendo básicamente todo lo interesante. Al iniciarse, inicializa el nodo ROS, haciendo posible toda la magia ROS, luego carga el firmware al Kinect para que las transmisiones de audio estén disponibles. Luego genera un nuevo hilo que abre las transmisiones de audio y comienza a leer los datos del micrófono. El Kinect muestrea sus cuatro micrófonos a una frecuencia de 16 kHz cada uno, por lo que es bueno tener la correlación cruzada y la recopilación de datos en subprocesos separados para evitar perder datos debido a la carga computacional. La interfaz con Kinect se logra mediante libfreenect, un popular controlador de código abierto.

El hilo de recopilación ejecuta una función de devolución de llamada cada vez que se reciben nuevos datos, y ambos almacena los datos y determina cuándo estimar el DOA. Los datos de cada micrófono se almacenan en búferes móviles de la misma longitud que nuestra ventana de muestreo, que aquí es de 8192 muestras. Esto se traduce en calcular la correlación cruzada con aproximadamente el valor de los datos del último medio segundo, lo que descubrí a través de la experimentación que es un buen equilibrio entre el rendimiento y la carga computacional. La estimación de DOA se activa para cada 4096 muestras mediante la señalización del hilo principal, de modo que las correlaciones cruzadas consecutivas se superponen en un 50%. Considere un caso en el que no hay superposición y hace un ruido muy rápido que la ventana de muestreo corta a la mitad. Antes y después, es probable que su sonido distintivo sea ruido blanco, que puede ser difícil de alinear con la correlación cruzada. Las ventanas superpuestas nos brindan una muestra más completa del sonido, lo que aumenta la confiabilidad de nuestra correlación cruzada al brindarnos características más distintas para alinear.

El subproceso principal espera la señal del subproceso de recopilación y luego calcula la estimación de DOA. Sin embargo, primero verifica si las formas de onda capturadas son significativamente diferentes del ruido blanco. Sin esta verificación, estaríamos calculando nuestra estimación cuatro veces por segundo, independientemente de si hubo ruidos interesantes o no, y nuestra cabeza de maniquí sería un desastre espástico. El algoritmo de detección de ruido blanco utilizado en este sistema es el primero de los dos enumerados aquí. Calculamos la relación entre la integral absoluta de la derivada de nuestra forma de onda y su integral absoluta; para señales con alto contenido de ruido blanco, esta relación es más alta que para señales menos ruidosas. Al establecer un umbral para esta relación que separa el ruido del no ruido, podemos activar la correlación cruzada solo cuando sea apropiado. Por supuesto, esta relación es algo que debe reajustarse cada vez que el sistema se traslada a un nuevo entorno.

Una vez que se determina que las formas de onda contienen un contenido significativo sin ruido, el programa procede con las correlaciones cruzadas. Sin embargo, hay tres optimizaciones importantes integradas en estos cálculos:

  1. Hay cuatro micrófonos en el Kinect, lo que significa que hay seis pares totales de formas de onda que podemos correlacionar. Sin embargo, si observa la disposición espacial de la matriz de micrófonos, puede ver que los micrófonos 2, 3 y 4 están muy cerca uno del otro. De hecho, están tan cerca que debido a la velocidad del sonido y nuestra frecuencia de muestreo las formas de onda recibidas en 2, 3 y 4 estarán separadas como máximo por una muestra adelante o atrás, lo cual podemos verificar con el cálculo maxlag = Δd * fs / vs, donde Δd es la separación del par de micrófonos, fs es la frecuencia de muestreo y vs es la velocidad del sonido. Por lo tanto, la correlación de pares entre estos tres es inútil, y solo necesitamos correlacionar el micrófono 1 con 2, 3 y 4.
  2. Se sabe que la correlación cruzada estándar de señales de audio funciona mal en presencia de reverberaciones (ecos). Una alternativa sólida se conoce como correlación cruzada generalizada con transformada de fase (GCC-PHAT). Este método se reduce a aplicar una función de ponderación que amplifica los picos en la correlación cruzada, lo que facilita la distinción de la señal original de los ecos. Comparé el rendimiento de GCC-PHAT con la correlación cruzada simple en una cámara de reverberación (léase: baño de concreto en remodelación) y encontré que GCC-PHAT es 7 veces más efectivo para estimar el ángulo correcto.
  3. Al realizar la correlación cruzada, estamos tomando las dos señales, deslizándolas una a lo largo de la otra, y en cada paso multiplicamos cada punto en nuestra señal fija por cada punto en nuestra señal deslizante. Para dos señales de longitud n, esto da como resultado n ^ 2 cálculos. Podríamos mejorar esto realizando la correlación cruzada en el dominio de la frecuencia, lo que implica una transformada rápida de Fourier (cálculos nlogn), multiplicando cada punto en una señal transformada por el punto correspondiente en el otro (n cálculos), luego realizando una inversa transformada de Fourier para volver al dominio del tiempo (cálculos de nlogn), lo que da como resultado n + 2 * cálculos de nlogn, menos de n ^ 2. Sin embargo, este es el enfoque ingenuo. Los micrófonos de nuestra matriz están tan cerca unos de otros y la velocidad del sonido es tan relativamente lenta que las formas de onda de audio ya estarán en su mayoría alineadas. Por lo tanto, podemos ventana nuestra correlación cruzada para considerar solo las compensaciones que están ligeramente por delante o por detrás. Para los micrófonos 1 y 4, el retraso debe estar entre +/- 12 muestras, lo que significa que para cada correlación cruzada solo necesitamos realizar cálculos de 24 * n, lo que resulta en ahorros computacionales cuando nuestras formas de onda son más largas que 2900 muestras.

Este sistema aprovecha la biblioteca minidsp, que implementa el algoritmo GCC-PHAT con optimización 3.

Una vez que encuentra el retraso en las señales de cada par de micrófonos, el programa elige el valor mediano del retraso, lo usa para calcular el ángulo estimado y publica el resultado para que pueda usarse para controlar el servo.

Nodo de servocontrol

Comparado con el nodo kinect_doa, el nodo servo es relativamente simple. Su trabajo es tomar únicamente el DOA estimado y mover el servo a ese ángulo. Utiliza la biblioteca wirePi para acceder al módulo PWM de hardware de la Raspberry Pi, utilizándola para establecer el ángulo del servo. La mayoría de los servos analógicos están controlados por una señal PWM con un ancho de pulso que varía de 1000 µs a 2000 µs, correspondiente a un ángulo de 0 ° a 180 °, pero el servo que usé se controló con 500 µs a 2500 µs, correspondiente a un ángulo de 0 ° a 270 °. Por lo tanto, el nodo se puede configurar para diferentes servo-hardware estableciendo parámetros para el ancho de pulso mínimo, el ancho de pulso máximo y la diferencia entre los ángulos máximo y mínimo. Además, el servo no se mueve inmediatamente al ángulo objetivo, sino que se mueve hacia el ángulo a una velocidad configurable, lo que le da a Margaret una vibración más gradual y espeluznante (además, el sonido de un servo moviéndose rápidamente hacia adelante y hacia atrás se vuelve molesto muy rápido).

Paso 8: construcción e instalación

Instalar dependencias:

Primero, instale libfreenect. Tenemos que compilarlo desde la fuente porque la versión que puede obtener con el administrador de paquetes no incluye soporte para audio. Esto se debe a que debemos cargar el firmware en Kinect para habilitar el audio, y redistribuir este firmware no es legal en ciertas jurisdicciones. Además, podemos evitar construir los ejemplos que requieren OpenGL y glut, innecesarios para instalaciones de Raspbian sin cabeza.

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 / 51-u.rules /etc/udev/rules.d udevadm control --reload-rules && udevadm trigger

A continuación, necesitamos instalar el paquete cableadoPi, que nos permite controlar los pines GPIO del Pi:

CD

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

Coloque la cabeza del maniquí:

Una vez instalado el cableado de Pi, ahora podemos tomar un desvío rápido de regreso a la tierra del hardware para colocar la cabeza del maniquí en la plataforma inferior. Para centrar el servo a través de la línea de comando, ingrese los siguientes comandos:

gpio pwm-ms

gpio pwmc 192 gpio pwmr 2000 gpio -g pwm 18150

Si no hay movimiento, es probable que su servo ya esté centrado. Sin embargo, para estar seguro, puede configurar el servo en un valor no central, p. Ej. gpio -g pwm 18200, luego vuelva a configurarlo en 150.

Una vez que esté seguro de que el servo está centrado, conecte el cuerno del servo de la plataforma de la cabeza al servo de manera que su cabeza de maniquí mire hacia adelante. Luego, atornille la bocina en el servo y sujete su cabeza a través de las brocas de velcro.

Instalar ROS:

A continuación, instale ROS en su Pi. Puede encontrar una gran guía de instalación aquí; para nuestro sistema no necesitamos OpenCV, por lo que puede omitir el paso 3. Esta compilación tardará varias horas en completarse. Cuando termine de seguir la guía de instalación, agregue el origen de la instalación a su bashrc para que podamos usar nuestros paquetes ROS recién instalados:

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

Cree el paquete Kinect DOA:

Una vez hecho todo esto, cree un espacio de trabajo catkin para nuestro proyecto e ingrese al directorio src:

mkdir -p ~ / kinect_doa_ws / src

cd ~ / kinect_doa_ws / src

El código para este proyecto está contenido en el paquete kinect_doa, así que clónelo en el directorio src de su nuevo espacio de trabajo:

clon de git

El paquete robot_upstart proporciona una herramienta fácil de usar para instalar archivos de inicio para que se ejecuten al inicio, así que clónelo también en su espacio de trabajo:

clon de git

Ahora, podemos construir el código del proyecto llamando a catkin_make desde el directorio de nivel superior de nuestro espacio de trabajo, luego generar nuestra compilación para que nuestros paquetes estén disponibles:

cd ~ / kinect_doa_ws

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

Ejecución y puesta a punto:

Suponiendo que todo esté enchufado y encendido, ¡ahora debería poder iniciar el sistema y hacer que Kinect rastree su voz! Sin embargo, si tiene un Kinect 1473, primero abra el archivo ~ / kinect_doa_ws / src / kinect_doa / launch / kinect_doa.launch en un editor de texto y establezca el parámetro using_kinect_1473 en verdadero. Además, si usó un servo diferente al mío, probablemente sea un servo analógico estándar, así que mientras está en el archivo de inicio, cambie el parámetro min_us a 1000, max_us a 2000 y max_deg a 180.

roslaunch kinect_doa kinect_doa.launch

Juega un rato con él. Si cree que el sistema es demasiado sensible (mirando en direcciones aleatorias que no corresponden a voces o ruidos distintivos), intente cambiar el parámetro white_noise_ratio en el archivo de inicio y reiniciar el sistema hasta que la capacidad de respuesta esté en un nivel con el que se sienta cómodo. El aumento de la relación hará que el sistema responda menos y viceversa. Es probable que deba realizar este ajuste cada vez que mueva el sistema a una ubicación diferente para obtener el rendimiento que desea.

Para iniciar el programa cuando encendemos la Pi, usamos el paquete robot_upstart para instalar nuestro archivo de inicio. Si ROS no se está ejecutando actualmente, inícielo con el comando roscore. Luego, abra una nueva terminal e instale el lanzamiento con:

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

Creamos un enlace simbólico al archivo de lanzamiento en lugar de copiarlo para que podamos cambiar los parámetros editando ~ / kinect_doa_ws / src / kinect_doa / launch / kinect_doa.launch.

Paso 9: Ocultarlo en la oficina

Escondiéndolo en la oficina
Escondiéndolo en la oficina

Ahora viene la parte divertida. Dirígete al trabajo después de horas y coloca tu cabeza de maniquí en secreto. Luego, siéntese y vea cuánto tiempo les toma a sus compañeros de trabajo comprenderlo. Su nueva creación está garantizada para llamar la atención …

Recomendado: