Nos vemos de nuevo en Septiembre.
Nota: Foto real sin retoques ni fotomontaje.
Según la Wikipedia, “ En matemáticas, la Singularidad es un punto donde una función tiende a infinito o está mal definida en otro sentido.”
Traspolando esa definición a la robótica y más concretamente a la Inteligencia Artificial, diríamos que la singularidad llegará cuando la tecnología sea capaz de crear máquinas mucho más “inteligentes”, que un ser humano, capaces de buscar soluciones a problemas hoy sin resolver tanto a nivel matemático ( algoritmos y teoremas ), como a nivel medico. A medida que esa inteligencia artificial sea capaz de aprender y crecer exponencialmente también lo hará la sociedad llegando un punto en que los seres humanos no serán los únicos protagonistas que escriban el futuro de la humanidad.
Una forma sencilla de entender la singularidad sería comparar la evolución, de las distintas civilizaciones que han habitado la tierra. Un habitante de la antigua Grecia ( 3000 años a.c. ) se sorprendería de los cambios en la sociedad del imperio romano ( 30 a.c. A 476 d.c. ) mientras que uno de nuestros bisabuelos se sorprendería de los cambios sucedidos en nuestra sociedad actual. En el primer caso habrían pasado cientos de años en la evolución de ambas sociedades mientras que en segundo caso tan solo habrían pasado 100 años o menos, en gran medida gracias al progreso de la tecnología. Lo mismo ocurrirá con nosotros, tal será el cambio que la tecnología ofrecerá en breve que no podemos imaginar en estos momentos la sociedad dentro de 50 años.
Por lo tanto podríamos decir que existe singularidad cuando una sociedad cambia tanto que las generaciones anteriores serían incapaces de entender los cambios de esa nueva sociedad.
En Marzo de 1993, Vernor Vinge presentó en un simposio de la NASA una tesis llamada “singularidad tecnológica” donde vaticinaba que en 30 años dispondríamos de las herramientas tecnológicas necesarias para crear una inteligencia super-humana. Raymond Kurzweil también cree que en breve dispondremos de los avances médicos necesarios para revertir el proceso de envejecimiento lo que supondría según mi humilde opinión un cambio radical en la sociedad que conocemos en estos momentos.
Pero para disponer de máquinas como las que Vinge y Kurzweil predicen son necesarios algunos cambios importantes a nivel de computación. En lo que a Inteligencia Artificial se refiere se han hecho muchos avances en sistemas de redes neuronales pero seguimos usando ordenadores basados en los sistemas de los años 50. Por muy rápidos que sean nuestros ordenadores de hoy en día siguen realizando operaciones en “serie” y no en “paralelo” como lo hacen los seres humanos. Para que os hagais una idea de lo que estamos hablando, un cerebro humano tiene aproximadamente 10 billones de neuronas y 60 trillones de conexiones mientras que una “tipica” red neuronal artificial, funcionando en una CPU, no tendría más de 1000 neuronas.
Siguiendo estos esquemas, estamos tratando de desarrollar una red neuronal basada en los chips gráficos GPU ( Graphics Processing Unit ) que conllevan un alto grado de paralelismo al ser sus unidades de cálculo vértices. En algunos casos el poder de computación de las GPUS supera en 100 veces a una CPU.
Las pruebas que estamos realizando se están llevando a cabo en una máquina Multi GPUs formada por 4 gráficas Nvidia GTX295 ( 8 GPUS ) con un poder de procesamiento matemático de 7153,92 Gflops.
Algunos de los prototipos de Qbo llevan instalados una placa Mini-ITX ASUS modelo AT3IONT-I cuyo chip gráfico lleva incorporado una GPU, por lo que si nuestros intentos tienen éxito, la red neuronal será trasladada a cada uno de estos prototipos para su uso con algunos módulos del API, dejando libre la CPU para otras tareas.
Francisco Paz
Son muchos los correos electrónicos que recibimos para conocer el estado actual del desarrollo del robot por lo que hemos decido escribir este post.
Aún quedan algunas cosas por desarrollar y depurar, y aunque nuestros recursos son limitados debido principalmente a que no contamos con ayudas ni subvenciones externas ( económicamente hablando ), nos encontramos muy cerca de la recta final. Así que aquí va un pequeño resumen sobre el estado de los trabajos que estamos realizando en el robot.
Panel de control ( GUI ): 90% desarrollado.
Pensado y diseñado para usuarios con pocos conocimientos de programación permite interactuar con el robot de forma gráfica y sencilla, bien mediante el acceso directo vía teclado-ratón-monitor o bien vía Servidor.
Durante el proceso de cambio a la plataforma ROS fue necesario retocar algunas partes del GUI para poder adecuarlo a las nuevas comunicaciones “nodos” de la plataforma de Willow Garage.
El sistema lleva instalado un servidor APACHE completo permitiendo acceder al mismo desde una ubicación remota y dotándole de características de “tele-presencia” entre otras muchas cosas.
Algunas de las funciones a las que se puede acceder gráficamente son:

