Problema sound() GNU Octave

08/12/2010

En ese artículo posteare la solución del problema relacionado con la función sound() de GNU Octave.

El problema es que la funcion no reproduce ningún sonido en algunos ordenadores. para solucionarlo simplemente tenemos que instalar el paquete sox con nuestro gestor de paquetes,

sudo apt-get install sox

reiniciamos y ya funcionara.

 

 


Como añadir colores en la Terminal de Mac OS X

19/09/2010

Pongo la solución de ese problemilla ya que así me acordaré si tengo que volver ha hacerlo algún día.

STEP 1 – Abrir con un editor de textos el archivo /etc/bashrc como root. (Yo utilizo el editor de texto TextMate).

STEP 2 – agregar las siguientes lineas en el archivo.

export TERM=xterm-color
export CLICOLOR=1
export LSCOLORS=ExFxCxDxBxegedabagacad

Reseteamos la terminal cerrandola y volviendola a abrir y ya tenemos colores en nuestras carpetas y archivos.

Saludos y gracias.


Método: Pasar Grayscale IplImage a QImage

17/04/2009

Recientemente, mi proyecto ha encontrado una pared en su camino. Tenía que pasar una “IplImage” en escala de grises a una “QImage”.

Encontré esa página, donde había un completo método para cambiar de formato las imágenes.

OpenCV 中的图像结构IPLImage 和 Qt中QImage之间的转换源代码

El problema era que, cuando tenía que pasar la imagen de un solo canal a QImage. Por un motivo desconocido, no me aceptaba la imagen y salía un “Runtime Error”.

Aquí dejo el método que he utilizado para pasar las imágenes en escala de grises a QImage. No está comentado, pero es muy parecido al del link anterior.

Nota: Solo trata las imágenes en IPL_DEPTH_8U

void Webcam::getQtFrame(IplImage* parFrame)

{

unsigned char *qImageBuffer = NULL;

int width = parFrame->width;

int widthStep = parFrame->widthStep;

int height = parFrame->height;

QImage qImage;

QVector<QRgb> vcolorTable;

switch(parFrame->depth){

case IPL_DEPTH_8U:

if (parFrame->nChannels == 1) {

qImageBuffer = (unsigned char *) malloc(width*height*4*sizeof(unsigned char));

unsigned char *QImagePtr = qImageBuffer;

const unsigned char *iplImagePtr = (const unsigned char *) parFrame->imageData;

for (int y = 0; y < height; y++){

for (int x = 0; x < width; x++){

// We cannot help but copy manually.

QImagePtr[0] = iplImagePtr[0];

QImagePtr[1] = iplImagePtr[0];

QImagePtr[2] = iplImagePtr[0];

QImagePtr[3] = 0;

QImagePtr += 4;

iplImagePtr += 1;

}

iplImagePtr += widthStep-1*width;

}

}

else if (parFrame->nChannels == 3) {

qImageBuffer = (unsigned char *) malloc(width*height*4*sizeof(unsigned char));

unsigned char *QImagePtr = qImageBuffer;

const unsigned char *iplImagePtr = (const unsigned char *) parFrame->imageData;

for (int y = 0; y < height; y++){

for (int x = 0; x < width; x++){

// We cannot help but copy manually.

QImagePtr[0] = iplImagePtr[0];

QImagePtr[1] = iplImagePtr[1];

QImagePtr[2] = iplImagePtr[2];

QImagePtr[3] = 0;

QImagePtr += 4;

iplImagePtr += 3;

}

iplImagePtr += widthStep-3*width;

}

}

break;

}

qImage = QImage(qImageBuffer, width, height, QImage::Format_RGB32);

emit renderedImage(qImage);

}

Simplemente he cogido el método para pasar los 3 canales y he copiado el mismo canal en los otros dos restantes.

Sé que es un poco chapuza y poco optimo, así que si alguien tiene alguna idea será bien recibida.

Espero que sea de ayuda,

Ionthas.


Proyecto: M2-Jolnir ALPHA

30/03/2009

Tengo el gusto de presentaros mi nuevo mini-robot. La verdad es que no tiene nombre  pero el proyecto se llama M2-Jolnir así que de momento lo llamare igual.

M2Jolnir - Comparación

M2Jolnir - Comparación

Las motivaciones del proyecto son:

En primer lugar, me ha fascinado la inteligencia distribuida, por lo que tengo pensado hacer más de uno cuando este perfeccionado.

En segundo lugar al querer hacer un sistema de inteligencia distribuida el robot no podía ser muy grande. Eso me obligaba a utilizar formato SMD aunque, la verdad, tenía muchas ganas de ello, ya que eso de miniaturizar las cosas me ha fascinado desde el primer momento.

Finalmente, quería tener un robot diseñado por mí. Después de 8 meses ya estoy harto del “SkyBot”. Aunque como puse en el primer post del blog, me ha ayudado muchísimo a aprender.

M2-Jolnir cuenta con mi placa “ionBoard” perfeccionada y con una placa controladora de motores llamada “ionMotors”, controlada por el puente en H doble TB6612FNG.

ionBoard - Top

ionBoard - Top

ionBoard - Bottom

ionBoard - Bottom

ionMotors

ionMotors

Como podéis ver el pequeño cuenta con un zócalo para insertar un módulo “Xbee”, eso me permite poder mandarle información desde el PC o viceversa.

Para terminar, tengo pensado ponerle 3 sensores de infrarrojos delanteros, para empezar a programar alguna aplicación en modo autónomo.

Dentro de poco videos del pequeñito en funcionamiento.

Saludos y gracias,

Ionthas


Proyecto: ionBoard – Alpha

12/02/2009


Os presento mi nueva creación. Si, una plaquita de pruebas con un PIC16F88.

La utilizaré como placa de pruebas aunque su propósito inicial era controlar 3 servos para una pata de un hexápodo.

Pongo sus características a continuación:

ionBoard – Alpha

Microcontrolador: 16F88

XTAL: 20Mhz

ICSP: Si

RS232: Si

I2C: Si

Puertos Analógicos: 5

Servos: 4

Otros:

-          Botón Reset

-          LED

ionboard-apuntes

ionBoard - Apuntes

ionBoard - Funcionando

ionBoard - Funcionando

Ahora estoy diseñando la PCB para hacerla más profesional.

Otro punto que tengo que añadir es que, la verdad, los puentes y pistas pueden ser muy chapuza, pero ver lo que uno mismo puede hacer con 4 cables es una grata recompensa. :)

Iré posteando mis avances con mi plaquita.

Saludos, Ionthas.


Tutorial: Hello World OpenCV

05/02/2009

Voy ha hacer un pequeño tutorial para aquellos que quieran empezar con openCV y C++.

Previamente os tendríais que mirar el siguiente enlace donde se explica cómo compilar aplicaciones OpenCV con Dev-C++:

http://ionthas.wordpress.com/2008/11/18/howto-compilar-opencv-en-dev-c/

Ahora que ya podemos compilar una aplicación OpenCV vamos a por el código:


#include <cv.h>

#include <highgui.h>


int main(int argc, char** argv)

{

// Crea una ventana llamada Original Image con un tamaño predeterminado.

cvNamedWindow(“Original Image”,
CV_WINDOW_AUTOSIZE);

// Crea la conexion con la Webcam.

CvCapture* capture = cvCreateCameraCapture(0);

// Variable donde se almazenara el frame sacado de la webcam.

IplImage* originalImg;

// Hago que el ancho del capture sea de 320px con eso la altura se adaptara.

if(cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH,320))

while(true) {

// Pongo el frame capturado de “capture” dentro de la imagen originalImg.

originalImg = cvQueryFrame(capture);

if(!originalImg) break;

// Hago que se vea el frame dentro de la ventana “Original Image”.

cvShowImage(“Original Image”, originalImg);

// Espero a que me pulsen el ESC para salir del bucle infinito.

char c = cvWaitKey(10);

if( c == 27 ) break;

}

// Libera la memoria utilizada por la variable capture.

cvReleaseCapture(&capture);

// Destruye la ventana “Original Image”.

cvDestroyWindow(“Original Image”);

}


PD. El código esta explicado en los comentarios.

Aquí una imagen y el archivo del programa:

HelloWorld OpenCV en funcionamiento

HelloWorld OpenCV en funcionamiento

Código de la aplicación: HelloWorldOpenCV

Saludos, Ionthas.


Miscelánea: Chiste sobre programadores

19/01/2009

Aquí va un chiste sobre los programadores, sé que no es robótica pero nunca está de más reír un rato.

broma-informatica

