PROYECTO


Esta práctica se trata de hacer un proyecto basado en visión artificial , raspberry y LabVIEW. A través del reconocimiento de voz de Windows escogerás entre "TORNIL" o "CODIGO" para que  un Servo motor desde la raspberry se mueva a un lado o a otro , entonces ,a través VI de Vision Assistant te dirá la distancia que hay desde la cabeza del tornillo hasta la tuerca o por otro lado te enviara a la pagina web asignada al código QR.

Por un lado realizaremos un programa en Vision Assistant , con la ayuda de la herramienta de LabVIEW "Vision Express" , a la vez que está funcionando el VI de la visión , en proyecto funcionará los VI de reconocimiento de voz. Cuando el reconocimiento de voz detecte una de las dos palabras se enviara por xbee a la raspberry , en esta estará corriendo un programa en el que estará esperando a recibir un CODIGO o un TORNIL para moverse a una posición o a otra.



Link de descarga  del programa de LabVIEW

También tenemos la posibilidad de realizar este proyecto con Vision builder , este programa es sobre el que se basa vision builder , es decir nosotros lo que hemos utilizado al principio es una libreria de LabVIEW "Vision Express"  la cual te facilita la adquisición de imágenes y la interacción con Vision Assistant. Por otro lado esta Vision Builder, un software aparte , en el que puedes realizar casi todas las funciones que tiene Vision Assistant , y digo casi todas por que este programa al ser el mas actualizado (ultima actualización en 2017 , a diferencia del Vision Builder que es del 2015)han podido meter funciones nuevas.

La maquina de estados que he utilizado en el proyecto de Vision Builder es la siguiente:

Se basa en un match pattern que decide si lo que esta detectando la cámara es el tornillo con la tuerca o por lo contrario el código QR, posteriormente realizara uno  de los dos estados.En el caso del código QR , es simple , tan solo con un vision assistant para hacer mas clara la imagen y con un detector de codigos bastará ; por otro lado para saber la distancia que hay desde la cabeza del tornillo hasta su tuerca utilizaremos la función de encontrar el borde , es decir encontrar el contraste de pixeles de negro a blanco , de esta manera localizaremos la parte de fuera de la cabeza del tornillo y la parte de fuera de la tuerca , le restamos sus grosores y con la herramienta de medir distancias  lo medimos.


Lo complejo de hacerlo de esta manera es la interaccion con LabVIEW , ya que desde Vision Builder solo podemos compilar a LabVIEW y esto supone generar mas de 50 VIs , en los que hay mas o menos 10 generales en los que se encuentran los errores ,la maquina de estados , cada estado ,etc.



Los VI de control de voz son el primero y los dos últimos , quitando estos los demás te los crea LabVIEW automáticamente al compilar desde Vision Builder.El siguiente paso es sacar la información de la distancia a un indicador , para ello debemos ir al VI en el que se encuentre el estado en el que se analiza el tornillo en nuestro caso en el Inspect Nº5 :


Lo que hacemos es crear un indicador tipo "array" en el que se encuentran varios cluster  (contiene distintos tipos de variable), dentro de este array tenemos que indexar el array numero 1 para escoger posteriormente la variable "String" en la que podemos encontrar la misma medida que en vision builder. Después de obtener esta medida tenemos que realizar lo mismo en el estado del QR y elegir el cluster en el que contenga la dirección web , por último habrá que crear dos variables compartidas y asignárselas a los dos marcadores obtenidos.


Las variables principales son "CODIGO" y "TORNILLO", las demás  son flags para saber por que VI esta pasando, esto lo he puesto por que el problema que nos da Vision Builder es cuando intentas hacer el ejecutable de labview , las medidas no aparecen en el indicador por este motivo hicimos el proyecto en Vision Assistant que trabajas directamente con LabVIEW y sus librerías.


RECONOCIMIENTO DE VOZ DE WINDOWS CON LABVIEW

Al trabajar en proyecto nosotros creamos el ejecutable iniciando el tanto el VI principal como el de reconocimiento de voz , para que este ultimo pueda funcionar necesita que en el proyecto se encuentren las bibliotecas del reconocimiento de voz, llamadas "Speech Recognition Text Callback" y "Speech Recognizer Initialize". La idea es hablar al reconocimiento de voz de Windows , lo que hayas dicho te lo recoja el VI de LabVIEW en una variable , en nuestro caso "command" y lo que contenga esa variable lo envíe por el puerto Serial al XBEE 


Es importante configurar el reconocimiento de voz de windows para que se adapte a tu tono de voz y reconozca fácilmente las palabras tornil y código.















IMPORTANTE , no dejar el reconocimiento de voz encendido por que te puede abrir , cerrar ,eliminar aplicaciones.

El siguiente paso es programar a la raspberry para que el servo vaya a un lado o a otro dependiendo de lo que reciba por el puerto serie la RASPY, para esto se puede utilizar un programa parecido al que se utilizo para el SERVO pero añadiéndole la librería serial e instrucciones como port.flushInput() o port.read(). 

              

Entonces solo quedara ejecutar este código y enchufar el xbee a la raspbberry , el cual tendrá que estar configurado previamente con el otro xbee enchufado al ordenador

Aquí tenéis el enlace para ver mas documentacion sobre el XBEE.