Panel de Control
Como ya comentamos en algún POST, tomamos la decisión de convertir todo nuestro API desarrollado en JAVA a la plataforma de Willow Garage ROS. Esto nos llevó algún tiempo pero ya podemos confirmar que tenemos el 99.9% convertido.
Para nosotros y suponemos que para mucha otra gente, esta es la parte más entretenida, divertida e interesante del robot pudiendo añadir nuevos NODOS a medida que vayamos instalando hardware dentro del robot. La facilidad con que la plataforma ROS gestiona estos NODOS nos permite crear robots diferentes, cada vez más potentes y con nuevas funcionalidades que hoy en día ni siquiera podemos llegar a imaginar.
A los lenguajes de programación JAVA y C++ hemos añadido Python que por su facilidad de implementación lo hace ideal para gestionar algunas tareas del robot.
Nuestra intención es crear con vuestra ayuda todos los nodos ( drivers ) necesarios de hardware standar para poder implementarlos en el API y posteriormente en el Panel de Control para que cada usuario pueda configurar su robot con el hardware que quiera y cuando descargue el software ya se encuentre desarrollado por la comunidad y se encuentre completamente implementado con las funciones el robot.

Ejemplo de control de cámaras en ROS
Controladoras hardware: 90% desarrollado
El proceso de desarrollo de las controladoras ha sido laborioso y largo debido en gran medida a las constantes pruebas a las que eran sometidas dependiendo del hardware que queríamos testear. Por ellas han pasado varios tipos de motores DC, más de 10 tipos de servos de diferentes marcas, tamaños y torque, sensores de ultrasonidos, sensores de temperatura, brújulas digitales, giroscopios, baterías, acelerometros, etc…

Primera controladora ( Febrero 2008 )
Con el fin de facilitar la programación y acceso a los componentes hardware ( servos, motores, sensores … ), optamos por el uso del protocolo I2C que permite conectar directamente el hardware que queramos añadir y mediante comandos enviar las peticiones a la dirección previamente asignada a ese componente.

Controladora de la cabeza de Qbo

Controladora Motores y otros
Sobre las controladoras hablaremos mucho más profundamente en breve, reservando para ese momento una gran sorpresa. Estad atentos !
Moldes de inyección: ( en proceso de fabricación )
Este ha sido el paso más complicado, costoso y duro para nosotros. Como también comentamos en otro POST para nosotros era muy importante que el robot fuera atractivo y tuviera la mayor calidad posible. Más de 30 piezas plásticas en Policarbonato y ABS con acabados en pulido espejo cubrirán en su totalidad a Qbo, dándole un aspecto increíble.
A continuación podéis ver una pieza en “prototipado rápido” y la misma realizada en un molde de inyección con acabado pulido espejo. Menuda diferencia ¿verdad?

Pieza en prototipado rápido

