Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Windows 10 IoT Core:Robot controlado por voz

Historia

En los primeros días de la computadora, la interacción con la computadora se realizaba a través de tarjetas perforadas, trackball, pistola de luz, teclados e incluso a través de la pantalla táctil. Todos estos dispositivos requieren algún tipo de contacto físico para operarlos.

Con década a década, la nueva tecnología mejora a la anterior. Los dispositivos de entrada inalámbricos se vuelven populares ya que brindan un escritorio limpio y menos desordenado. Con la mejora actual en software y hardware, es posible un nuevo tipo de entradas que son:Entrada visual y de voz.

Este artículo le ayudará a aprender la tecnología de reconocimiento de voz proporcionada en Windows 10 IoT Core. Al final del tema, crearemos un robot usando Windows 10 IoT Core y Raspberry Pi 2 ejecutando la aplicación Speech Recognition. Esta aplicación de reconocimiento de voz permite al robot realizar varias tareas de movimiento (por ejemplo:avanzar, girar, detenerse, etc.) en función de la interacción del usuario mediante el habla.

¿Nuevo en Windows 10 IoT Core? o principiante? consulte este enlace primero.

Este artículo se actualizó el 30 de marzo de 2016

¿Qué es el reconocimiento de voz?

En una sola línea, el reconocimiento de voz significa la traducción de las palabras habladas en un posible texto equivalente. El reconocimiento de voz se puede dividir en dos componentes principales:procesamiento de señales y decodificador de voz. No tenemos que preocuparnos por su complejidad porque Microsoft ya ha desarrollado una solución para eso. Solo tenemos que usar sus bibliotecas de voz.

Paso 1

Introducción al reconocimiento de voz

Comencemos con la idea básica:

  • Crear gramática de reconocimiento de voz (gramática SRGS)
  • Inicialice el objeto Speech Recognizer y cargue la gramática (SpeechRecognizer)
  • Regístrese en los eventos de Speech Recognizer y cree un controlador

Crear gramática de reconocimiento de voz

Antes de comenzar con el reconocimiento de voz, debemos comprender cómo podemos programar la Aplicación Universal de Windows para comprender nuestro idioma o comandos. Para hacerlo, necesitamos crear una gramática de reconocimiento de voz. La gramática de reconocimiento de voz se puede crear utilizando SRGS Grammar para la aplicación universal de Windows:

  • Utilice XML para crear documentos gramaticales que se ajusten a la Especificación de gramática de reconocimiento de voz (SRGS) Versión 1.0, el estándar W3C para gramáticas de reconocimiento de voz.

Nota:Hay otras formas posibles disponibles en .Net Framework, pero no son compatibles con UWP cuando se escribió este artículo. Cuáles son:

  • Cree gramáticas mediante programación utilizando miembros de las clases GrammarBuilder y Choices en el espacio de nombres System.Speech.Recognition.
  • Utilice constructores y métodos de clases en el espacio de nombres System.Speech.Recognition.SrgsGrammar para crear gramáticas compatibles con SRGS mediante programación.

Comenzaremos con la gramática XML. Antes de comenzar a crear un archivo de gramática, necesitamos visualizar y definir cómo el usuario interactuará con nuestra aplicación. En el contexto de este proyecto, el usuario ordenará al robot que se mueva en cualquier dirección, se detenga y ordenará activar / desactivar la detección de obstáculos. Podemos hacer una lista de vocabulario del habla que es la siguiente:

  • Avanzar
  • Mover hacia atrás
  • Gire a la derecha
  • Gire a la izquierda
  • Deténgase
  • Involucrar la detección de obstáculos
  • Desactive la detección de obstáculos

Para este vocabulario, necesitamos diseñar gramática XML. Solo necesitamos seguir algunas reglas básicas de SRGS v1.

Gramática SRGS

Para crear la gramática SRGS se deben seguir algunas reglas básicas que son:

  • El elemento raíz debe ser gramatical
  • La versión de la gramática del atributo, el idioma y el espacio de nombres XML deben estar presentes.
  • La gramática debe contener al menos un elemento de regla. (El elemento de regla contiene una palabra o frase que el usuario puede pronunciar).
  • Cada elemento de la regla debe tener un atributo de identificación único.

Hemos visto la estructura básica requerida para la gramática SRGS. Ahora necesitamos crear vocabulario para ello. El vocabulario es un conjunto de palabras que produce un comando significativo para el robot.

Por ejemplo:"Mover hacia adelante" o "Mover hacia atrás", aquí Mover viene antes que Adelante y Reversa. Por lo tanto, por regla general, debe ir primero antes que Adelante y Reversa. Entonces podemos extraer Adelante y Reversa en otra regla. Vea la imagen que se muestra a continuación:

