# Visión artificial



## robotmovil (May 13, 2012)

Hola a todos.

Quería enseñaros mi proyecto de robot casero. Como novedad aporta que los sensores y el programa de control no están en un sistema a medida sino en un teléfono móvil Android. La conexión con los motores es a través de una placa IOIO y un cotrolador de motores de doble puente.

Los sensores utilizados hasta ahora son la cámara y el sensor de aceleración para los golpes. La programación es un desarrollo en Java que gobierna el coche según lo que ve la cámara.

Aquí lo podéis ver dando los primeros por la casa en un entorno no muy amigable para la visión artificial.


----------



## jhefren (May 13, 2012)

hola esta muy bueno tu proyeto, tendras el diagrama de flujo de como funciona la visio artificial, se te agradeceria.  Quiero hacer algo parecido donde tengo una camara que me detecte un objeto y sea capaz de seguir el objeto con la camara.


----------



## robotmovil (May 15, 2012)

No tengo el diagrama de flujo tal cual, pero puedo comentarte que está basado en este tutorial

http://www.roborealm.com/tutorial/Obstacle_Avoidance/slide010.php

y en este:

http://eprints.lancs.ac.uk/27256/

La ventaja de mi proyecto es que para el hardware no es necesario comprar una cámara ni un pc, sino que los sensores de un smartphone son suficientes. Aunque no los mejores por lo que el proyecto seguirá progresando y quizás le incopore un sensor de distancia pues no es fácil saber si lo que hay delante es un obstáculo-  quiero que no se guíe sólo por el color del suelo-.


----------



## sjuan (May 27, 2012)

Está de lujo tu proyecto, haz avanzado??


----------



## robotmovil (May 27, 2012)

Gracias por el interés. Si he avanzado. He cambiado de coche, jeje, a un Mercedes. Pero también he mejorado bastante el programa y avanza bastante bien entre obstáculos, y cambia de dirección cuando no puede avanzar más. He integrado la brújula del móvil para saber cuando ha girado marcha atrás unos 90 grados. 

Ahora están integrados:
- Cámara
- Brújula (para girar)
- Acelerómetro (para detectar choques aunque hay que evitarlos)

El GPS no merece la pena en casa porque tiene mucho error.

También detecta que está atrapado sin poder avanzar si el reconocedor de la cámara le da los mismos datos durante tres segundo.

Un defecto que no puedo mejorar es que no ve cuando retrocede. Por eso he comprado un sónar LV-MaxSonar EZ1, y tengo que integrarlo para no chocar marcha atrás.

Un problema que tiene la cámara es que entrega la imagen varias décimas de segundo después de tomarla, y eso, junto con el tiempo de análisis limita la velocidad máxima del coche. Pero cuando suba un vídeo del nuevo con las mejoras se notará un aumento de la velocidad y la agilidad.

Tengo varios planes para seguir con el proyecto:

- que funcione en la calle
- que se oriente por la casa
- que reconozca alguna forma o color y la siga.


----------



## sjuan (May 27, 2012)

que bueno que has avanzado, yo diría, que para hacer un poco mas rápido el programa deberías  dejar de mostrar la imagen en la pantalla del celular, que solo la analice y no pierda tiempo ni ram mostrándola.

respecto al color, aquí subo un tutorial de visión artificial, esta hecho en visual basic pero lo importante es la forma en la que reconoce el color, es un algoritmo muy simple pero tiene un poco de solidez. si no es molestia  quisiera ver otro video y saber más sobre la comunicación bluethoot


----------



## robotmovil (Jun 3, 2012)

Bueno aquí les dejo un vídeo de la última versión de coche, buscando un camino por la casa.
Incorpora un sensor de proximidad en la parte de atrás, ya que no había otra manera de detectar obstáculos al dar marcha atrás.

Ya no se queda nunca parado, reconocce por la cámara si está quieto y no puede avanzar y en ese caso retrocede.

La cámara se ha optimizado todo lo posible y ahora ya sólo queda poner un modelo de teléfono más moderno.
He cambiado la conexión por bluetooth a cable usb porque no me paraba de pedir la clave de conexión. La posibilidad de ligar por usb el móvil y la tarjeta IOIO es gracias al soft de esta tarjeta.


----------



## robotmovil (Jun 23, 2012)

sjuan dijo:


> que bueno que has avanzado, yo diría, que para hacer un poco mas rápido el programa deberías  dejar de mostrar la imagen en la pantalla del celular, que solo la analice y no pierda tiempo ni ram mostrándola.
> 
> respecto al color, aquí subo un tutorial de visión artificial, esta hecho en visual basic pero lo importante es la forma en la que reconoce el color, es un algoritmo muy simple pero tiene un poco de solidez. si no es molestia  quisiera ver otro video y saber más sobre la comunicación bluethoot




Hola, pensé en lo que sujerias, y analicé los tiempos. He hecho opcional mostrar la imagen para que pierda menos tiempo. Además he incorporado OpenCV al proceso de imágenes y aumentado la frecuencia con la que se analizan los resultados y ahora el coche puede ir más rápido. Ha sido bastante trabajo. Si estáis interesados puedo publicaros el código de análisis de la imagen.


