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.
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.
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:
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.
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...
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:
La instalación del SDK se puede efectuar con o sin simulador:
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):
Este proceso involucra algo de tiempo. Una vez finalizado se desmontará la imagen:
¿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.
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.
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:
Calibrar la cámara izquierda (Obtenemos la matriz de cámara KL)
Calibrar la cámara derecha (Obtenemos la matriz de cámara KR)
Sacar una imagen desde el lado izquierdo
Sacar una imagen desde el lado derecho
Detectar coordenadas en píxeles del objeto deseado de la imagen izquierda(mínimo 8 )
Detectar las mismas coordenadas en píxeles del objeto deseado en la imagen derecha(mínimo 8 )
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.
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.
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
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|
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|
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