¿Qué es la regla raíz ? ? Es el nodo inicial o el nodo raíz que se carga cuando Speech Recognizer carga la gramática. Es opcional. Puede ignorarlo, pero luego debe especificar el nodo raíz mediante programación.

¿Qué es el atributo raíz en etiqueta gramatical? El atributo raíz define la regla de inicio para el reconocedor de voz cuando carga la gramática. Si no se especifica como atributo, debe especificarlo mediante programación.

Este artículo está destinado a principiantes, por lo que no es posible cubrir etiquetas y atributos SRGS complejos. Puede obtener más información sobre la gramática SRGS en MSDN y W3C.

Acabamos de crear la gramática SRGS para nuestro robot. Ahora, veremos cómo implementar Speech Recognizer para la aplicación universal de Windows.

Inicializar Speech Recognizer y cargar gramática

SpeechRecognizer la clase está disponible en Windows.Media.SpeechRecognition espacio de nombres. Importe el espacio de nombres en su archivo de código. Antes de inicializar, necesitamos crear un archivo de gramática XML en nuestro proyecto. Ya hemos creado contenido para el archivo de gramática en la sección anterior.

Nota:Si "CompilationResult" falla, es posible que haya algún problema con la interfaz del micrófono. Verifique la conexión con el micrófono. Compruebe si se detecta en la aplicación IoT Core predeterminada o no.

Regístrese en los eventos de Speech Recognizer y cree un controlador

En el último paso, hemos iniciado el reconocedor de voz y estamos listos para escuchar la voz y analizarla. Después de un análisis exitoso, "ContinuousRecognitionSession" generará un evento llamado "ResultGenerated". Este evento proporciona un resultado de análisis como argumentos de evento que se pueden procesar para realizar una tarea basada en el habla hablada. También podemos escuchar el estado del reconocedor por evento "StateChanged" para dar al hablante alguna indicación de que el reconocedor está escuchando.

Aquí, "MyRecognizerStateChanged" es una función que será activada por "MyRecognizer" cuando su estado cambie de uno a otro. Proporcionará información de estado valiosa cuando "MyRecognizer" ha comenzado a escuchar y cuándo deja de escuchar. Una vez que deja de escuchar, "MyRecognizer" analiza el discurso con la gramática proporcionada y genera el evento "ResultGenerated" como exitoso.

Nota:No es necesario que cree la función "MyRecognizer_StateChanged" y "MyRecognizer_ResultGenerated" usted mismo. En su lugar, Visual Studio proporciona una forma de crearlos automáticamente. Puede crearlos automáticamente mediante Visual Studio usando dos veces en el lado derecho del + =de un evento.

También puede registrar controladores de eventos justo después de inicializar el objeto SpeechRecognizer.

¡Ya casi terminamos!

Paso 2

¿Cómo conducir con un discurso analizado?

En la sección anterior, configuramos un reconocedor gramatical y de voz personalizado para la aplicación universal de Windows. Cuando Speech Recognizer analiza correctamente el habla hablada, genera el evento "ResultGenerated". Este evento contiene un resultado analizado como argumento. Veamos cómo detectar qué se está hablando y qué hacer en función del habla:

Aquí, el argumento "args" pasado al controlador de eventos por SpeechRecognizer en el análisis exitoso de voz. "Args.Result.Text" es de tipo cadena. Contiene el discurso hablado como texto. Puede realizar una tarea específica del habla mediante el bloqueo condicional.

No es posible mostrar el código completo para conducir el robot. Proporcioné una clase estática llamada "MotorDriver" que contiene varias funciones para conducir un robot. Esta clase gestiona los pines de Gpio para impulsar el robot. El código fuente completo se proporciona al final del proyecto. Si es nuevo en Raspberry Pi 2 y Windows 10 IoT, consulte este enlace para comenzar.

Paso 3

Actualizar la capacidad del dispositivo

Antes de implementar la aplicación universal de Windows en la Raspberry Pi 2, debemos configurar la capacidad del dispositivo adecuada para que la aplicación se ejecute con derechos de acceso de hardware específicos. En el contexto de esta aplicación, necesitamos un dispositivo externo "Micrófono" para usar. Para habilitar "Micrófono" en el manifiesto del paquete:


Todo hecho en el lado del software. Ahora es el momento de conectar el hardware. El código fuente se proporciona al final del artículo.

La mayor parte de la implementación del reconocimiento de voz está hecha y no es posible explicar aquí todas y cada una de las líneas del código. En cambio, el código fuente está bien comentado. Solicite cualquier consulta.

