Hexapod MKIII

Maybe in next years robots like this hexapod will be the favourite Christmas toy (But probably the video consoles will remain being the Kings)

More information in the official project web page

Cólera

[For English version see below]

Una de las cosas que más me gustan de mi lengua materna es su flexibilidad para con las palabras y su semántica. Como la palabra cojones. Depende de si es uno, dos o tres tenemos incredulidad, valor o desprecio.

Además de la gran variedad de palabras malsonantes de las que disponemos para catalogar todo aquello que no se ajusta a nuestra particular visión del mundo. En definitiva, que el Castellano (o Español, según a quien preguntes) ha evolucionado a la medida de España (o Ibiza y alrededores, según a quien preguntes).

Nuestra lengua es fiel reflejo de nuestra identidad como pueblo.

Y enredando por la red encontré este corto [Cólera] que a mi pesar juega tan bien con el doble significado de las palabras como con nuestra identidad como nación.

Aunque a mi, casi que me ha gustado más el “Como se hizo“, otro fiel reflejo de mi España que me ha hecho recordar muchas de las cosas que se echan de menos a la hora del Lunch

English

One of the things I like most of my mother language is both the word and semantic flexibility. Like the word cojones (balls, the genitals). Depends of the quantity: one, two or three, you are expressing incredulity, courage or contempt.

Moreover, we have thousand of swearing words to express our feelings about how we see the world. I mean, the Spanish (or Castilian, depends who you ask) has evolved according to Ibiza (or Spain, depends who you ask)

My language is a loyal reflect of our identity as nation

So, looking around the Internet I found [Cólera], a short film that plays both with the meaning of the words and our identity as nation (In this case, Cólera means anger and cholera)

Personally, I prefer the “making of”. It made me remember things I miss from my culture, as the “lunch”.

 

BioInspired Robotics: Cockroach

English

Nature is the biggest (and the best) engineer I’ve never known, its method formally called evolution (or trial and error) has demonstrated to be more effective that any other technique.

It is just amazing… Take a look to this TED Talk and see how cockroaches behave and how we can use this knowledge with robots :-D

Español

La naturaleza es el mejor ingeniero que jamás he conocido. Gusta de utiliza el método que llamamos evolución (que no deja de ser un “ensayo y error”) para, con el tiempo y una caña, crear los más fascinantes modelos… Ha demostrado ser la mejor técnica que un ingeniero puede usar.