Pieza en molde de acero profesional
Distribución Linux: En fase “GURU MEDITATION”
Aunque siempre nos hemos apoyado en Ubuntu como distribución Linux para el desarrollo y soporte del software y hardware creemos que contiene demasiados paquetes innecesarios para las tareas que va a realizar el robot. En algunas de nuestras pruebas y siguiendo con nuestra filosofía de “pon en el robot lo que quieras”, hemos usado como soporte de almacenamiento, discos duros de 2.5”, pen-drives, discos SSD e incluso tarjetas Compact Flash. Como os podéis imaginar un sistema Ubuntu completo arranca en pocos segundos en un disco SSD pero varios minutos en una Compact Flash.
Por todos estos motivos estamos intentando crear nuestra propia distribución Linux “ligera” para Qbo pero aún no hemos hecho demasiados progresos principalmente debido al poco tiempo que nos queda libre.
Una alternativa rápida y “realista” sería usar Ubuntu como base ( sin paquetes software innecesarios ) e ir añadiendo solamente aquellos paquetes necesarios para el robot, incluyendo repositorios a nuestros servidores donde se alojarían todas aquellas actualizaciones que vayamos haciendo nosotros o la propia comunidad como por ejemplo “nodos” para nuevo hardware en ROS, modelos acústicos más desarrollados para el motor de reconocimiento o nuevas bases de datos para el chatterbot.
Nota: Gráficos, imágenes y hardware están sujetas a cambio sin previo aviso.
From the beginning of the project our Qbo real prototypes, pieces and renders have been blue and white.

White & Blue
But now that we are at the end of the project we would like to choose a second set of colours for Qbo so nobody better than you for this choice.
Here you have some medium quality renders so that you can see the final colour results on Qbo (click on the image to enlarge)
ATENTION: This poll will only be available until the 15th of July. You can find it in the right column of this post.
Thank you so much. Qbo’s team.
Thank you so much. Qbo’s team.
AND THE WINNER IS: APPLE GREEN. Many Thanks to ALL

