Aplicaciones portables entre PSP y GNU/Linux con SDL

— [ edit | raw ] migrated from node/746
Aquí estamos de nuevo para dar un poco de caña a nuestras PSP's, ya sabemos cómo desarrollar aplicaciones multimedia para la consola, ahora vamos a dar dos pasos más: las aplicaciones usarán SDL y serán portables entre nuestro GNU/Linux y nuestra PSP.

Intro PSP (pseudo demoscene) (a.k.a respuesta a nuestro Int-0)

— [ edit | raw ] migrated from node/745
Hola a todos, en respuesta a Int-0, que hace poco nos dejó un pequeño tuto sobre intros multimedia (en concreto para la PSP), he hecho una pequeña intrillo.

Linus Tolvards: eres "mu" tonto (tontismo).

— [ edit | raw ] migrated from node/744
Yo, personalmente, brue, si hace falta doy mis datos de forma privada a quien los quiera, pienso que Linus Tolvards es tonto. Creo que se cree el rey del software libre cuando es un "cantamañanas". Espero que la gente despierte pronto y que se pase la "linuxmanía" porque, con perdón, "manda huevos" que clase de incultura de masas sigue a un tipo como este. Este personajillo, que no le hace ninguna gracia por lo que sé al señor Stallman (que es alguien que si tiene voz y voto en esto de GNU), hizo un comentario del tipo siguiente:

En busca de la solución definitiva para la autenticación

— [ edit | raw ] migrated from node/743

Los usuarios de cualquier variante de GNU o de Unix buscan desde siempre el Santo Grial de la administración de sistemas: autenticación flexible y centralizada, backup flexible y sencillo, homes compartidos facilitos. En esta receta nos ocupamos del primer ingrediente, la autenticación.

Software para electrónicos: kicad

— [ edit | raw ] migrated from node/742
Un nuevo entorno de desarrollo electrónico libre, multiplataforma y con muy buena pinta: kicad

Introducción

kicad es un entorno de desarrollo para electrónicos totalmente libre, multiplataforma y (en apariencia) fácil de utilizar y versátil. Dispone de los siguientes módulos:
  • Kicad: El gestor de proyectos en sí.
  • Eeschema: Programa para la captura de esquemas.
  • PcbNew: Para la creación de los pcbs.
  • Gerview: Visor de archivos gerber.
  • Cvpcb: Programa para la selección de huellas para los componentes.
Su instalación en Debian es muy sencilla con el uso de APT. Actualmente me encuentro evaluando el paquete de la mejor forma posible: Migrando un proyecto electrónico a ésta suite. En principio, una vez que te vas acostumbrando, es fácil e intuitivo. La creación de librerías es rápida y la integración entre todas las herramientas no deja mucho que desear. Estoy haciendo una librería con componentes propios y existen otras librerías con componentes y sus huellas exportados de las librerías de eagle. Para tenerlo todo mas a mano, he subido al repo público de Arco las librerías exportadas que estoy utilizando y las que estoy haciendo yo. Para descargarlas, puedes utilizar subversion.

Para finalizar...

De momento seguiré haciendo pruebas e intentaré llevar a buen puerto el proyecto en el que estoy. No creo que tarde mas de dos semanas desde hoy en acabar la captura e intentar la realización del PCB. En cuanto lo tenga todo, prometo escribir, contando, aunque sea un poco por encima, como empezar con éste software...

Python + LIRC

— [ edit | raw ] migrated from node/740

Se trata de un ejemplo mínimo de cómo hacer un cliente de LIRC en Python usando pyLirc.

LIRC con la WinFast TV 2000 en Debian

— [ edit | raw ] migrated from node/738

Cómo configurar y usar el control remoto de la Leadtek Winfast TV 2000 en un sistema Debian GNU/Linux.

Instalar GNU/Linux+Cell SDK 2.1 en PlayStation 3

— [ edit | raw ] migrated from node/739
Esta receta tiene como objetivo proporcionar una guía para la instalación de una distribución GNU/Linux junto con el SDK para el procesador Cell en PlayStation 3.

Introducción

PlayStation 3 tiene como corazón el procesador Cell. Esta revolución tecnológica fue desarrollada inicialmente para PlayStation 3 por Sony Computer Entertainment, Toshiba e IBM. Sin embargo, el verdadero objetivo de este proyecto es la obtención de un procesador con una gran potencia de cálculo a un bajo coste.