Os dejo un vídeo en el que se muestran algunas de las características de las cucarachas (esos abominables insectos) y de como se puede sacar provechos de su diseño para crear robots. (En el momento de publicar la entrada aún no había subtítulos en castellano :-( )

Reconstruyendo Castillos

Terraza trasera de la torre del homenaje

Terraza trasera de la torre del homenaje

A veces los fines de semana parecen no prometer nada especial más allá del merecido descanso. Y resulta que te levantas y sin saber como ni porqué te encuentras frente al armario de “las cosas que nunca se sacan“, de donde por supuesto terminas sacando algo. En este caso una caja con todas las piezas de EXIN Castillos que aún conservo.

Y poco a poco, pieza a pieza… terminas reconstruyendo un castillo medieval inspirado en unas ruinas que casi me conozco de memoria. Echad un vistazo a ver si os gusta

[Re]Descubre Cosmos

CosmosHace ya más de 20 años que Carl Sagan se coló en casa de mis padres. Lo hizo en forma de libro y se hacía acompañar de trece cintas de VHS como escuderas. Por aquel entonces yo era joven e influenciable (ahora soy menos joven) y devoré aquellas cintas de vídeo (figuradamente, claro está). Estaba enamorado de la astronomía y aquella serie de documentales me abrió un universo enorme y maravilloso.

Luego desvié mi camino y me hice informático… que se la va a hacer.

Aunque desafortunadamente el gran Carl Sagan falleció en 1996, muchos ‘fans’ suyos han permanecido en la sombra para, ahora que todos sabemos de todo y nos miramos el ombligo maravillados, colarse de nuevo en nuestra casa (sin libro ni VHS) para hacernos, una vez más, descubrir el maravilloso ‘punto azul’ en el que vivimos.

Todo esto para decir que en Marzo comienza la emisión de 13 capítulos de lo que han decidido llamar “la continuación de Cosmos”. Por suerte su viuda y un antiguo alumno están metidos en la redacción de los guiones, así que tengo esperanza de poder quedarme sin respiración delante de la pantalla, como hice 20 años atrás.

Aunque parece una película de esas modernas con presupuesto desmesurado y guión ridículo, os aseguro que es un documental. Lo que pasa es que los tiempos cambian…

Nuevo número de Futuroscopias

Futuroscopias 4Hace ya casi un año os hablé de una revista de ciencia ficción en castellano: Futuroscopias. Pues bien, acaba de salir un nuevo número. Yo ya lo tengo en el Kindle a espera de tener un par de ratos tranquilos para disfrutar de una buena lectura.

Para abrir boca y animar a vuestras mentes inquietas a leer la revista, os dejo con un fragmento de la editorial: “Las distopías cotidianas

Amanece. Suena el despertador en tu smartphone e inmediatamente el sistema publica un mensaje en la red social de moda avisando de tu disponibilidad para interactuar. Tus hábitos son compartidos y se activan los mecanismos mercantiles asociados.

Una ducha rápida mientras escuchas música con tu sistema de streaming preferido. La aplicación te ofrece la música que cree que puede gustarte. No se lo has pedido, pero tus datos interesan a los ejecutivos de las grandes discográficas y ellos quieren darte la mejor oferta. Puede que hoy no compres ninguna canción, pero algún día pasarás de cliente potencial a cliente de facto.

Mientras tomas un café miras el periódico en internet y un cartel te avisa del uso de cookies en tu navegador. Nadie te avisa de los usos que van a dar a los datos recopilados durante la navegación.

Después de abrigarte dejas tu hogar y caminas hacia el suburbano. Bajas las escaleras…

Te recomiendo que descargues la revista y continúes leyendo. Toda una nota de reflexión sobre lo que somos y como vivimos. Lamentablemente, eso no es ciencia ficción…

Los amores de Brunilda: Un regalo en forma de 8 bits

brunilda_webCasi de casualidad encontré hace unos días que la gente de Retroworks nos ha traído para las vacaciones de Navidad el estreno mundial de “Los amores de Brunilda“: Un juegazo de 8 bits para el Spectrum 128k.

Y es que en este año en el que Sony y Microsoft nos han presentado la PS4 y la XBox One, en el que aparecen los televisores 4K, cuando ya tenemos en las tiendas el iPhone 5S, los primeros relojes con Android salen de la nada y Apple nos maravilla con un ordenador turbina, un equipo de programadores y aficionados españoles presentan un juego para un ordenador que dejó de venderse hace ya unos cuantos añitos.

¿Qué pasa?, ¿es que en España se sigue anclado en los años 80?. No, en este caso no (No me tiréis de la lengua….). Los Amores de Brunilda es una video-aventura que se lleva gestando tiempo (el proyecto nació hace unos años como aventura conversacional) y que demuestra que la Edad de Oro del Software Español tiene como legado un gran número de aficionados y profesionales cuyas raíces tecnológicas nacen en aquella mágica época en la que se empleaban instrucciones de 8 bits para crear maravillas del entretenimiento.

Y es que Los Amores de Brunilda hace honor a los títulos de los 80 y hace sonrojar a los “juegazos” actuales. He pasado 3 días entretenido cual niño que regresa del cole y merienda su bocata de nocilla mientras espera ansioso que termine de cargar el juego. Gráficos sencillos y música estridente para obligar a nuestras neuronas a poner cara a los personajes de una historia sencilla y atractiva.

Es cierto que en estos casos el elemento nostálgico pesa mucho. Pero pocos juegos desde los 32 bits me han hecho pasar un rato tan bueno. Y procurando ser justos, lo situaría entre las mejores aventuras vividas en un procesador de 8 bits.

Sea como fuere, si tu también disfrutaste de aquellas tardes mágicas frente a monitores de fósforo verde, si peleaste con tu hermano o tus padres por cinco minutos más y comentaste tus hazañas al día siguiente con los amigos del colegio, deja que la nostalgia te llene un momento, descarga un emulador de Spectrum y echa una partida a Los Amores de Brunilda. Para eso están las vacaciones, ¿o no?.

Y si el juego te gusta y lo disfrutas, recuerda que nunca está de más valorar el esfuerzo de la gente, bien como felicitación en su blog o en forma de donación.

Por cierto, esta es la primera vez que echo una partida al Spectrum, porque yo era (y soy) del Amstrad :-)

