Iniciar Sesion

Planet

Buenas!

Buenas!
Ante todo me presento, soy Ángel Cayetano Gómez Gil, estudiante en la Escuela Técnica Superior de Ingeniería Informática (ETSII) , en Sevilla, y a lo que viene el caso, concursante en el V Concurso Universitario de Software Libre (CUSL).
El proyecto que presento es un robot hexápodo basado en la plataforma Arduino, sin ningún control externo, es decir, no teledirigido, se mueve (moverá) por sí solo, salvando obstáculos y adversidades de forma autómata.
En principio es un proyecto de Ocio y Entretenimiento, pero de aquí en adelante buscaré posibles aplicaciones, como el acceso a lugares dificilmente inaccesibles, o como estabilizador de superficies en movimiento. Lo realmente curioso del proyecto, es que el código estará totalmente escrito en Wiring, el lenguaje por excelecia del IDE de la plataforma Arduino, descargable desde su página (http://www.arduino.cc/es), y que todo el hardware será de bajo coste (ya que, por una parte me lo financio yo) pero intentando que tenga una calidad aceptable – buena, y un acabado digno.
También espero que el aspecto del HXBot sorprenda. Más adelante revelaré mas información sobre el proyecto. Hasta entonces, espero a que cierre el período de inscripción del CUSL.
Un saludo,
Ángel Cayetano

Presentación

Somos Alberto Calleja y Miguel Ruiz, somos dos estudiantes de Ingeniería Informática y tenemos una idea.La idea se llama BXip y es nuestra propuesta para el CUSL (Concurso de Software Libre). En este blog iremos posteando toda noticia o cambio que se vaya sucediendo en nuestro proyecto, así como enlaces al material que vayamos elaborando, repositorio, etc.Para cualquier consulta, sujerencia o queja puedes contactar con nosotros.

Presentación

Tal y como dice la descripción en la ficha del V CUSL sobre el proyecto: Infant es un proyecto/experimento en el que se tratará, mediante el uso de algoritmos de aprendizaje automático y visión por ordenador crear una aplicación capaz de identificar objetos por medio de diferentes técnicas.Es decir, la idea principal es crear un sistema que sea capaz de aprender a diferenciar y distinguir determinados objetos y una vez aprendidos capaz de diferenciarlos en diferentes escenas o en las imagenes capturadas por una camara.

Primeros pasos

Una vez que hemos pensado y decidido por dónde meterle mano a este proyecto nos ponemos manos a la obra, es el momento de empezar a desarrollar las funciones que generara el programa, la estructura ya la tenemos en mente y poco a poco la vamos plasmando.
Después de varias pruebas hemos logrado crear la base del proyecto, seguimos trabajando en él para poder subir la primera de las versiones.
En una primera versión, está previsto que el programa sea capaz de generar funciones básicas en C.
Para próximas versiones, continuaremos introduciendo funciones más complejas para posteriormente añadir algún otro lenguaje de programación pero todavía no sabemos hacia donde decantarnos.
Pronto informaremos sobre otras novedades, aquí dejo algunas imágenes del actual proyecto, que posiblemente sufra alguna que otra modificación visual.


Metodología – Plan de trabajo

Como ya dije en la entrada de los objetivos del proyecto, para la realización de este proyecto voy a utilizar una metodología de desarrollo en espiral.
En éste método de trabajo, las actividades a realizar en cada revisión no están fijadas a priori, sino que se eligen en función del análisis de riesgo en función del estado anterior.
Por tanto, en cada vuelta o iteración hay que tener en cuenta los objetivos o necesidades del proyecto y las diferentes alternativas para conseguir esos objetivos. Esto hace que sea difícil en primera instancia fijarse unos objetivos muy marcados antes de la realización del proyecto, pero ayuda a la hora de comenzar el trabajo y, en mi opinión, hacen unos resultados más acordes a las necesidades qeu surgen del proyecto y no tanto a unos objetivos marcados desde el principio (que pueden luego no ser tan necesarios como creíamos).
Otra de las premisas que voy a adoptar para este proyecto, y que llevo haciendo desde hace bastante tiempo es la utilización únicamente de software libre para realizar el proyecto. He de agradecer estas iniciativas al GSyC y al grupo LibreSoft de la Universidad Rey Juan Carlos el hecho de introducirnos desde el primer curso de carrera en el mundo del software Libre.
Sin andarme con más rodeos, voy a comentar los mecanismos que utilizaré del proyecto. Para la realización de este proyecto, programaré en Python. Creo que este lenguaje de programación tiene una serie de ventajas que lo hace especialmente interesante. En primer lugar, como con todos los lenguajes de programación interpretados, la velocidad de desarrollo es mucho mayor que con un lenguaje compilado, sin perder por ello potencia o renunciar a una API o documentación elaborada. Además, utilizaré la biblioteca GTK+ para el desarrollo de la interfaz gráfica en el lado del cliente,
y el framework Django para la aplicación web.
Por último, como entornos de trabajo, utilizaré Glade para la realización de las interfaces gráficas y Geany para la escritura del código de la aplicación, ambas con licencia GNU GPL, por su flexibilidad y por ser muy ligeras.

Presentación

Me acaban de confirmar la aceptación de mi nuevo proyecto, FreePhyloTree, en el CUSL5, y aquí inauguro éste blog para ir informando de mi progreso, mis ideas, mis peleas con las librerías, los intentos de suicidio a los que sobreviva y demás florituras que acaezcan en el desarrollo de éste proyecto.Antes que nada (y por tercera vez, tanto en el CUSL5, como en la forja), explicaré en qué consiste el proyecto. Se llama FreePhyloTree, y es una herramienta de visualización 3D de árboles filogenéticos, también llamados filogramas. ¿Qué es un filograma?, pues un árbol que refleja las relaciones evolutivas entre especies.Por ejemplo, éste es un filograma bonito y decorado:Este árbol refleja, por ejemplo, como nosotros estamos más emparentados con los roedores que con las gallinas, ya que el ancestro común con los roedores es posterior al ancestro común con las gallinas, que está más cerca de la raíz. Y también refleja que existe un ancestro común a todos: la raíz del árbol. Para más información sobre la clasificación de las especies y los árboles filogenéticos, pueden visitar éste artículo de mi otro blog: clasificación de los seres vivos. Existen muchas maneras de representar árboles filogenéticos, y aquí se muestran otros ejemplos:Por mi parte, quiero crear árboles filogenéticos con una apariencia como ésta:Esta imagen tan bonita y elegante no es ni más ni menos que Gource, una herramienta hecha por google para visualizar el historial de cambios de un proyecto bajo git. Cada nodo de ese árbol es un directorio, y cada hoja, un fichero del proyecto. Gource crea una animación que va modificando ese árbol a la par que se van modificando los ficheros del proyecto (es decir, a medidas que se suceden las versiones del repositorio).Cuando conocí dicho software, sencillamente me encantó. Unido ésto a que me interesa el campo de la evolución biológica y que además no conocía ningún software que ayudara a su estudio, cuando decidí inscribirme al CUSL5 no se me ocurrió otra cosa que fusionar ambas ideas.Visualizadores de árboles filogenéticos, existen muchos. Libres menos, pero también los hay, y en realidad hay bastantes. En 3D, también. Pero ninguno es una herramienta didáctica, es sencillamente eso, un visualizador. En FreePhyloTree se pretende camuflar una especie de enciclopedia sobre evolución biológica dentro de un visualizador de árboles filogenéticos: visualizando el árbol, se conocen las relaciones evolutivas, y seleccionando cierto clado, se obtiene la información textual que ayuda a entender su historia y contexto evolutivo: historia de los descubrimientos, época geológica, contexto ecológico, etc. Llevar el seguimiento de la historia evolutiva de una especie se hace, así, mucho más fácil.Todavía no tengo planificado de qué naturaleza será dicha "enciclopedia": si cada clado se anexará a una página wiki integrada con el sistema, si existirá una línea temporal, con qué tipos de árboles contaremos (filogramas o cronogramas, o una fusión de ambos), o de qué forma se interactuará con la base de datos.Normalmente, diversos autores tienen diversas ideas sobre la historia evolutiva de un grupo de organismos, lo que provoca una obvia confusión en los estudiantes: es muy complicado entender la filogenia de una especie si en cada referencia se muestra una historia evolutiva distinta; así que también se pretenderá crear una visualización cómoda y comprensible de los distintos posibles árboles que relacionan a un mismo grupo de organismos.El blog del proyecto, será el blog que estás leyendo. El repositorio principal está alojado en gitorious, y el repositorio secundario, y necesario para el CUSL5, estará alojado en la forja de rediris (pendiente de confirmación). En este último (ya que va con svn, -y ya va siendo hora de permitir git-) guardaré solo los commits importantes, los que añadan alguna funcionalidad nueva y así se facilite el seguimiento del repositorio (y de paso no ensuciamos el historial de commits y no volvemos loco a los evaluadores ;) ). La página principal del proyecto también es la ofrecida por la forja (pendiente de confirmación primero, y de construcción después).