Arquitectura del Cell

Cell es una arquitectura orientada a la computación distribuida de alto rendimiento. De acuerdo con IBM, la potencia ofrecida por este procesador es de un orden de magnitud mayor que la ofrecida por los procesadores actuales. En comparación con las unidades de procesamiento gráfico (GPUs), Cell supone una importante ventaja al tratarse de una herramienta de propósito general que se puede utilizar para una gran variedad de tareas. Una de las principales características de la arquitectura Cell es el escalado a nivel de procesador. Sin embargo, un único chip proporciona una gran cantidad de cálculo por sí mismo (256 GFLOPS a 4 GHz). La arquitectura está formada por los siguientes elementos:
  • 1 PPE (Power Processor Element).
  • 8 SPEs (Synergistic Processor Elements).
  • EIB (bus de interconexión).
  • DMAC (controlador de acceso a memoria).
  • 2 Rambus XDR memory controllers (controladores de memoria).
  • Rambus FlexIO interface (interfaz de entrada/salida).
El corazón del procesador es el PPE, un microprocesador convencional cuya principal tarea (aunque puede utilizarse con otros propósitos) es la de distribuir el trabajo entre los SPEs, encargados de efectuar la mayor parte de los cálculos de una aplicación. A pesar de que puede funcionar a una velocidad mayor, el chip Cell utilizado en PlayStation 3 corre a 3,2 GHz y tiene 7 SPEs disponibles. El PPE es un procesador de 64 bits con una Power Architecture. Este tipo de procesador no se utiliza en los computadores personales y es capaz de ejecutar binarios de POWER y PowerPC. El SPE se puede considerar como un procesador vectorial independiente de 128 bits. Cada SPE es capaz de ejecutar 4 operaciones de 32 bits por ciclo. Para obtener ventajas en el desarrollo de aplicaciones en el Cell, los programas necesitan ser vectorizados. Existen muchas más decisiones de diseño en la arquitectura Cell que la hacen muy diferente a las arquitecturas convencionales utilizadas en los computadores personales, proporcionando una revolución y no un simple paso más en la evolución [Blachford_Cell_v2].

Ingredientes

  • 1 PlayStation 3 con una versión del firmware igual o superior a la 1.6.
  • 1 CD o DVD vírgenes para grabar el sistema operativo a instalar.
  • 1 CD vírgen.
  • 1 pendrive.
  • 1 teclado y un ratón con conexión USB.
  • 1 conexión cableada a Internet.
Actualmente, existen distintas distribuciones que pueden instalarse en PlayStation3, como por ejemplo Yellow Dog Linux, Helios Linux, Fedora Core 6, Ubuntu, Gentoo, o Debian, entre otras. La distribución en cuestión a instalar se deja a gusto del lector, pero es imprescindible descargar una ISO para una arquitectura PowerPC. En mi caso, elegí la distribución Fedora Core 6, y descargué una ISO para grabar en un DVD. También es necesario obtener la ISO relativa al Linux add-on CD, descargando el archivo CELL-Linux-CL-20061110-ADDON.iso. Por último la herramienta más importante, el entorno de desarrollo para el Cell: SDK 2.1.

El cargador de arranque

El siguiente paso es hacerse con un gestor de arranque. La opción más directa es obtenerlo desde el Linux add-on CD. Éste se encuentra en el directorio kboot y su nombre es otheros.bld. En el pendrive hay que crear un directorio llamado PS3, y dentro de éste otro llamado otheros, en el cual hay que copiar el cargador de arranque (otheros.bld) Llegados a este punto, se ha de disponer de los siguientes elementos:
  • 1 CD o DVD con la distribución a instalar.
  • 1 Linux add-on CD.
  • 1 dispositivo de arranque (pendrive) con el cargador de arranque.
  • 1 CD con la ISO del SDK.
  • 1 PlayStation 3 con una versión del firmware igual o superior a la 1.6 y una conexión cableada a Internet.

Instalación