During the initial stage of Qbo’s software selection I could check the amount of tools and “individual” projects on artificial vision, chatterbots and speech recognition and synthesis available on the Internet. Some of these developments were even used by important research centres in their robots.
Every development contributed with something different from others but they all had something in common: they required previous training in order to work optimally.
Speech recognition engines require two types of files: a grammar file and an acoustic model previously trained with different voices and text transcriptions.
Every word in the grammar file must be previously trained in the acoustic model, a very difficult job for a small group of people considering there was not an open-source acoustic model in English available for the community which was big enough to contain the grammar our platform required.
So that you can get an idea we would need hundreds of hours of speech transcriptions from different users in order to create an acceptable acoustic model.
The same happened with chatterbots: many developments but only a few had conversational data bases big enough to have an acceptable conversation and most of them worked by searching for an answer stored in their data base.
In 1950 Alan Turing proposed a test to prove the existence of intelligence in a machine but 60 years later nobody has ever succeeded. In 1990 they created the Loebner Prize provided with 100.000 dollars for the computer programme able to deceive a human jury which has not been achieved yet. Ray Kurzweil foretells this will be done in 2029.
Therefore, at the moment the community has the suitable tools but they do not have enough external support to make them really powerful. Maybe it is because nobody sits in front of a computer with a microphone to read out some sentences and upload them on the Internet without knowing exactly the result of this work. Or, perhaps, these tools do not sufficiently encourage the community to help with their growth.
We can see a very clear example of all this with the language translator of all-powerful Google. Nobody doubts that in this project Google has engineers and mathematicians generating and trying all kind of approximation algorithms, neural networks, natural language and semantics systems. But, despite getting some successful results they are still far from offering a “natural” and comprehensible translation. So, what was Google’s last step to improve its translation system? Asking users for help. Google proposes a translation and the user tries to improve it, that is the sense of this POST: “sharing is necessary to improve and grow”.
What would happen if we integrated and related all these “open-source” developments, a speech synthesizer, a speech recognition engine, a chatterbot and an artificial vision system with a platform able to interact with the outside and at the same time, each platform would share those data with the rest?
Imagine for example that an individual’s platform creates and stores a complete map of the Louvre Museum with artificial vision (SLAM) sharing this map with other platforms through a centralized system. From that moment any new platform placed in that environment would have a previously made map and it could move in that environment.
Now imagine thousands of platforms sharing all kind of data from the conversations stored by the chatterbot, speech transcriptions, objects, maps, images, gestures…and all this being updated on real time thanks to neural networks or learning algorithms.
Would all that amount of information let us create enough patterns so that the platform could learn and interact by itself?
Cuando inicié este proyecto mi primera intención era aprender todo lo posible acerca del mundo de la robótica por lo que no presté demasiada atención a otros API o Plataformas de desarrollo existentes en Internet, dando por hecho que el desarrollo de todas las comunicaciones entre dispositivos hardware y software se harían partiendo de cero.
Actualmente, con un API propio completamente terminado y desarrollado por TheCorpora, hemos empezado a tener tiempo para jugar con otras plataformas, prestando especial atención a la desarrollada por Willow Garage.
Nuestras primeras impresiones sobre la integración de ROS con nuestro robot Qbo son muy positivas ( tal vez demasiado ).
El primer paso que dimos fue instalar bajo Linux los módulos de la plataforma ROS en la placa PC del robot siguiendo los “maravillosos” tutoriales existentes en la página del proyecto, para pasar posteriormente a desarrollar un módulo que comunicara nuestras controladoras hardware con ROS. Una vez realizada esta tarea solo nos quedaba ir leyendo desde ROS todos y cada uno de los datos de los componentes del robot ( sensores, motores, servos, batería, etc, etc ), paso que resultó tremendamente sencillo. Os adjuntamos un video donde podeís comprobar lo dicho anteriormente.
ROS & QBO: Probando los servos de la cabeza de Qbo con Wiimote
¿Será ROS el sistema que controlará Qbo?. El tiempo lo dirá, pero cada día que pasa los módulos de nuestro API actual acaban siendo portados a ROS de manera sencilla y rápida.
Enhorabuena a Willow Garage por tan magnífico trabajo realizado. Si finalmente nuestro robot Qbo integra ROS esperamos poder aportar nuestro granito de arena a esta potente y maravillosa plataforma.
ROS & QBO: Probando los motores de Qbo con Wiimote
ROS & QBO: Probando los sensores de ultrasonidos con Qbo
Podeis ver otros videos sencillos en nuestro canal de YouTube.
Nota: Muy pronto responderemos en este blog a todas las preguntas y dudas que nos habeis hecho llegar a través de las suscripciones y del correo electrónico. Estamos muy ilusionados con la acogida que ha tenido el proyecto, en gran medida debido al eco que cientos de páginas web, blogs, y otros medios ( twitter ó facebook ) han hecho de nosotros. Desde nuestra pequeña empresa, GRACIAS a todos ellos por el seguimiento que han realizado y el interés mostrado. Esperamos no defraudaros !!.
( Pulsar en la Imagen para hacer más grande )
Especificaciones de Qbo
CABEZA
CUERPO
ALGUNAS DE LAS CARACTERÍSTICAS DE QBO:
Y MUCHO MÁS MUY PRONTO…
desde hace unos días y debido, en gran parte, al lanzamiento del blog, el poco tiempo del que disponía se ha visto ocupado respondiendo mails y preparando algunas conferencias a las que asistiré como invitado próximamente.
Debido a esta situación me ha sido imposible actualizar el Blog pero os prometo que muy pronto presentaremos a Qbo en sociedad.
Mientras tanto estamos trabajando en algunos videos donde iremos enseñando el “gran potencial” que tiene actualmente el robot a nivel de Software y que como ya sabeis será OpenSource, reconociendo caras, objetos y detectando la profundidad de los mismos, seguimiento de caras y objetos en tiempo real según el grado de proximidad y el “peso” que tengan asignados, compilación de objetos y caras y su carga en tiempo real, detección de colores, detección y análisis de gestos según patrones asignados previamente ( estamos desarrollando actualmente la detección por parte del robot del abecedario “dictológico” que usan los sordomudos y que el robot irá dictando mediante el sintetizador de voz ). También enseñaremos como crear gramaticas con el robot, cambiarle la voz, añadir nuevas frases al mismo y el funcionamiento del chatterbot mediante el uso de la 4ª ley de Markov ( aún en desarrollo pero muy avanzado ). Y esto es solo el principio, Qbo os reserva otras grandes sorpresas que en breve desvelaremos en este mismo Blog.
Gracias a todos por vuestro apoyo en este dificil proyecto.
When I started I was sure that this robot had to be “realistic”. I did not want to develop a biped robot or a robot with arms because I knew I would fail due to the lack of resources. Once I had that point clear, I focused my efforts on thinking what I would like to have in my own house. Some of my first ideas were that it should be small, something similar to a cat or a dog, it would move quickly in order to interact with me in a logical way and it would look nice to fit in my environment. However, the most important thing was being able to experiment in my own robot with all the information about artificial vision, speech recognition and synthesis which was under an open source license on the Internet and was used in research robots. It was also important that as the hardware improved, my robot would improve along with it and that every component was as much standard as possible (aim nearly achieved), that is to say components which were easily found in shops for two obvious reasons: first one because they were already made so I did not have to make them and second one because their price is generally low.
My other goal was being able to sell the robot in the market at a reasonably low price in order to be affordable for as many users as possible and thus create a powerful community around it. On the other hand, as the software, diagrams and firmware of the boards which control the components of the robot would be distributed under an open source license (not determined yet) any user could decide to create his own.
Considering all the information above, it seemed easy to start but that was not the case. How would the design be? How would I turn that design into a 3D software? What about the hardware components? Where would I find people to help me? I started to realize that finishing the project would not be easy at all because I would have to deal with significant expenses to do research, create prototypes, develop software, design and make controller boards in order to release it into the market at a price as much reduced as possible. Many designs went through my head but none was convincing enough. However, one day, while I was in a shopping centre, I laid my eyes on a vacuum cleaner (yes, that is right!) which was displayed horizontally with all its accessories and it caught my attention. I opened it and I realized it was perfect to fit all the components I had in my mind (motors, PC board, sensors, performers and even a battery). Then I thought that if it was in a vertical position with the wheels behind and if I added an idler wheel in front it would have a really attractive body and I would only have to think about the head. “Before I go on and to avoid misunderstandings, after 5 years and hundreds of changes in the 3D design, the current look of the robot is far away from that vacuum cleaner I saw in the shopping centre, actually that vacuum cleaner did not have more than 6 plastic parts and Qbo is esthetically made up of more than 30 plastic parts”.
Thanks to this unexpected discovery I could picture the body of the robot but I still had to think about the head. I was sure about two things: it would be big because with no arms or hands it would be the only element which would interact and it had to be attractive but completely different from a real human face. Personally, I do not like creating robots which look like humans (I will talk about this in future posts). Considering those aspects I had to decide what components would be part of the head since they would affect its design. It was obvious that the robot had to be able to interact with a human being so it was necessary to set microphones and web cams to receive data from the outside, some speakers to transfer information and some elements which could show some kind of emotion (the most difficult part).
Some of Qbo’s “current” skills:
Stereoscopic vision: webcam calibration (2), depth, face, objects and colours recognition, face and object tracking, map generating (under development)
Speech Recognition System
Speech Synthesis System: it offers a general framework for building speech synthesis systems. Only available in English at the moment.
Thecorpora’s API: Developed to interact with the hardware components of the robot and third parties’ software.
WEB control panel: the robot is accessible through web explorer.
Internet connection through a WIFI controller placed in the head. Real-time software and firmware update.
Obstacles: the robot avoids crashes and falls thanks to ultrasound sensors.
Autocharging: auto-charge battery (testing and developing phase)