Paso 4

Implementar y registrar la aplicación como aplicación de inicio

El robot necesita reconocer los comandos de voz siempre que esté encendido. Para lograr esto, debe registrar su aplicación como aplicación de inicio para que cada vez que se inicie Raspberry Pi 2, inicie su aplicación justo después del inicio. Para hacerlo, primero debe implementar su aplicación en la Raspberry Pi 2 y luego registrarla como aplicación de inicio.

Antes de la implementación, es bueno cambiar el nombre de la familia del paquete de la aplicación:


Después de cambiar el nombre de la familia del paquete, implemente la aplicación en el dispositivo remoto (su Raspberry Pi 2).




Si no conoce la forma correcta de implementar su aplicación en Raspberry Pi 2, consulte este enlace.

Una vez que la aplicación se haya implementado correctamente, debe registrar la aplicación como aplicación de inicio. Puede registrar su aplicación como inicio usando dos métodos:usando PowerShell o el portal de administración web de Windows IoT Core. Iré con el segundo método. Abra el navegador web y siga:



¿Tiene problemas para registrarse como aplicación de inicio? Consulte este artículo.

Una vez que haya registrado correctamente su aplicación como aplicación de inicio, reinicie Raspberry Pi 2 y vea si su aplicación se inicia después de arrancar o no. Si no es así, verifique todos los pasos desde la implementación hasta el registro. Con el inicio exitoso de la aplicación, ahora es el momento de conectar las cosas.

Esquema

Las piezas de hardware consisten en un chasis de robot (con motores de CC), Raspberry Pi 2 (con Windows 10 IoT Core), batería, sensor de distancia, etc. Batería del motor (se muestra en la imagen del lado izquierdo 'Batería:9-12 VCC') y va directamente al controlador del motor H-Bridge. Se requiere una fuente de alimentación separada para Raspberry Pi 2. USB PowerBank es adecuado para proporcionar suficiente energía a Raspberry Pi 2. En ausencia de USB PowerBank o fuente filtrada de 5VDC, se requiere un circuito regulador de voltaje separado (usando 7805) para encender Raspberry Pi y sensor de distancia ultrasónico.

Si no tiene un USB PowerBank o un suministro filtrado de 5 VCC, puede usar la batería del motor (que se muestra en la imagen de arriba en el lado izquierdo, color naranja, batería:9-12 VCC) para encender la Raspberry Pi 2. El esquema de la configuración se proporciona en al final del artículo (llamado 'Esquema:Batería del motor').

¿Por qué resistencias con sensor de distancia ultrasónico?

El sensor de distancia ultrasónico funciona con 5V mientras que Raspberry Pi 2 funciona con 3.3V. No podemos conectar directamente el pin Echo del sensor directamente al pin de la Raspberry Pi, ya que tendrá una salida de 5V. Quemará Raspberry Pi. Por lo tanto, debemos reducir el voltaje de salida del sensor a 3.3V antes de enviarlo a Raspberry Pi. El voltaje del sensor se puede reducir mediante el uso de un circuito divisor de voltaje. Por lo tanto, Vout se puede calcular como:

R1 =1000 ohm R2 =2000 ohm Vin =5V (pin de eco del sensor) Vout =5 * (2000 / (1000 + 2000)) =3.3V (al Raspberry Pi 2)

ADVERTENCIA:No conecte el pin Echo del sensor de distancia ultrasónico directamente al pin GPIO de la Raspberry Pi. Puede quemar la Raspberry Pi. En su lugar, utilice un convertidor de nivel lógico o un divisor de voltaje adecuado.

Ensamblaje final




Problemas conocidos

El reconocimiento de voz no funciona (compilación 10586)

El reconocimiento y la síntesis de voz no funcionarán en ningún dispositivo de IoT (RPi2, MinnowBoard MAX y Dragonboard 410c) si ha instalado Windows IoT build 10586.

Solución: En este momento, no hay una solución válida disponible. Espero que el equipo de Windows IoT resuelva este error en la próxima compilación. Aún así, si desea manipular el reconocimiento de voz, vuelva a la versión anterior 10240 y funcionará a la perfección.

Problema con el micrófono

El reconocimiento de voz definitivamente requiere un micrófono de alta calidad. Aún puede usar un micrófono de baja calidad cuando está cerca, pero cuando el micrófono está lejos, a una distancia de entre 1 y 2 metros, no se reconocerá con precisión.