----------



## sjuan (Jun 23, 2012)

robotmovil dijo:


> Hola, pensé en lo que sujerias, y analicé los tiempos. He hecho opcional mostrar la imagen para que pierda menos tiempo. Además he incorporado OpenCV al proceso de imágenes y aumentado la frecuencia con la que se analizan los resultados y ahora el coche puede ir más rápido. Ha sido bastante trabajo.



te felicito, veo que avanzas rapido, y tengo una pregunta, añadiste OpenCV en android?





robotmovil dijo:


> Si estáis interesados puedo publicaros el código de análisis de la imagen.



por supuesto amigo

saludos


----------



## robotmovil (Jun 23, 2012)

Si, hay una versión de OpenCV para Android

http://opencv.alekcac.webfactional.com/android.html


----------



## santes (Jun 26, 2012)

Woww es increíble. me ha encantado el proyecto, tengo una pregunta, que algoritmo de navegación utilizaste para darle dirección al coche?


Te aplaudo, master


----------



## robotmovil (Jun 28, 2012)

Para los que estéis interesado en el algoritmos de visión, os subo el proyecto Android con el tratamiento del vídeo de la cámara extraído de mi proyecto. Está pensado para enfocar hacia adelante y abajo, y detectar los obstáculos y decidir si ir a la izquierda, a la derecha o al centro.
Para compilarlo con Eclipse se necesita la librería OpenCV. Los que hayáis desarrollado para Android no tendréis problema en ponerla en marcha.

(http://opencv.alekcac.webfactional.com/android.html)

No puedo subir aquí la .apk que podríais instalar en un móvil Android porque excede del límite del tamaño permitido, pero si estáis interesados la subiré a otro sitio.


----------



## jorgee89 (Jul 18, 2012)

Hola!

Primero felicitarte por tu proyecto !
Mira quiera saber si seguiste avanzando, pues estoy realizando una aplicación muy parecida a la tuya pero sin openCV aunque quisiera usarlo, pero no e logrado entender como hacerlo; es que me anda lento y pues desearía saber si muestras las imágenes en la pantalla o no lo haces. Redujuste el SurfaceView, muestras el porceso de la imagen?, envías este procesamiento al pc para visualizar?. perdón por preguntar tanto XD!

Bueno! un saludo!


----------



## robotmovil (Jul 19, 2012)

jorgee89 dijo:


> Hola!
> 
> Primero felicitarte por tu proyecto !
> Mira quiera saber si seguiste avanzando, pues estoy realizando una aplicación muy parecida a la tuya pero sin openCV aunque quisiera usarlo, pero no e logrado entender como hacerlo; es que me anda lento y pues desearía saber si muestras las imágenes en la pantalla o no lo haces. Redujuste el SurfaceView, muestras el porceso de la imagen?, envías este procesamiento al pc para visualizar?. perdón por preguntar tanto XD!
> ...



Bien, en primer lugar puedes ver que en el mensaje anterior dejé anexado el código fuente de la parte del proyecto que analiza la imagen. Para que funcione tienes que añadirle la referencia a la librería de opencv. No lo puse completo con la librería porque excede el tamaño permitido aquí.
Dedica un tiempo a aprender cómo integrarla: 

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/android_binary_package.html

El enlace que puse a opencv ya no funciona, mejor consultar este:

http://opencv.org/platforms/android.html

Como hablaste de SurfaceView asumo que estás familiarizado con el desarrollo para Android con Eclipse. 

 En este programa que dejé y en el completo, pulsando menú del teléfono aparecen las opciones para visualizar la imagen + el análisis hecho, o sólo el análisis. No he aprovechado el dibujado en nativo en surface, en fin carencias que tengo. Extraigo la imagen, la analizo, la mezclo con el resultado del análisis. Es imprescindible comprobar el análisis que hace el programa y nada mejor que visualizarlo, aunque para ganar FPS se puede ocultar la visualización.

 Este programa, ajustando sus parámetros es capaz de implementar la detección de obstáculos. Verás que va diciendo izquierda, derecha o centro según lo que ve.

Todo el proceso se hace en el teléfono. Y para que te vaya rápido es imprescindible siempre bajar la resolución a los mínimos puntos que lo hagan usable (50 x 70 por ejemplo)

Sobre el avance, tengo varias líneas pero no quiero hablar mucho de ellas hasta que estén hechas del todo. Por ahora es un buen coche de carreras autoguiado, pero no tiene con quien competir!

Espero haber ayudado y que puedas poner mi programa en marcha.
Saludos.


----------



## robotmovil (Sep 2, 2012)

Aquí algo que todos esos pequeños robots guiados por sensores de distancia no pueden hacer, buscar un objeto. En este caso gracias el coche se guía hacia el color rojo, pero sólo se para cuando encuentra una señal de Stop. Funciona con un reconocedor de patrones de OpenCV Haarcascade.






Saludos!


----------