En este momento, es importante resaltar que es necesario formatear el disco duro de PlayStation 3, por lo que se recomienda hacer una copia de seguridad. Sin embargo, los ajustes personales no se perderán. Para formatear al sistema hay que acceder al menú de PlayStation 3 Ajustes -> Ajustes del sistema -> Herramienta de formateo -> Formatear disco duro. La herramienta de particionado ofrece distintas opciones. En mi caso, me dio la opción de hacer dos particiones: una de 10 GB y otra de 50 GB. Yo elegí asignar 10 GB al sistema operativo a instalar y 50 GB al sistema operativo de PlayStation 3 (GameOS). Para instalar el gestor de arranque, es necesario conectar el pendrive y acceder al menú Ajustes -> Ajustes del sistema -> Instalar otro sistema operativo. El propio sistema localizará el archivo otheros.bld. Una vez seguidas estas indicaciones, el siguiente paso es cambiar el sistema operativo por defecto y reiniciar. Para ello, se ha de acceder al menú Ajustes -> Ajustes del sistema -> Sistema predeterminado, y elegir la opción Otro sistema operativo. En este punto, el proceso de instalación diverge en función del sistema operativo elegido. En caso de instalar Fedora Core 6, y después de la aparición de la orden kboot, el comando a introducir es install-fc sda. Posteriormente, el sistema pide el DVD de instalación y, eventualmente, el Linux add-on CD para la instalación del sistema operativo. Una vez instalado el sistema operativo, el comando boot-game-os permite arrancar PlayStation 3 con el sistema operativo de los juegos. En caso de utilizar una televisión con certificación HD Ready o FullHD se puede llevar a cabo el proceso de instalación a través de la televisión sin dañarnos la vista. Sin embargo, si se utiliza una televisión con definición estándar, resulta muy aconsejable continuar con el proceso de instalación de manera remota a través de ssh (en caso de seguir el proceso desde la TV, reducir el contraste puede ayudar). La instalación es una instalación tradicional, aunque algo diferente en lo relativo al ajuste del modo de vídeo. En el caso de Fedora Core 6, el comando ps3videomode permite ajustar la resolución y el escaneado de la salida de vídeo para un ajuste óptimo en la televisión (o monitor).

Instalación del SDK 2.1

En este paso se asume la instalación de todas aquellas herramientas necesarias para la instalación/construcción de las bibliotecas de desarrollo del SDK 2.1. En caso de instalar Fedora Core 6, se puede utilizar la herramienta yum para la instalación de todas estas herramientas [PS3_FedoraCore6]. El proceso es sencillo:
# cd path_to_iso_sdk_directory
# mkdir -p /mnt/cellsdk
# mount -o loop SDK21.iso /mnt/cellsdk
# cd /mnt/cellsdk/software
La instalación del SDK se puede efectuar con o sin simulador:
# ./cellsdk install [--nosim]
Este proceso implica la descarga de ciertos archivos. En caso de que haya algún problema en esta descarga, la solución consiste en volver a ejecutar este último comando. Las bibliotecas de desarrollo no vienen como archivos ejecutables, por lo que es necesario generarlos a partir del compilador xlc o del compilador gcc (opción por defecto):
# cd /opt/ibm/cell-sdk/prototype
# ./cellsdk build --gcc
Este proceso involucra algo de tiempo. Una vez finalizado se desmontará la imagen:
# umount /mnt/cellsdk

¿Y ahora...?

En caso de adentrarse en el desarrollo de aplicaciones para el procesador Cell, es posible sentirse abrumado por la cantidad de documentación e información existente, además del cambio que supone el tratar con una arquitectura tan distinta con la que la mayoría no solemos trabajar. Una buena referencia es el portal PS3coderz, en el cual se indexa la documentación asociada al Cell en varias secciones.

Conclusiones

Si has llegado a este punto, tienes en tu poder un sistema GNU/Linux+Cell SDK 2.1. El siguiente paso y el más importante, en caso de que te pique el gusanillo, consiste en que te familiarices con la arquitectura Cell y con sus herramientas y bibliotecas de desarrollo.

Referencias

[Blachford_Cell_v2] Análisis y explicación de la arquitectura Cell. http://www.blachford.info/computer/Cell/Cell0_v2.html [Cell_Developer's_Corner] Rincón de desarrollo para el Cell. http://www.power.org/resources/devcorner/cellcorner [PS3_Coderz] Portal de desarrollo para el procesador Cell. http://www.ps3coderz.com/ [PS3_FedoraCore6] Guía de instalación detallada de Fedora Core 6 en PlayStation 3. http://www.ps3coderz.com/index.php?option=com_content&task=view&id=73&Itemid=31

Instalar driver privativo de Nvidia con kernel Linux >= 2.6.20