Entrevista para la revista divulgativa de la UNED y de la UPM

El equipo de e-pucks utilizados en los experimentos

El equipo de e-pucks utilizados en los experimentos

La robótica colaborativa es una de las áreas de esta disciplina que más disfruto. No en vano, mi proyecto fin de Máster se centraba en afrontar el reto de hacer colaborar robots sin apenas comunicaciones entre ellos.

Proyecto en el que trabajé con Félix y Javi, y del cual salieron trabajos complementarios que me he dado cuenta que debería ampliar y documentar decentemente.

Hace poco me hicieron una entrevista para la revista de divulgación científica de la UNED en la que me preguntaron por mi trabajo en robótica colaborativa. Os recomiendo que le echéis un vistazo, la podéis encontrar en la revista de la UNED y en el canal divulgativo de la UPM (versión en inglés) (más completa y con comentarios tanto de Javi como de Félix)

Actualización: Según me comenta Laura Chaparro, autora del artículo, los siguientes medios de comunicación también se han hecho eco de la noticia:

Animals

gato-app[English] Some time ago I had the opportunity to collaborate with GatoBlack Studios into the development of a small application for children: Animals. The application provides a simple interface with cute little animals that reproduce their respective sounds when you touch them.

Simple? yes. No adds, no danger buttons, no settings… leave your mobile phone into the children hands and do not worry about inappropriate content, just sounds.

By the way, check the GatoBlack Studio website, the new web is amazing.

[Español] Hace algún tiempo tuve la oportunidad de colaborar con la gente de GatoBlack Studios en un pequeño proyecto orientado a los más pequeños: Animals. La aplicación es simple a más no poder. Ofrece unos bonitos dibujos de pequeños animales que reproducen sonidos cuando los tocas.

Sin anuncios, sin botones peligrosos, sin opciones de configuración… así puedes dejar tu teléfono o tables a los niños sin preocuparte por uso el posible contenido inadecuado.

Por cierto, echa un vistazo al sitio de GatoBlack Studios, el nuevo diseño es fantástico

Debugging OpenCV images into a Qt Application

Selection_001Getting right to the point: Qt has his own event loop control. So, if you want to use the OpenCV functions to show images you will discover that they do not change. The solution is to do the debugging inside the Qt loop. How?, creating a dialog and drawing the images inside. Lets see how to do it

CVDebugSystem

This class will take control of all debug windows (yes, we want to have more than one debugging window). When we want to debug the image we are processing, we only need to call to one method of this class passing the window name (like in OpenCV imshow function) and the image we want to show.

Probably, we want to debug images from different parts of our code, and create a debug object each time we want to debug could be a problem (after debug, maybe we forget to delete this objects and the code keeps “dirty”). To solve this, we will declare CVDebugSystem as a Singleton. Now, we do not need to create CVDebugSystem objects, the class take care of all the windows and debug a image is as simple as call the method:

CVDebugSystem::getInstance().showimg("Title of debug window", image_to_debug);

The different windows are stored into a QHash list, using the window title as key.

cvdebugsystem.h

#ifndef CVDEBUGSYSTEM_H
#define CVDEBUGSYSTEM_H

#include <QHash>
#include "cvdebugwindow.h"