Problema con los sockets bluetooth solucionado

Ya he solucionado del todo el problema que comenté en el anterior artículo. Además, después de varios intentos y correcciones, he podido ejecutar satisfactoriamente el Proxy Bluetooth, el cual es ya totalmente funcional. La prueba final ha sido, desde un ordenador, pedir una página HTML al servidor (otro ordenador) por POST y por medio de bluetooth, abriendo dicha página con Firefox al final para ver el resultado (un Hola Mundo parametrizado).
Ahora, tengo que ver en qué directorios del sistema debe ir el Proxy Bluetooth ya que debe ser instalado como un servicio del sistema. Cuando lo averigüe, subiré el código al repositorio.

Problemas con el Proxy Bluetooth

Bueno, ya estoy teniendo mis primeros problemas. Resulta que los sockets de bluetooth que estoy usando no funcionan exactamente igual que los sockets de TCP/IP, así que llevo un tiempo intentando hacer que funcione el código del Proxy Bluetooth.
Concretamente, lo que yo uso de los sockets que no funciona igual con los otros sockets es la función recv para recibir datos. La forma de terminar de recibir datos no es igual; en mi caso, siempre termina con una excepción (algo no recomendable). Así que, he tenido que idear una forma de exponer que no se deben recibir más datos terminando todos los datos con el texto , de forma que no se produzcan excepciones.