— [ edit | raw ] migrated from node/737

Si tienes una tarjeta gráfica de Nvidia y usas GNU normalmente usarás los drivers privativos y gratuitos para la misma. Como sabrás, hace falta compilar el módulo “nvidia” para cada nueva versión de kernel que instales. El problema ha surgido a partir de la versión del kernel linux 2.6.20, en el que se activó algo sobre la paravirtualización que hace que la compilación del módulo nvidia falle.

Ayuda con Visión por computador

— [ edit | raw ] migrated from node/735

Reconstrucción 3D a partir de dos imágenes

Intento realizar la reconstrucción 3D a partir de la visión estereo (dos imágenes o más) he llegado a un punto en el que me he quedado atascado. A ver si alguno de ustedes me puede orientar.

Aclaraciones:

La reconstrucción 3D lo que pretende es obtener las dimensiones 3D de un objeto a partir de varias imágenes tomadas del mismo desde diferentes posiciones(mínimo dos imágenes). Para ello yo estoy utilizando dos cámaras.

Pasos que estoy siguiendo:

  1. Calibrar la cámara izquierda (Obtenemos la matriz de cámara KL)
  2. Calibrar la cámara derecha (Obtenemos la matriz de cámara KR)
  3. Sacar una imagen desde el lado izquierdo
  4. Sacar una imagen desde el lado derecho
  5. Detectar coordenadas en píxeles del objeto deseado de la imagen izquierda(mínimo 8 )
  6. Detectar las mismas coordenadas en píxeles del objeto deseado en la imagen derecha(mínimo 8 )
  7. Calcular la matriz fundamental a partir de los píxeles anteriormente calculados
    Para ello utilizo la función de OpenCV: cvFindFundamentalMatrix( points1, points2,8,0, fund_matrix); points1 corresponde a los puntos de la imagen de la izquierda, y points2 corresponde a los puntos de la imagen de la derecha, la matriz fundamental queda almacenada en fund_matrix.
  8. calcular la matriz esencial a partir de la matriz fundamental y la matriz de cámara de ambas cámaras
    De la siguiente forma: ME=KLT x F x KR Siendo ME la matriz esencial. KLT la matriz transpuesta de KL(matriz de cámara izquierda). KR matriz de cámara derecha. F la matriz fundamental.
  9. calcular la descomposición SVD de la matriz esencial
    Para ello hay que utilzar la siguiente funcion de OpenCV. void cvSVD( CvArr* A, CvArr* W, CvArr* U=0, CvArr* V=0, int flags=0 ); A es la matriz que queremos descomponer. U,W,V son la matrices en las que se descompone. Como vemos en la siguiente línea de abajo. A=U*W*VT
  10. Calculamos la matriz de rotación(R)
    de la siguiente forma: U*P* VT donde P es : | 0 1 0 | | -1 0 0| | 0 0 1|
  11. Calculamos la matriz de traslacion(T)
    de la siguiente forma: V*PP* VT donde PP es : | 0 -1 0 | | 1 0 0| | 0 0 1| A partir de aquí es cuando empiezan mis primeras dudas, a partir de la T de arriba, tengo que sacar un vector de 3 X 1. En uno de los documentos lo que hacen es formar esta matriz de 3 X 1, a partir del a02 y a21, de la siguiente forma: |a21| |a02| |a02|
  12. Con todas las matrices halladas anteriormente resolver las siguientes dos ecuaciones independientes
    m1=[K1|0]M m2=[(K2*R)|(-K2*R*T)]*M m1 es una matriz 3X1 (coordenadas en pixeles de la primera imagen) m2 es una matriz de 3X1 (coordenadas en pixeles de la segunda imagen) K1 es una matriz de 3x3(matriz de cámara 1) K2 es una matriz de 3X3(matriz de cámara 2) R es una matriz de 3X3 (matriz de rotación) T es una matriz de 3X1 (vector de traslacion) M es el punto 3D que quiero obtener.

Mis dudas

Aplicando algebra lineal he conseguido hallar los puntos 3D M en ambas ecuaciones, el problema que he encontrado es que el eje Z, es decir, la tercera dimensión, la profundidad del objeto me la calcula de forma erronea. ¿Alguno de ustedes sabe si mi error radica en algún paso anterior? ¿Alguno de ustedes realiza la reconstrucción 3D de otra forma? Agradecería cualquier tipo de orientación. Un saludo