Solución: (Opción 1):Compre un micrófono de alta calidad. En algún momento puede suceder que incluso después de un micrófono de alta calidad, no se reconozca correctamente. En tal caso, se necesita una voz fuerte. (Opción 2):el micrófono inalámbrico sería genial. Puede controlar el robot incluso desde una gran distancia sin preocuparse por el ruido externo. Puede comprar uno o hacer el suyo propio consultando este video.

Retraso de procesamiento del reconocedor

Es obvio que el reconocedor necesita algo de tiempo para procesar el habla. No es un problema ni un problema, pero puede causar un problema en el sistema en tiempo real.

Supongamos que tenemos un coche robot de alta velocidad que sigue nuestro comando de voz. Supongamos que el automóvil seguirá nuestro comando de voz después de 600-2000 ms (debido al retraso en el procesamiento). Entonces, si ordenamos detenernos, el automóvil analizará la señal después de un tiempo, lo que puede conducir a un evento catastrófico.

Solución: En este momento (cuando se escribió este artículo), no hay una solución adecuada disponible. Espero que se resuelva en el futuro. 🙂

Diferencia de pronunciación

Las personas de diferentes regiones usan una pronunciación diferente para una sola palabra. Speech Recognizer no puede analizar el habla si la pronunciación de la palabra hablada es diferente a la que está programada.

Solución: Puede especificar el idioma y la región en el archivo de gramática XML SRGS para analizar la pronunciación de la región específica.

Digamos que queremos analizar inglés (Reino Unido), necesitamos establecer el atributo de la etiqueta gramatical xml:lang ="en-GB". Aquí, el código de país ISO para Reino Unido es GB. Por tanto, "en-GB" le dice al reconocedor de voz que analice el habla basándose en la pronunciación del inglés (Reino Unido). Otro ejemplo, para el francés canadiense, use "fr-CA".

Ruido ambiental

El sonido y la vibración no deseados, causados ​​por una o más entidades externas, afectarán la precisión del procesamiento. A veces, el reconocedor no entenderá el habla incluso si se habló correctamente.

Solución: Puede que no sea posible resolver o eliminar dicho ruido. Con el nivel actual de tecnología, solo podemos esperar utilizar dicha tecnología en un área libre de ruido. Otra posible solución es utilizar un micrófono inteligente que pueda reducir el ruido (llamado micrófono con cancelación de ruido).

El micrófono USB / SoundCard USB no reconoce

Con el lanzamiento de la compilación 10531, Windows IoT Core admite dispositivos de audio genéricos. La mayoría de los micrófonos USB o tarjetas de sonido USB requieren un controlador genérico USB. Si su dispositivo usa un controlador genérico, funcionará.

Trabajar con éxito con mi RPi2 (Amazin.in)

Solución: Pruebe con otro micrófono USB o tarjeta de sonido USB.

En mi caso, he comprado una SoundCard USB. Funcionó perfectamente. Conecté el micrófono a la toma de micrófono de la SoundCard. Puede comprar USB SoundCard en Amazon.com u otros sitios web de compras en línea. Indian puede comprar una tarjeta de sonido USB en Amazon.in.

Mejoras futuras

No hay limitación cuando se trata de nuevas ideas. Este artículo explora la implementación básica del reconocimiento de voz. Además, puede ampliar el proyecto proporcionando una indicación visual del resultado analizado. Por ejemplo, encienda el LED verde por un segundo después de un análisis exitoso del comando hablado; de lo contrario, encienda el LED rojo por un segundo. Además, para evitar comandos accidentales, también puede programar el robot para que le indique cuándo escuchar y cuándo dormir.

¿Te diste cuenta?

Aquellos que hayan visto detenidamente la imagen de título animada del proyecto sabrán que no he cubierto algo de lo que he mostrado allí. Mírelo con atención e intente implementar esa función oculta en su robot.

Buena suerte 🙂

Fuente: Robot controlado por voz

Proceso de manufactura

  1. Windows 10 IoT Core:lectura de pulsos de frecuencia cardíaca
  2. Windows IoT:puerta de reconocimiento facial
  3. Botón de AWS IoT controlado por movimiento
  4. Windows 10 IoT Core en Raspberry Pi 2 - Datos del sensor Adafruit
  5. Windows 10 IoT Core y SHT15
  6. Windows 10 IoT Core para Raspberry Pi 3 Modelo B +
  7. Robot Raspberry Pi controlado por Bluetooth
  8. Robot controlado por gestos con Raspberry Pi
  9. ROBOT WIFI DE FRAMBUESA PI CONTROLADO DESDE EL TELÉFONO INTELIGENTE DE ANDROID
  10. GoPiGo v2 con Windows IoT
  11. Robot controlado por Wifi usando Raspberry Pi