Objetivos del proyecto

Estos días no he escrito nada en el blog porque he estado pensando a fondo sobre el rumbo del proyecto. El jueves pasado hablé con Jesus M. González Barahona, director del Departamento de Sistemas Telemáticos y Computación (GSyC) de mi universidad (URJC), y le dimos una nueva vuelta al proyecto, que lo hace, a mi entender, más interesante.
El proyecto tiene un objetivo fundamental, y es que me he dado cuenta de que los pasos necesarios para la modificación por parte del usuario de un Live CD basado en una distribución de GNU/Linux, así como la comprensión de la estructura interna y el funcionamiento de los Live CD no son sencillos.
Sin embargo, uno de los pilares de la filosofía del Software Libre es la libertar de modificar cualquier programa libre, adaptándolo a las necesidades del usuario. Por eso, con el desarrollo de este proyecto se pretende facilitar a todos los usuarios la posibilidad de crear su propia versión adaptada del Sistema Operativo Ubuntu Linux.
Hemos acordado seguir una metodología de desarrollo en espiral, con lo que el proyecto irá tomando nuevo rumbo a medida que las necesidades o nuevas ideas vayan marcando. No obstante, a continuación detallo cómo creo que será el proyecto al finalizarse:

  • En primer lugar, se desarrollará en Python una aplicación web, en la que un usuario pueda crear los ficheros de configuración para modificar su Live CD, y posteriormente descargarlos. Creo interesante que estos ficheros de configuración sean independientes dependiendo del ámbito que modifiquen del CD (aspecto, paquetería, etc), por el siguiente punto.
  • Se le ofrece al usuario la posibilidad de almacenar sus ficheros de configuración en el servidor mediante un registro en la aplicación, y la posibilidad de compartirlos con otros usuarios. Ésto permite a un determinado usuario elegir, por ejemplo, un fichero con una determinada configuración de software, pero con el aspecto gráfico de otro usuario.
  • Una vez configurado, descargará los ficheros de configuración (y recursos que puedan ser necesarios, como fondos de pantalla, etc) y utilizando un programa con interfaz gráfica de usuario (GUI) en Python y GTK+, podrá crear y grabar la imagen del CD usando la configuración seleccionada.

No estoy seguro de si incluir la posibilidad de generar los ficheros de configuración directamente en la aplicación gráfica que el usuario dispone en su ordenador. Supongo que esta idea, que me llama como complementaria a la aplicación web y que era mi idea original, se implementará dependiendo del tiempo y de las funcionalidades que quiera añadir a la aplicación web.
Por otro lado, comentándolo con más gente, hay quien piensa que es más práctico que la aplicación permita descargar directamente la ISO del CD ya modificado. Yo sinceramente no estoy seguro de que opción es más útil para el usuario, aunque si se piensa bien, es trivial hacer que la aplicación web utilice el mismo programa que utilizaría el usuario para devolverle una ISO en vez de los ficheros de configuración. He decidido, por tanto, que esto se verá sobre la marcha, dependiendo de cómo se desarrolle la funcionalidad de la aplicación y de la capacidad del servidor, y quizá con una encuesta más adelante .
En principio, estos son los objetivos a grandes rasgos. No he querido entrar en detalle de cómo se implementa cada una de las dos partes, porque prefiero comentarlas por separado más adelante.
Al margen de estas conclusiones de cómo me gustaría que fuera la aplicación, tengo otras aspiraciones de caracter personal con el proyecto. Creo que puede servirme también como “excusa” para aprender en otros aspectos, como profundizar sobre LaTeX, documentación de código y de proyectos, etc.
Por supuesto, una vez mas, os abro las puertas a comentar nuevas propuestas, ideas, o valoraciones sobre lo que he expuesto.

Comenzando con opencv

Hola lectores,
hemos comenzado aprendiendo un poco de opencv y mirando cosillas para saber más o menos por donde andamos. Hemos visto que tenemos unas cuantas estructuras básicas como un punto en 2D, un punto en 3D, una matriz, un escalar, etc [1]
También hemos estado probando algunas funciones, como las de cargar archivos de imagen y video, y las de abrir la cam para capturar fotos. [2]
Más adelante miraremos como trabajar con las fotos, ya que nos basaremos en el reconocimiento de imagen para nuestro objetivo, detectar los cambios en un tablero de go.
Saludos !!
[1] http://opencv.willowgarage.com/documentation/basic_structures.html
[2] http://opencv.willowgarage.com/documentation/reading_and_writing_images_...

Distribuir contenido

Colabora