class CVDebugSystem
{
public:
    static CVDebugSystem &getInstance()
    {
        if(pInstance_ == NULL)
        {
            pInstance_ = new CVDebugSystem();
            atexit(&DestroySingleton);    // At exit, destroy the singleton
        }
        return *pInstance_;
    }
    ~CVDebugSystem();

private:
    // Singleton
    static CVDebugSystem* pInstance_;

    // Delete the singleton instance
    static void DestroySingleton(){
        if(pInstance_ != NULL) delete pInstance_;
    }

    // Private to ensure single instance
    CVDebugSystem();
    QHash<QString, CVDebugWindow* > mWindows;

public:
    void showimg(QString window, cv::Mat *img);
    void showimg(QString window, cv::Mat img);
};

#endif // CVDEBUGSYSTEM_H

cvdebugsystem.cpp

#include "cvdebugsystem.h"
#include <QImage>

CVDebugSystem* CVDebugSystem::pInstance_ = NULL;

CVDebugSystem::CVDebugSystem()
{
    mWindows.clear();
}

CVDebugSystem::~CVDebugSystem()
{
    QHash<QString, CVDebugWindow* >::const_iterator i = mWindows.constBegin();
     while (i != mWindows.constEnd()) {
         delete i.value();
         ++i;
     }
}

void CVDebugSystem::showimg(QString window, cv::Mat *img)
{
    if (!mWindows.contains(window))
    {
        CVDebugWindow *win = new CVDebugWindow();
        mWindows.insert(window, win);
    }
    mWindows[window]->setImage(img);
    mWindows[window]->setWindowTitle(window);
    mWindows[window]->show();
}

void CVDebugSystem::showimg(QString window, cv::Mat img)
{
    this->showimg(window, &img);
}

CVDebugWindow

This is the class that inherits from QDialog. It only has a QLabel where we draw the image. In the code attached I have included some more widgets to help me, like a “Fit the image to the window” or scale the OpenCV image to make it more clear. Usually I use the UI files, if you prefer to code the widgets it is also possible

cvdebugwindow.h

#ifndef CVDEBUGWINDOW_H
#define CVDEBUGWINDOW_H

#include <QDialog>
#include <opencv2/core/core.hpp>

namespace Ui {
class CVDebugWindow;
}

class CVDebugWindow : public QDialog
{
Q_OBJECT

public:
explicit CVDebugWindow(QWidget *parent = 0);
void setImage(cv::Mat *image);
~CVDebugWindow();

private Q_SLOTS:
void on_fitButton_toggled(bool checked);

private:
Ui::CVDebugWindow *ui;
};

#endif // CVDEBUGWINDOW_H

cvdebugwindow.cpp

#include "cvdebugwindow.h"
#include "ui_cvdebugwindow.h"

CVDebugWindow::CVDebugWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::CVDebugWindow)
{
ui->setupUi(this);
ui->label->setAlignment(Qt::AlignCenter | Qt::AlignHCenter);
}

CVDebugWindow::~CVDebugWindow()
{
delete ui;
}

void CVDebugWindow::setImage(cv::Mat *image)
{
QImage::Format format;
if (image->channels() == 1) format = QImage::Format_Mono;
else                        format = QImage::Format_RGB888;

QImage  img = QImage((const unsigned char*)(image->data),
image->cols,
image->rows,
image->step,
format).rgbSwapped();

QImage aux;
if (ui->fitButton->isChecked())
{
aux = img.scaled(ui->label->size());
}
else
{
if (ui->scaleFactor->value() != 1)
{
aux = img.scaled(img.size()*ui->scaleFactor->value());
}
else
aux = img;
}

ui->label->setPixmap(QPixmap::fromImage(aux));
}

void CVDebugWindow::on_fitButton_toggled(bool checked)
{
if (checked) ui->scaleFactor->setEnabled(false);
else ui->scaleFactor->setEnabled(true);
}

In GitHub you can find the repository with the code. Improvements are welcome.