Esa imagen la he encontrado con un fantástico complemento para Firefox llamado StumbleUpon aquí va el enlace para los que quieran probarlo.

http://www.stumbleupon.com/

Saludos, ionthas.


Tutorial: Compilar aplicaciones QT en Dev-C++

18/01/2009

Antes de empezar yo solo explicaré lo referente a la parte del compilador, los que quieran empezar desde el principio que se miren esos enlaces:

http://es.wikibooks.org/wiki/Programaci%C3%B3n_con_Qt4

http://sector.ynet.sk/qt4-tutorial/preparations.html

El siguiente tutorial lo hago para recordarme como compilar un proyecto QT en Dev-C++ ya que no es tan sencillo como en OpenCV.

En primer lugar tenemos que añadir los directorios QT en el compilador o en el proyecto. (Yo los pondré en el compilador ya que así no tendré que preocuparme más).

C:\Qt\4.4.3\lib

C:\Qt\4.4.3\include

En segundo lugar tenemos que abrir una consola del sistema. (Ejecutar… \ cmd), nos posicionamos en el directorio donde tenemos el proyecto y introducimos el comando qmake -project, ese comando creara el archivo .pro del proyecto.

Seguidamente introducimos el comando qmake, ese comando entre otras cosas creara el archivo filemake que tendremos que linkear al compilador.


tutorial-qt-2


Para linkear el archivo filemake en el compilador vamos a Project\Project Options\makefile y seleccionamos el makefile de nuestro proyecto.


tutorial-qt-3


Ahora ya podemos compilar el programa pulsando F9. Si os salen esos mensajes y no pasa nada todo va bien.


tutorial-qt-1

Ahora vamos al directorio del proyecto y dentro de la carpeta debug se tendría que haber creado el .exe.


tutorial-qt-4

TODO LISTO!

Saludos, Ionthas.



Tutorial: Compilar aplicaciones OpenCV en Dev-C++

18/11/2008

Antes de nada tienes que instalar OpenCV. Lo puedes descargar de aquí.

Una vez tengas instalado OpenCV abre Dev-C++ y dentro del menú “Tools” selecciona “Compiler Options”.

En la pestaña “Compiler”, selecciona “add these commands to the linker command line” y introduce los siguientes parámetros:

-lhighgui –lcv –lcxcore -lcvaux

Ahora dentro de la pestaña “Directories” y dentro de “C Includes” tienes que poner las siguientes rutas hacia los includes:

C:\Archivos de programa\OpenCV\cxcore\include

C:\Archivos de programa\OpenCV\cv\include

C:\Archivos de programa\OpenCV\otherlibs\highgui

C:\Archivos de programa\OpenCV\cvaux\include

Image Hosted by ImageShack.us

Seguidamente tenemos que poner las mismas rutas en la pestaña “C++ Includes”.

Image Hosted by ImageShack.us

En la pestaña “Libraries” ponemos la ruta:

C:\Archivos de programa\OpenCV\lib

Finalmente en las variables de entorno “PATH” y “path” añadimos:

;C:\Archivos de programa\OpenCV\bin

IMPORTANTE: No os dejéis el punto y coma delante.

ERRORES:

Es posible que os compile todo bien y os de un error de Windows. Aseguraos que tenéis en las opciones del compilador la flag –lhighgui la primera.

Después de todos los pasos reiniciad.

En teoría ya tendría que funcionar.

Saludos.


Robot: SkyBot

16/11/2008

La primera entrada de mi blog la voy a dedicar a ese gran robot educativo.

Desde que me apunte en el taller de robótica de la CP2008, he pasado por muchos problemas gracias a él, pero la verdad es que he aprendido muchísimo. Especialmente me dio mucho dolor de cabeza comprender su electrónica.

La primera aplicación que hice para el SkyBot era un seguidor de líneas.

Después me aficioné a programar visión artificial por lo que en mi casa le hice unas “pequeñas” modificaciones. Una webcam y una linterna de LED’s. Esa última para que explorara en lugares oscuros.

Aquí dejo una foto de mi SkyBot para los amigos ionBot:

ionBot

SkyBot modificado

Esa es la página con toda la información sobre SkyBot:

http://www.iearobotics.com/wiki/index.php?title=Skybot

Gracias a los compañeros de iearobotics que me dieron alas.

Saludos.


Seguir

Get every new post delivered to your Inbox.