jueves, 20 de junio de 2013
Práctica 1: nueva mejora
Aqui adjunto un nuevo video dela práctica 1. Se han recortado varios segundos modificando las constantes del controlador hasta llegar a un vídeo de 5.33 segundos.
miércoles, 19 de junio de 2013
Práctica 2: reconstrucción 3D mejorada
Se ha mejorado la reconstrucción 3D y el tiempo de computo. También se ha gestionado mejor la memoria para que no fallase al realizar las diferentes iteraciones.
Se muestra la reconstrucción 3D sin luz en la que se ven los bordes de las figuras.
A continuación se muestra un video de la reconstrucción 3D con luz en el que se ve más detalle.
La siguiente mejora será intentar introducir color a la reconstrucción ya
que hasta ahora el color estaba fijado.
Se muestra la reconstrucción 3D sin luz en la que se ven los bordes de las figuras.
A continuación se muestra un video de la reconstrucción 3D con luz en el que se ve más detalle.
La siguiente mejora será intentar introducir color a la reconstrucción ya
que hasta ahora el color estaba fijado.
lunes, 17 de junio de 2013
Práctica 1: retocada
Se ha conseguido bajar el tiempo en el que se recorre el circuito a 5 minutos y medio si empieza desde fuera del circuito y encuentra la linea, y un poco menos, unos 5 minutos y cuarto si ya es la segunda vuelta.
Esto se ha conseguido modificando la programación para adaptarlo al último mundo.
Esto se ha conseguido modificando la programación para adaptarlo al último mundo.
Práctica 2: Pica 0
En el pica 0, se utiliza lo programado anteriormente eliminado la zona de seleccionar el punto.
Para esta parte de la práctica, se necesita realizar un filtro de bordes y para ello se utiliza Canny, eso sí, pasando las imágenes a escala de grises.
Cada punto marcado como borde será un punto de interés y se utilizarán sus coordenadas para la creación del punto 3D.
Para la creación de esta práctica se han seguido los siguientes pasos:
A continuación se presenta una primera estimación de la reconstrucción 3D sin añadir iluminación y representando los puntos en color negro.
Para esta parte de la práctica, se necesita realizar un filtro de bordes y para ello se utiliza Canny, eso sí, pasando las imágenes a escala de grises.
Cada punto marcado como borde será un punto de interés y se utilizarán sus coordenadas para la creación del punto 3D.
Para la creación de esta práctica se han seguido los siguientes pasos:
- Se pasan las imágenes a escala de grises para después aplicar el filtrado de Canny.
- Se carga la calibración de las cámaras.
- Por cada punto borde se obtienen sus coordenadas.
- Se pasa de coordenadas gráficas a ópticas el punto seleccionado.
- Se calcula la ecuación de la recta que pasa por el foco y el punto 3D calculado mediante backproject.
- De esta recta se obtienen dos puntos que serán los proyectados en la imagen derecha mediante project.
- Se calculan las coordenadas gráficas de dichos puntos.
- Se dibuja la franja epipolar (lineas azules del video).
- Se dibuja el patch del punto seleccionado (amarillo)
- Se buscan correspondencias entre el patch original y los seleccionados al recorrer la imagen derecha hasta elegir el óptimo (verde).
- El punto 2D se pasa a coordenadas ópticas y se utiliza backproject para obtener su punto 3D.
- Se realiza la búsqueda del punto 3D final calculando la otra recta de retroproyección y buscando los puntos con menos distancia entre ellos puesto que pueden no cortarse.
- Tras encontrar los óptimos, se elige el punto medio de los dos como punto 3D final.
- Se introduce en un vector limitado a 10000 puntos para su posterior representación.
A continuación se presenta una primera estimación de la reconstrucción 3D sin añadir iluminación y representando los puntos en color negro.
jueves, 13 de junio de 2013
Práctica 2: pica 1
Como ya se dijo en anteriores post, la práctica está descompuesta en 3: pica 2, pica 1 y pica 0.
En el pica 1, tenemos que seleccionar un punto en la imagen izquierda y automaticamente nos creará su homologo en la imagen derecha y con estos dos obtendremos el punto 3D.
Como en pica 0, se selecciona un punto con el ratón. Se calcula el rayo de retroproyección utilizando la recta parametrica.
Se obtienen dos puntos de esta recta y se calcula la franja epipolar en la imagen derecha.
Se busca el patch optimo y se representa dicho punto en 3D.
Para realizar esto se siguen los siguientes pasos:
En el pica 1, tenemos que seleccionar un punto en la imagen izquierda y automaticamente nos creará su homologo en la imagen derecha y con estos dos obtendremos el punto 3D.
Como en pica 0, se selecciona un punto con el ratón. Se calcula el rayo de retroproyección utilizando la recta parametrica.
Se obtienen dos puntos de esta recta y se calcula la franja epipolar en la imagen derecha.
Se busca el patch optimo y se representa dicho punto en 3D.
Para realizar esto se siguen los siguientes pasos:
- Se selecciona un punto en la imagen.
- Se carga la calibración de las cámaras.
- Se pasa de coordenadas gráficas a ópticas el punto seleccionado.
- Se calcula la ecuación de la recta que pasa por el foco y el punto 3D calculado mediante backproject.
- De esta recta se obtienen dos puntos que serán los proyectados en la imagen derecha mediante project.
- Se calculan las coordenadas gráficas de dichos puntos.
- Se dibuja la franja epipolar (lineas azules del video).
- Se dibuja el patch del punto seleccionado (amarillo)
- Se buscan correspondencias entre el patch original y los seleccionados al recorrer la imagen derecha hasta elegir el óptimo (verde).
- El punto 2D se pasa a coordenadas ópticas y se utiliza backproject para obtener su punto 3D.
- Se realiza la búsqueda del punto 3D final calculando la otra recta de retroproyección y buscando los puntos con menos distancia entre ellos puesto que pueden no cortarse.
- Tras encontrar los óptimos, se elige el punto medio de los dos como punto 3D final.
- Se representa dicho punto.
martes, 11 de junio de 2013
Práctica 2: Pica 2
Como ya se ha dicho en la entrada anterior, la práctica de divide en 3 parte comenzando por pica 2.
Se selecciona un punto de la camara izquierda y el mismo en la derecha. Después de esto, se calculan los rayos de retroproyección de cada punto 2D mediante el calculo de la ecuación de la recta, utilizando la recta parametrica.
Para calcular los rayos se siguien los siguientes pasos:
Se selecciona un punto de la camara izquierda y el mismo en la derecha. Después de esto, se calculan los rayos de retroproyección de cada punto 2D mediante el calculo de la ecuación de la recta, utilizando la recta parametrica.
Para calcular los rayos se siguien los siguientes pasos:
- Cargar la calibración de las cámaras-
- Pasar de coordenadas gráficas a ópticas.
- Calcular un punto del rayo mediante backproyect para las dos imágenes derecha e izquierda.
- Calcular las ecuaciones de la rectas que contienen dichos rayor.
- Y puesto que las rectas pueden no llegar a cortarse, se calcula la mínima distancia entre los puntos de las rectas.
- Obteniendo los puntos con menor distancia, se calcula el punto medio de los dos obteniendose asi, el punto a representar en 3D.
- Se pasa el punto 3D de coordenadas relativas a absolutas y se representa.
Práctica 2: Reconstrucción 3D
La práctica dos se ha subdividido en 3 partes:
- Pica 2: Aquí se selecciona un punto de la cámara izquierda y su correspondiente en la derecha. Con estos dos puntos se calcula el rayo de retroproyección de cada cámara respectivamente donde se encontrarán los puntos 3D. El rayo de retroproyeccion se calcula mediante las ecuaciones paramétricas y para hallar el punto exacto se calcula la mínima distancia entre dichos puntos. Calculando la mínima distancia se obtendrán 2 puntos y si punto medio sera el punto a dibujar mediante las funciones implementadas.
- Pica 1: Aquí se selecciona solo un punto en la cámara izquierda. Con este se calcula el rayo de retroproyección calculado mediante rectas paramétricas. Utilizando dos puntos de este rayo, se calcula la franja epipolar en la cámara derecha. Después de esto, se recorre dicha franja buscando similitudes entre los patch y al encontrar el óptimo, se proyecta dicho punto. Como en el pica 2, se encuentran los puntos con mínima distancia entre ellas y se dibuja.
- Pica 0: Se realizará automáticamente y no será necesario seleccionar ningún punto. Se obtienen los bordes de las imágenes y por cada punto significativo, se realiza el rayo de retroproyeccion y la creacion de la franja epipolar como en el pica 1. Para conseguir el punto 3D final, se siguen las pautas realizadas tanto en el pica 2 como en el 1.
domingo, 2 de junio de 2013
Practica 1: refinamiento
Después de muchos cambios tanto en variables como en constantes se ha conseguido reducir el tiempo que tarda en realizar el recorrido.
También se ha variado un poco la programación, ya que ademas de nuestras lineas horizontales, ahora se tienen en cuenta lineas verticales para girar más o menos según la posición en la que se encuentre.
De 9 minutos a pasado a un poco menos de 6.30 minutos si el robot comienza desde fuera del recorrido y unos 6 si es la segunda vuelta o posterior.
También se ha variado un poco la programación, ya que ademas de nuestras lineas horizontales, ahora se tienen en cuenta lineas verticales para girar más o menos según la posición en la que se encuentre.
De 9 minutos a pasado a un poco menos de 6.30 minutos si el robot comienza desde fuera del recorrido y unos 6 si es la segunda vuelta o posterior.
domingo, 19 de mayo de 2013
Practica 1: Primera estimación de recorrido
Después de realizar el filtro de color hay que pensar como tratar la imagen para conseguir realizar la vuelta al circuito en el menor tiempo posible.
Para ello, se decide no utilizar toda la imagen si no unas pocas lineas, en mi caso 4, colocadas a diferentes posiciones de la imagen, todas ellas en la mitad inferior de esta.
A la hora de recorrer el circuito se tienen dos problemáticas diferente cuyos valores variaran en función de la posición del robot en el circuito.
El robot puede tomar diferentes posiciones en el circuito:
La primera de problemática será la velocidad. Variara en función del número de pixeles entre las diferentes lineas seleccionadas con anterioridad utilizado un controlador P y ajustando su constante en función de donde se encuentre.
Hay que tener en cuenta la inercia del robot a la hora de obtener la velocidad ya que propiciara que se salga del camino.
La otra problemática es el giro. También se utiliza con controlador P para su calculo. El giro puede ser hacia a izquierda o hacia la derecha y en función de hacia donde sea obtendrá una constante con giro positivo o negativo.
Tras muchos problemas y cambios en la programación, una primera estimación del circuito es la siguiente:
Hay diferentes aspectos a mejorar. El primero de ellos, es el tiempo, tarda más de 8 minutos en realizar la vuelta. Esto es debido a la poca velocidad en los giros y el zigzagueo del robot ya que pierde mucho tiempo en volver entrar en la linea.
También hay que mejorar la velocidad consiguiendo que sea suficientemente alta para disminuir el tiempo pero a la vez intentando no salirse en las curvas.
Para ello, se decide no utilizar toda la imagen si no unas pocas lineas, en mi caso 4, colocadas a diferentes posiciones de la imagen, todas ellas en la mitad inferior de esta.
A la hora de recorrer el circuito se tienen dos problemáticas diferente cuyos valores variaran en función de la posición del robot en el circuito.
El robot puede tomar diferentes posiciones en el circuito:
- Linea recta
- Giro a la derecha
- Giro a la izquierda
- Fuera del circuito
La primera de problemática será la velocidad. Variara en función del número de pixeles entre las diferentes lineas seleccionadas con anterioridad utilizado un controlador P y ajustando su constante en función de donde se encuentre.
Hay que tener en cuenta la inercia del robot a la hora de obtener la velocidad ya que propiciara que se salga del camino.
La otra problemática es el giro. También se utiliza con controlador P para su calculo. El giro puede ser hacia a izquierda o hacia la derecha y en función de hacia donde sea obtendrá una constante con giro positivo o negativo.
Tras muchos problemas y cambios en la programación, una primera estimación del circuito es la siguiente:
Hay diferentes aspectos a mejorar. El primero de ellos, es el tiempo, tarda más de 8 minutos en realizar la vuelta. Esto es debido a la poca velocidad en los giros y el zigzagueo del robot ya que pierde mucho tiempo en volver entrar en la linea.
También hay que mejorar la velocidad consiguiendo que sea suficientemente alta para disminuir el tiempo pero a la vez intentando no salirse en las curvas.
jueves, 28 de marzo de 2013
Practica 1: Creación de un filtro de color
Para la primera practica de la asignatura se tiene que seguir una linea azul dentro de un laberinto. Por ello, lo primero que debe hacerse es un filtro de color.
Para realizar el filtro de color se obtiene el valor RBG de la linea azul. Este tiene las siguientes componentes:
Se modifica el valor del pixel y se observa como el cielo y la linea tienen un color parecido y por eso, se obtiene más que solo la linea.Para eliminar el cielo, se modifican los valores de R, G y B hasta llegar a los valores adecuados como se observa a continuación.
Para realizar el filtro de color se obtiene el valor RBG de la linea azul. Este tiene las siguientes componentes:
R=115
G=132
B=222
Se modifica el valor del pixel y se observa como el cielo y la linea tienen un color parecido y por eso, se obtiene más que solo la linea.Para eliminar el cielo, se modifican los valores de R, G y B hasta llegar a los valores adecuados como se observa a continuación.
miércoles, 20 de marzo de 2013
Practica 0
Después de realizar la instalación correcta de Gazebo y todo se entorno se comienzan las practicas de la asignatura con la practica 0. Una practica que permite familiarizarnos con el entorno y con la programación.
El archivo que permitirá modificar la programación es "MyAlgorithms.cpp".
Este archivo tiene arios ejemplos sobre como llamar a las cámaras, como obtener datos de los sensores...
Primero, se decide sacar un contador por pantalla. Para ello se utiliza el siguiente código: en el que iterativamente se va incrementando el valor de un contador.
printf("contador = %d\n", contador);
contador =contador +1;
El archivo que permitirá modificar la programación es "MyAlgorithms.cpp".
Este archivo tiene arios ejemplos sobre como llamar a las cámaras, como obtener datos de los sensores...
Primero, se decide sacar un contador por pantalla. Para ello se utiliza el siguiente código: en el que iterativamente se va incrementando el valor de un contador.
printf("contador = %d\n", contador);
contador =contador +1;
jueves, 14 de marzo de 2013
Instalación de Ubuntu y entorno de trabajo
Este blog está creado para la asignatura Visión en Robótica cuyos objetivos serán familiarizarse con los conceptos utilizados en robotica.
Primero se instala el sistema operativo Ubuntu 12.04 LTS (enlace) para 32 bits, aunque el sistema operativo nativo sea de 64, para ello se necesita crear un disco virtual e instalarlo desde ahí para que funcione el entorno Gazebo.
Primero y después de muchos intentos, se instaló Gazebo siguiendo los siguientes pasos:
>> sudo apt-get purge jderobot-teachin
>> sudo apt-get clean
>> sudo apt-get autoclean
>> sudo apt-get autoremove
>> sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise main" > /etc/apt /sources.list.d/ros-latest.list'
>> sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu precise main" > /etc/apt/sources.list.d/gazebo-latest.list'
Se utilizan las claves de los repositorios.
>> wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
>> wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
Se actualiza, se instala y se configura el entorno de Gazebo.
>> sudo apt-get update
>> sudo apt-get install gazebo
>> echo "source /usr/share/gazebo/setup.sh" >> ~/.bashrc
>> source ~/.bashrc
Se ejecuta gazebo.
>> gazebo
Tras la instalación de Gazebo y la comprobación de su funcionamiento, se instala Jderobot. Para ello se descargan los archivos de la pagina de Jderobot (enlace), estos archivos contendrá el entorno de simulación, nuestro laberinto. Para su instalación, se copiaran los archivos descargados en la carpeta del modelo de Gazebo.
Ahora, se configura GazeboServer e introrob desde terminal y se compila con cmake.
Se empieza con Gazebo Server y al ejecutar este comando, se obtienen diversos error de librerías, solventados uno a uno como por ejemplo:
Tras la instalación de todas las librerías, con el comando make se ejecuta el entorno.
En mi caso, no tenia instalado open cv, con lo cual tuve que descargarmelo de la web de jderobot.
Despues de terminar con GazeboServer, se compila introrob y se repiten los mismos pasos hasta que ejecute completamente.
Tras una completa instalación, se abre Gazebo en la siguiente ruta:
y se introduce: gazebo ../pioneer2dxJde.world
Ahora para abrir el controlador se va a la siguiente ruta:
y se introduce: ./build/introrob --Ice.Config=introrob.cfg
Primero se instala el sistema operativo Ubuntu 12.04 LTS (enlace) para 32 bits, aunque el sistema operativo nativo sea de 64, para ello se necesita crear un disco virtual e instalarlo desde ahí para que funcione el entorno Gazebo.
Primero y después de muchos intentos, se instaló Gazebo siguiendo los siguientes pasos:
>> sudo apt-get purge jderobot-teachin
>> sudo apt-get clean
>> sudo apt-get autoclean
>> sudo apt-get autoremove
>> sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise main" > /etc/apt /sources.list.d/ros-latest.list'
>> sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu precise main" > /etc/apt/sources.list.d/gazebo-latest.list'
Se utilizan las claves de los repositorios.
>> wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
>> wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
Se actualiza, se instala y se configura el entorno de Gazebo.
>> sudo apt-get update
>> sudo apt-get install gazebo
>> echo "source /usr/share/gazebo/setup.sh" >> ~/.bashrc
>> source ~/.bashrc
Se ejecuta gazebo.
>> gazebo
Tras la instalación de Gazebo y la comprobación de su funcionamiento, se instala Jderobot. Para ello se descargan los archivos de la pagina de Jderobot (enlace), estos archivos contendrá el entorno de simulación, nuestro laberinto. Para su instalación, se copiaran los archivos descargados en la carpeta del modelo de Gazebo.
Ahora, se configura GazeboServer e introrob desde terminal y se compila con cmake.
Se empieza con Gazebo Server y al ejecutar este comando, se obtienen diversos error de librerías, solventados uno a uno como por ejemplo:
libgtkmm/ (version que nos falla del gtkmm)-dev
Tras la instalación de todas las librerías, con el comando make se ejecuta el entorno.
En mi caso, no tenia instalado open cv, con lo cual tuve que descargarmelo de la web de jderobot.
Despues de terminar con GazeboServer, se compila introrob y se repiten los mismos pasos hasta que ejecute completamente.
Tras una completa instalación, se abre Gazebo en la siguiente ruta:
Escritorio/Robotica/GazeboServer/build
y se introduce: gazebo ../pioneer2dxJde.world
Ahora para abrir el controlador se va a la siguiente ruta:
Escritorio/Robotica/introrob
y se introduce: ./build/introrob --Ice.Config=introrob.cfg
Suscribirse a:
Comentarios (Atom)


