Sunteți pe pagina 1din 51

Occams

Razor
Nmero 6. Invierno 2011

Editorial Un Gran paso para Occams...


by The Occams Razor Team s otra vez esa poca del ao en la que Occams Razor llega a vuestros discos duros intentando contaros algo interesante y que quizs no conozcis todava. Bien, aqu esta el numero 6 de Occams Razor.

Direccin: David Martnez Oliveira Colaboradores: Guillermo Buenadicha, Roger Oliva Balagu, Manuel Martn-Neira, Jose Luis Vzquez Garca, Fernando Martn Rodrguez, Laura I. Rodrguez Gonzlez, Er Imaginarius y el inefable Tamariz de la Perdiz

Maquetacin y Grasmo Laura I. Rodrguez Gonzlez Publicidad Occams Razor Direct occams-razor@uvigo.es Impresin Por ahora tu mismo. . . Si te apetece c 2010 The Occams Razor Team Esta obra est bajo una licencia Reconocimiento 2.5 Espaa de Creative Commons. Para ver una copia de esta licencia, visite
http://creativecommons.org/licenses/by/2.5/es/

Como reza el ttulo de esta editorial, este nmero supone Un gran paso para esta revista. Y el contexto espacial no es gratuito. Es un gran paso porque, con este nmero, nalmente hemos conseguido movernos en la direccin que siempre hemos deseado, ms contenidos cientcos. En este nmero encontraris dos excelentes artculos de profesionales de la Agencia Espacial Europea, concretamente del Centro de Astronoma Espacial Europeo (ESAC) ubicado a las afueras de Madrid as como del Centro Espacial Europeo de Tecnologa e Investigacin (ESTEC) en los Pases bajos. En el primero de ellos Guillermo, Roger y Manuel nos describen con todo lujo de detalles la misin SMOS en la que Espaa ha jugado un papel muy importante y bueno... mejor leed el artculo. En el segundo, Jose Luis nos presenta SPICE, desarrollado por la NASA para el clculo de geometra de misiones. Un excelente artculo que ana de forma amena las operaciones espaciales y los ordenadores, a la vez que nos explica algunos, aparentemente sencillos, pero que se complican cuando salimos de nuestro querido planeta. La seccin de Historia regresa con un interesante artculo sobre la TV de la mano del siempre ameno Fernando Martn. No nos olvidamos de los temas ms tcnicos relacionados con los ordenadores a travs de dos artculos relacionados con la imagen. En el primero de ellos os hablamos de una interesante y ligera solucin para leer imgenes en vuestros programas. El segundo nos introduce en el mundo de la Realidad Aumentada a travs de ARToolkit. Por ltimo en la La Cacharrera os presentamos Teensy. Un microcontrolador con el que crear dispositivos de entrada, como por ejemplo teclados, es muy fcil. Esperamos que este nmero os resulte interesante y desde estas lneas, la redaccin de Occams Razor os desea todo lo mejor para el prximo 2012!

The Occams Razor Team

o envie una carta a Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. Consulta la pgina 50 para las excepciones a esta licencia

Las opiniones expresadas en los artculos, as como los contenidos de los mismos, son responsabilidad de los autores de stos. Puede obtener la versin electrnica de esta publicacin, as como el cdigo fuente de la misma y los distintos cheros de datos asociados a cada artculo en el sitio web: http://webs.uvigo.es/occams-razor

3| OCCAMs Razor

COMUNIDAD

Lista de Correo, Vdeos y ms.

La Comunidad de Occam
por The Occams Razor Team

NUESTRA LISTA DE CORREO


La lista es totalmente abierta as que cualquiera puede leer las discusiones sin necesidad de suscribirse. Aqu tenis alguno de los temas que hemos tratado en la lista. Hardware Abierto Un tema de candente actualidad que seguimos modestamente en la lista, informando de nuevas iniciativas de hardware abierto como la tarjeta Snowboard, el reciente BeagleBone o el anuncio de la Convencin de Hardware Libre, Electrnica y Robtica (OSHWCon 2011) celebrada en Septiembre. Tambin os hablamos de un interesante reportaje sobre Arduino que apareci poco despus de publicar nuestro ltimo nmero Aqu tenis los enlaces. Ms sobre SnowBoard... Ms sobre BeagleBone... Ms sobre OSHWCon 2011... Ms sobre Arduino, El documental... Construye tu propia red de telefona mvil Un interesante proyecto para construir pequeas redes de telefona mvil, all donde las grandes compaa no quieren llegar. Mas... El nombre del programa fantasma Nuestro amigo Carlos encontr un problema con el programa fantasma del que os hablamos en el ltimo nmero. Todos los detalles en la lista de Occams Razor. Mas.. Los miembros de la lista reciben la revista antes que nadie y adems tienen la posibilidad de ofrecer sus comentarios antes de que se publique ocialmente. Adems, estamos preparando nuevas actividades relacionadas con la revista.

NUESTROS VIDEOS
En nuestro canal de YouTube podis encontrar un par de vdeos sobre algunos de los artculos en este nmero. El primero es nuestra sencilla aplicacin de Realidad Aumentada en vivo.

No os perdis este video de los autores del artculo (Interface Tangible Ex-Nihilo). Que ha aparecido recientemente en Hack a Day El segundo vdeo que hemos aadido ilustra nuestro proyecto de la cacharrera de este nmero. Si habis producido algn video a partir de los artculos de Occams Razor nos encantara conocerlos y aadirlos como favoritos en nuestro canal o como video respuestas si estn relacionados con alguno de los videos ya disponibles.

UNIROS A LA COMUNIDAD!
Nos vemos en nuestra lista de correo y canal de youtube. Grupo Occams Razor Canal YouTube OS ESPERAMOS!!!!

OCCAMs Razor | 4

RATAS DE BIBLIOTECA

Leyendo Imgenes con Libertad


PNGs. JPGs o PSDs con una lnea de cdigo
por Er Imaginarius

gcc -g -o image image.c stb_image.c -lm es suciente. Observad que necesitamos incluir la librera matemtica ya que stb_image utiliza algunas funciones como pow internamente.

or una vez, y sin que sirva de precedente, no vamos a hablar de una librera en esta seccin, aunque generar una librera a partir de stb_image sera trivial. stb_image es un chero fuente C que nos proporciona funciones para leer en memoria los formatos de imgenes ms populares con una sola lnea de cdigo.

Con stb_image podremos leer imgenes en nuestros programas de forma muy sencilla
Leer un jpeg en una lnea de cdigo est bastante bien, pero supongo que muchos de vosotros os preguntaris como utilizar los datos que nos devuelve stbi_load.

stb_image es un conjunto de funciones escritas en el lenguaje C por Sean Barrett quin las liber en el dominio pblico. En su pgina web encontraris algunas otras funciones que tambin os pueden resultar interesante (descompresin Ogg Vorbis o rasterizacin de fuentes TrueType). Su uso es muy sencillo, como veremos enseguida, y nos permite aadir soporte para la lectura de imgenes en los formatos JPEG, PNG, BMP, TGA, PSD, HDR a nuestros programas, muy fcilmente. Es ideal si queremos evitar que nuestra aplicacin tenga dependencias con otras libreras o si estamos pensando en generar un ejecutable esttico para algn sistema embebido, ya que todo el cdigo est contenido en un chero .C. Sin ms, aqu tenis un ejemplo de como usar esta ratilla.
#i n c l u d e " stb_image . h" i n t main ( i n t ac , c h a r a ) { int w, h , c = 3 ; u n s i g n e d c h a r img ; img = s t b i _ l o a d ( a [ 1 ] , &w, &h , &c , 3 ) ; }

PROCESADO DE IMGENES
S, el artculo habra quedado un poquillo corto de esta manera :), as que vamos a escribir un sencillo programa para modicar el contraste de una imagen de forma que podis ver como acceder a los datos en memoria de la imagen. El siguiente ejemplo, implementa la funcin de modicacin de contraste de GIMP. Si no os lo creis, podis comprobarlo muy fcilmente. Aqu est el programa
#i n c l u d e <math . h> #i n c l u d e " stb_image . h" i n t main ( i n t a rg c , c h a r a rg v [ ] ) { int i , w, h , c , s i z e , _tf [ 2 5 6 ] ; u n s i g n e d c h a r img , p ; float f , con ; / Carga imagen / p = img = s t b i _ l o a d ( a rg v [ 1 ] , &w, &h , &c , 3 ) ; c = 3; size = w h c ; / C a l c u l a f u n c i o n de t r a n s f e r e n c i a / f = ( tan ( ( ( con = 0 . 3 ) + 1 ) M_PI/ 4 ) ) ; f o r ( i = 0 ; i < 2 5 6 ; i ++) { _tf [ i ] = ( i n t ) ( i 1 2 7 ) ( f ) + 1 2 7 . 0 ; i f ( _tf [ i ] > 2 5 5 ) _tf [ i ] = 2 5 5 ; i f ( _tf [ i ] < 0 ) _tf [ i ] = 0 ; } / A p l i c a f u n c i o n de t r a n s f e r e n c i a / f o r ( i = 0 ; i < s i z e ; i ++, p++) p=_tf [ p ] ; stbi_write_bmp ( a rg v [ 2 ] , w, h , c , img ) ; return 0; }

Este sencillo programa, lee la imagen que le pasamos como primer parmetro en memoria, devolvindonos un puntero a los datos. Adems, nos devuelve el ancho y alto de la imagen, as como el nmero de componentes de color. El ltimo parmetro nos permite indicar cuantas componentes de color queremos en nuestra imagen en memoria, es decir, le podemos pedir a la funcin que convierta la imagen por nosotros. A modo de ejemplo, si al programa anterior le pasamos como primer parmetro una imagen con transparencia, el valor de c devuelto por la funcin ser 4 (rojo, verde, azul y alpha), pero la imagen en memoria solo tendr 3 componentes (rojo, verde y azul). Para obtener el ejecutable, un sencillo:

5| OCCAMs Razor

RATAS DE BIBLIOTECA

VOLCANDO EL RESULTADO
Este sencillo programa toma dos parmetros, la imagen a la que queremos modicar el contraste, y el nombre del chero en el que queremos grabar los resultados. Veamos en detalle que es lo que estamos haciendo. Como ya os habris dado cuenta stb_image tambin nos proporciona alguna funcin para grabar imgenes. En nuestro ejemplo estamos utilizando la funcin stbi_write_bmp para generar una imagen en formato .BMP. El otro formato que podramos utilizar es .TGA.

FUNCIONES DE TRANSFERENCIA
Modicar el contraste de una imagen, es una de esas operaciones de histograma. La particularidad de estas operaciones es que se pueden implementar de forma muy sencilla con lo que se llama una funcin de transferencia. En nuestro caso, una tabla que nos permite cambiar un determinado valor por otro que nosotros queramos.

AJUSTES FINOS
stb_image nos proporciona un montn de ajustes nos, para controlar que partes del mdulo queremos utilizar y que partes no. A continuacin os comentamos sus efectos. STBI_NO_WRITE. Si denimos este valor en nuestro programa (pasndole -DSTBI_NO_WRITE al compilador), eliminaremos el cdigo para grabar imgenes (unos 7Kb). Pensad por ejemplo en un juego, en el que necesitis cargar un montn de imgenes, pero no hace falta producir ninguna. STBI_NO_STDIO. Deniendo este valor durante la compilacin de nuestra aplicacin eliminaremos el cdigo para leer imgenes de cheros. Eso elimina la dependencia de stdio.h que aade unos cuantos Kbytes a nuestra aplicacin. En este caso, todava disponemos de una funcin stbi_load_from_memory. Cuando nos puede interesar utilizar esta opcin?. En general cuando obtengamos nuestros datos desde cualquier otra cosa que no sea un chero (una conexin de red, una webcam que produce imgenes JPEG, etc...)

Podemos grabar BMPs y TGAs con una lnea ms


En el ejemplo anterior, la funcin de transferencia es el vector tf, que contiene una entrada por cada posible valor de cada una de las componentes de la imagen. Como estamos trabajando con 8 bits por componente, la matriz debe ser de 256 valores. Ahora solo necesitamos introducir en esa tabla el valor de salida que queramos para cada posible valor de las componentes de nuestra imagen y utilizar el bucle for al nal del programa para aplicar la tabla. Observad que en nuestro ejemplo estamos aplicando la misma funcin a las tres componentes de la imagen, pero podramos aplicar una funcin distinta a cada una de ellas. Eso depender de lo que queramos hacer. Utilizando esta tcnica podemos implementar un montn de ajustes de imagen: brillo, contraste, correccin gamma, inverso, posterizacin, monocromo, etc... Solo necesitamos poner los valores apropiados en el vector _tf.

HASTA LA PRXIMA
Esto es todo. Como siempre esperamos vuestros experimentos con stb_image y saber de los nuevos usos que se os ocurran. Podis enviarnos vuestros resultados a nuestra lista de correo. Hay un montn de cosas interesantes que hacer con imgenes ah fuera ;)

OCCAMs Razor | 6

l presente artculo versa sobre la misin SMOS de la ESA, centrndose en sus objetivos cientcos y tecnolgicos, su evolucin histrica, una breve descripcin de los primeros dos aos de vida, y nalmente una serie de retos que esperan en los aos por venir. No pretende ser una descripcin exhaustiva (se proporcionan referencias para el lector que est interesado en un mayor nivel de detalle), sino ms bien se dirige al pblico formado pero sin experiencia previa en el sector espacial.

CONTEXTO PARA LA MISIN. EARTH EXPLORERS, LIVING PLANET


La misin SMOS (Soil Moisture and Ocean Salinity, o Humedad del Suelo y Salinidad de los Ocanos) es uno de los llamados Earth Explorers, que son componentes integrantes del programa Living Planet de la Agencia Espacial Europea (ESA). La ESA mantiene actividades englobadas en el rea de Observacin de la Tierra desde 1977. A nales de la dcada de los 90, se inici el programa Planeta Viviente, con una vertiente cientca y de investigacin ms que de explotacin de datos. El objetivo era comprender nuestro planeta como un sistema cambiante, modelar sus procesos y profundizar en la comprensin del cambio climtico global. El componente espacial de este programa (complementado con un componente terreno para la diseminacin de los datos) son los seis primeros exploradores, familia de misiones que actualmente se est aumentando con 2 nuevas propuestas en estudio. Estos eran Cryosat, misin dedicada al anlisis del espesor de las capas de hielo, destinada a ser la primera misin en volar, aunque un fallo en el lanzador en el 2005 hizo que se reiniciase como Cryosat II (nalmente lanzado en el 2010); GOCE, la misin que busca denir el mapa gravitatorio terrestre, lanzada en Marzo del 2009; SMOS, la misin del agua, que detallaremos ms adelante y tambin volando desde nales del 2009; SWARM,

Programa Living Planet de la ESA (Cortesa ESA)

7| OCCAMs Razor

CIENCIA Y ESPACIO

una constelacin de 3 satlites para medir mejor el campo magntico terrestre, que se lanzar a lo largo del 2012; ADM Aeolus, pendiente de lanzamiento y dedicada al anlisis de los vientos, y Earth-Care, que tambin ser lanzada en los prximos aos y dedicado al estudio de las nubes y la concentracin de aerosoles en las capas altas de la atmsfera. Todas estas misiones se complementarn con los Sentinels (Centinelas), familia de satlites que implementarn el programa GMES (conjunto entre la ESA y la Unin Europea) y con misiones desarrolladas en cooperacin entre la ESA y Eumetsat. Como se puede ver, la observacin y comprensin de nuestro planeta no es tarea sencilla, y requiere de un esfuerzo multidisciplinar.

a nales del 2009, llevando as a un ciclo de casi 10 aos desde el comienzo del desarrollo de la misin una vez aprobada hasta su fase de explotacin. Deberamos aadir adems un perodo anterior de estudios, desarrollo de la tecnologa necesaria y experimentos previos, que comenz ya en 1992. Este ciclo, de unos 18 aos desde su concepcin a su lanzamiento, es razonable y hasta ineluctable para una misin novedosa de tamao medio como SMOS, pudiendo muchas veces ampliarse en el caso de misiones de mayor envergadura.

PROGRAMA INDUSTRIAL
Como se ha indicado, tanto Francia como Espaa demostraron gran inters en el programa SMOS. A la hora de denir la contribucin y el retorno industrial para estos pases (siendo el retorno industrial una de las bases del funcionamiento de la ESA), Francia opt por el desarrollo de la plataforma del satlite, y por asumir las operaciones de la misma, y Espaa escogi la construccin del instrumento as como el control y operaciones del mismo y el centro de procesado de datos cientcos. Ambos pases desarrollaron tambin, al margen de la ESA, centros de procesado cientco de ms alto nivel para la explotacin a fondo de los datos. La plataforma de SMOS, basada en el bus estndar PROTEUS, fue construida por Thales Alenia Space en Cannes, y el centro de operaciones se englob en el centro del CNES francs en Toulouse. Esto facilit el poder reutilizar conocimiento adquirido previamente, al haber operado CNES otras misiones basadas en PROTEUS.

HISTORIA
Respondiendo al concurso de propuestas para el programa Living Planet, se present en 1998 la misin SMOS, por parte del Insituto Francs CESBIO con Yann Kerr como investigador principal (PI) y el Instituto espaol de Ciencias del Mar con Jordi Font como co-investigador principal. La misin fue seleccionada por la ESA en el 99. Detrs de esto se halla el hecho de que tanto Espaa como Francia fueron pases dentro de la ESA altamente interesados en la suscripcin a este programa en concreto. Para dar una referencia de las escalas de tiempo en el desarrollo de una misin espacial, la fase A o de denicin concreta de la misin se inici en el ao 2000, con una fecha de lanzamiento previsto entonces para el 2007. Finalmente, como veremos, SMOS se lanz

Integracin del instrumento MIRAS en SMOS (cortesa ESA)

OCCAMs Razor | 8

CIENCIA Y ESPACIO

Interferometra (cortesa ESA)

El instrumento de SMOS, MIRAS, fue desarrollado por la empresa EADS-CASA en Madrid, como principal contratista al frente de un amplio consorcio de empresas espaolas y europeas entre las que se puede mencionar la participacin de MIER, RYMSA, YLINEN, CONTRAVES, ASTRIUM-Munich, LABEN, Austrian Aeorspace, SENER y TECNOLOGICA. El centro de operaciones y de procesado de datos del instrumento fue desarrollado por un consorcio liderado por la empresa INDRA, en el que participaron GMV y Deimos entre otras empresas. La ESA asumi el papel de coordinador global del proyecto, gestionando las distintas fases del programa, y buscando el lanzador para el satlite, que se contrat nalmente con EUROCKOT, empresa germano rusa que utiliza el cohete Rockot desde la base de Plesetsk en Rusia.

La propuesta cientca propuso la implementacin de un radimetro que captase la emisin supercial en banda L (1.4 Ghz), debido a que esa banda es una banda protegida para la investigacin cientca, y adems a que de la citada emisin se pueden inferir las dos variables buscadas. El objetivo de la misin, sobre todo en su componente de humedad supercial, exiga un tiempo de revisita (tiempo que tarda SMOS en volver a medir un mismo punto en la supercie terrestre) de 3 das en el ecuador, y una resolucin espacial o tamao de pixel de 30 a 50 Kms. Eso exige a la vez un campo de vista amplio (aproximadamente a 1000 Kms) y un tamao de pixel relativamente pequeo para el mismo, asumiendo una rbita sncrona solar a unos 760 Kms de altitud.

LGICA DE FUNCIONAMIENTO

El objetivo de SMOS se puede resumir en la adquisicin a nivel global y con periodicidad de dos variables claves para comprender el ciclo del agua: la salinidad La solucin encontrada, frente a una nica antena pasupercial de los ocanos, y la humedad retenida en rablica con barrido mecnico cuyo tamao no perlos primeros centmetros del suelo. mita cumplir con los requisitos de la misin ni encajaba en lanzadores disponibles fue usar la interferometra desde el espacio. La idea consista en componer una antena de apertura sinttica con un array en Y griega de 69 detectores distribuidos en tres brazos a 120 grados y un Hub central. Esto permita obtener una antena equivalente de unos 8 metros de dimetro, que poda plegarse gracias a sus segmentos articulados a la hora del lanzamiento, y posteriormente desplegarse en la conguracin nal de vuelo. SMOS utiliza por tanto receptores pasivos, con capacidad de polarizacin tanto vertical como horizontal, y utiliza los principios interferomtricos para obtener cada 1.2 segundos una imagen de la escena basada en la correlacin de las distintas seales recibidas en cada uno de sus receptores.

SMOS utiliza un radimetro que capta la emisin supercial de banda L

Ciclo del agua (Cortesa ESA).

9| OCCAMs Razor

CIENCIA Y ESPACIO

Esta tcnica es pionera por cuanto que la interferometra radiomtrica nunca se haba probado desde el espacio para observar la Tierra. La ESA planteaba un desafo tecnolgico y cientco importante: hacer radio-astronoma de la tierra. Para ello fue necesario una revisin de las ecuaciones clsicas de interferometra utilizadas en Radioastronoma, lo que fue en gran parte posible gracias a la denicin y anlisis de las mismas que realiz el Dr. Ignasi Corbella (UPC) reejados en la ecuacin que lleva su nombre. Esta seleccin con una antena sinttica impone as mismo retos que son nuevos para la ESA, como son la seleccin de 69 receptores con caractersticas extremadamente similares, y sobre todo, el que a la hora de computar sus correlaciones sea necesario una transmisin de informacin entre ellos que obliga a utilizar una red distribuida de bra ptica, siendo SMOS la primera misin ESA que lo implementa. As mismo, SMOS necesita una red interna de calibracin para poder evaluar el adecuado funcionamiento de los receptores. SMOS es un satlite de tamao medio, de 650 Kgs de masa de los cuales 350 corresponden al instrumento MIRAS. Algunos de los principales parmetros de la misin pueden verse en la siguiente tabla:

La altitud de la rbita dene el compromiso entre cubrir haz amplio de terreno (mayor cuanto ms alta la rbita) y una precisin de pixel ajustada (mejor cuanto ms baja la rbita). Al tiempo, se ha seleccionado de forma que el paso ascendente por el Ecuador (conocido como nodo ascendente) ocurre siempre a las 06:00 horas solares locales del punto de paso, por lo que las condiciones en el suelo son siempre las mismas. Esto es esencial para una evaluacin consistente de los datos.

Grco de la rbita (Cortesa ESA).

Tabla de datos de misin.

RBITA DE SMOS
La rbita seleccionada para SMOS, clsica en las misiones de observacin de la tierra, es una rbita cuasi polar (es decir, que el satlite orbita la Tierra pasando de polo a polo) con una altitud de 760 Kms, lo que marca un periodo orbital de 100 minutos. La rbita no es estrictamente polar, sino que el plano de la misma tiene una inclinacin de unos 8 grados respecto al eje terrestre, lo que permite que el plano de la rbita de SMOS se mantenga siempre perpendicular al vector del Sol. Esto es muy adecuado, ya que los paneles solares mantienen una orientacin constante y un rendimiento ptimo.

Como ya se ha mencionado, MIRAS es un instrumento de gran tamao, ms de 350 kgs de peso y una envergadura de unos 8 metros de dimetro con los brazos desplegados. Consta de una unidad central (Hub) de forma hexagonal, que alberga unidades de electrnica (ordenador central, memoria de almacenamiento, correlador, transmisor en banda X), y de una serie de segmentos (12) que se conguran en 3 brazos en Y griega, con 4 segmentos cada uno, uno en el hub y 3 desplegados en segmentos exteriores. Los 69 receptores o LICEF de MIRAS se ubican en esos segmentos (6 en cada uno), habiendo 3 unidades especiales que tienen un doble receptor en ellas, llamadas NIR (Noise Injection Radiometer). Unas unidades distribuidas (CMNs) en cada segmento se encargan de proporcionar la seal de un oscilador local para los LICEF de su segmento, de recolectar las seales de los mismos para el correlador, y de ejecutar los comandos y recolectar telemetra de estado.

OCCAMs Razor | 10

CIENCIA Y ESPACIO

Imagen del Instrumento. Grco LICEF (Cortesa ESA)

dad trmica del satlite. En esta fase el instrumento MIRAS permaneci apagado, con un control trmico basado en sensores y resistencias elctricas proporcionados por la plataforma. Finalmente, el 17 de Noviembre el instrumento fue LANZAMIENTO, LEOP encendido, pasndose a un control trmico activo inY COMISIONADO terno que mantiene los subsistemas estables en torno a 22 grados centgrados. La tarde de ese mismo da SMOS fue lanzado por un cohete Rockot (adaptado los primeros datos fueron adquiridos por la estacin de antiguos misiles intercontinentales rusos) el 2 de de recepcin en ESAC, obtenindose lo que se viene Noviembre del 2009, a la 1:50 UTC desde el cosmen llamar la primera luz. dromo de Plesetsk, en Rusia. Rockot es un sistema de lanzamiento que incluye una ltima etapa, Fregat, que permite una insercin bastante precisa en la rbita, minimizando as el consumo de combustible cargado en el satlite. El lanzamiento fue todo un xito, a las pocas horas de alcanzar la primera rbita SMOS pudo desplegar los paneles solares y tambin abrir los brazos del instrumento MIRAS, siendo sta una de las maniobras ms crticas para la misin. Las primeras dos semanas de vida se dedicaron a ajus- Sigui una fase de aproximadamente 2 semanas donde tar la rbita de SMOS, y a realizar la comprobacin se realizaron unos chequeos para vericar el adecuado de funcionamiento de la plataforma, lo que se llama funcionamiento del instrumento, de los datos generael comisionado de la misma. En este periodo se veri- dos y de la capacidad de adquisicin y procesado por can todos los subsistemas, y se alcanza la estabili- el segmento de tierra, culminada con xito. Una red de calibracin se encarga de alimentar, cuando es requerido, cada receptor con ruido correlado o no correlado, para medir la estabilidad y caracterizar el instrumento.

Durante las dos primeras semanas se ajusto la rbita y se comprobaron todos los sistemas de SMOS.

11| OCCAMs Razor

CIENCIA Y ESPACIO

Primera Luz SMOS (cortesa ESA)

Posteriormente, una fase de unos dos meses en los que se analiz ms en detalle el funcionamiento cientco del instrumento, incluyendo alguna modicacin de la conguracin y redundancia seleccionada en el lanzamiento, y una prueba de funcionamiento a distinto nivel trmico. Finalmente, se concluy la fase de comisionado del instrumento con 4 meses de operaciones donde se alternaron distintos escenarios y modos de MIRAS (con o sin medicin de polarizacin cruzada) y un estudio de las frecuencias y secuencias ptimas de calibracin basado en las medidas en rbita. Tambin se analizaron y caracterizaron distintos parmetros del sistema (precisin geomtrica, caracterizacin de antenas) y se compaginaron las observaciones de MIRAS con distintas campaas en tierra para validar las medidas del instrumento. En Mayo del 2010 se inici la fase de explotacin regular, con una conguracin ja para la misin, y con un plan de calibracin estable. La fase de comisionado de SMOS, prcticamente 6 meses, ha sido ms larga de lo que es habitual en otras misiones de corte cientco, debido principalmente al carcter absolutamente innovador del concepto de radiometra interferomtrica desde el espacio, pero al mismo tiempo ha sido necesaria y esencial para que la fase nominal de la misin pueda proporcionar el mximo de datos cientcos con la mejor calidad posible.

La fase de comisionado desvel lo que estn siendo los grandes retos de SMOS a la hora de cumplir sus objetivos cientcos. Posiblemente el mayor de ellos sea que la banda L en la que recibe MIRAS, tericamente protegida por la regulacin internacional del espacio radio-elctrico, se encuentra en realidad contaminada por emisiones de sistemas defectuosos o ilegales. Los datos de SMOS descubrieron un gran nmero de estas emisiones espurias humanas en la banda protegida, que se daban en general por todo el planeta pero especialmente numerosas en Europa, Oriente Medio, y sudeste asitico. Esas emisiones enmascaran la seal natural que observa SMOS dado que las emisiones humanas estn muy por encima de los niveles naturales de radiacin. Adems, debido a las caractersticas del instrumento, una sola antena interferente puede afectar a SMOS an cuando est a miles de kilmetros del mismo. Por otro lado, se detectaron unidades a bordo que se demostraron sensibles a la radiacin (la rbita de SMOS atraviesa las zonas polares, donde la concentracin de partculas cargadas es mayor, pero tambin la Anomala del Atlntico Sur, donde los cinturones de radiacin terrestres estn ms cercanos a la supercie) y a la iluminacin solar. La conguracin ptima frente a esos efectos fue seleccionada para garantizar el mejor retorno cientco; hoy en da siguen presentes, pero su impacto en el retorno cientco es mnimo.

OCCAMs Razor | 12

CIENCIA Y ESPACIO

Mapa de probabilidad de interferencia, (cortesa CESBIO)

SEGMENTO DE TIERRA Y OPERACIONES DE LA MISIN

procesado de datos hasta generar los productos de nivel 2 de salinidad y humedad supercial. En paralelo, ESAC tiene la capacidad de realizar campaas de reEl segmento de tierra de SMOS est compuesto por un procesado de datos de SMOS, tarea que comparte con segmento de control de plataforma, SOGS, en CNES, el centro de la ESA en Kiruna, Suecia. Toulouse, que se encarga de enviar todos los comandos (plataforma e instrumento) al satlite a travs de Por ltimo, ESAC tambin alberga el grupo de caliuna red de estaciones de Telecomando y Telemetra dad, que garantiza que el nivel de la data de SMOS en banda S, as como de recabar la telemetra de la es adecuado para su diseminacin a la comunidad de plataforma y una copia de la telemetra del instrumen- usuarios. to, que posteriormente es enviada al Centro Europeo de Astronoma Espacial de la ESA en Espaa, ESAC, cerca de Madrid. Desde el CNES se mantiene la actitud o apuntamiento del satlite, la rbita dentro de los parmetros requeridos, y se calculan posibles riesgos de colisin con restos de basura espacial. Al mismo ESRIN, el centro de la ESA en Italia dedicado a Obtiempo, se garantizan la seguridad de la plataforma servacin de la Tierra, ejerce de centro de gestin del y del instrumento en casos de anomalas que puedan programa, y alberga el segmento de diseminacin de poner en riesgo la integridad de la misin. datos a usuarios as como el de centro de asistencia a En ESAC, se lleva a cabo el control y operaciones del los mismos. instrumento, incluyendo la planicacin semanal de El centro tecnolgico de la ESA en Holanda, ESTEC, las operaciones y calibraciones que ha de realizar, ge- alberga la ocina encargada de mantener el adecuado nerando los comandos para MIRAS que se enviarn a nivel de soporte industrial tras el lanzamiento para travs de CNES, y analizando los datos de telemetra garantizar el mximo nivel de funcionamiento de la de SMOS que se reciben tanto a travs de CNES como misin. del enlace en banda X con el instrumento. Y nalmente, un amplio nmero de centros expertos En ESAC, as mismo, se reciben los datos cientcos se encargan de colaborar para denir el mejor proce(recogidos por dos estaciones de seguimiento terreno, sado posible para los datos de SMOS. en ESAC y en SVALBARD, Noruega), y se realiza el

ESAC es un centro clave en la misin SMOS.

13| OCCAMs Razor

CIENCIA Y ESPACIO

Segmento de tierra de la misin SMOS (Cortesa CNES-ESA)

FASE DE RUTINA, OPERACIONES Y PROCESADO DE LA SEAL


SMOS es una misin de escaneo peridico de la tierra. Esto quiere decir que en principio, mantiene una posicin ja (con una inclinacin de unos 32 grados hacia delante respecto a un apuntamiento vertical, perpendicular a la supercie de la Tierra) y recolecta datos aprovechando que la rbita polar le permite cubrir el planeta cada 3 das. Su modo de observacin es jo, siendo el que ubica los distintos receptores o LICEFs en polaridades distintas a lo largo del tiempo de integracin de 1.2 segundos, obteniendo as una seal que obtiene los 4 parmetros de Stokes. Entendida as, las operaciones de la misin pudieran parecer sencillas. Dos operaciones se entremezclan con este escenario rutinario:

La fase de rutina entremezcla dos operaciones: Transmisin de datos y calibraciones peridicas.


Una es la necesidad de trasmitir a tierra los datos adquiridos por SMOS. La misin contiene un requisito de datos en tiempo cuasi real (que pide que datos procesados hasta un determinado nivel estn disponibles para los usuarios en menos de tres horas desde la toma de la imagen), que impone que SMOS vuelque en cada rbita de 100 minutos los datos adquiridos en ella. OCCAMs Razor | 14

Dos estaciones de adquisicin, en la isla de Svalvard, Noruega (en una latitud alta, y por tanto con visibilidad de todas las rbitas de SMOS) y otra en ESAC (dedicada en exclusiva a SMOS) garantizan esto. Hay que comandar al instrumento para que cuando entre en zona de visibilidad por la estacin de tierra vuelque los datos almacenados en la memoria a bordo, y actualice sus punteros. La segunda es la necesidad de realizar actividades de calibracin peridicas de forma que los datos de SMOS sean estables y precisos. Las distintas secuencias de calibracin garantizan la estabilidad de todos los componentes del instrumento y regulan la sensibilidad de estos con variaciones temporales y trmicas. Una calibracin peridica (cada 10 minutos) corrige las variaciones observadas debido a las variaciones trmicas en rbita, controlando la estabilidad de las diferencias de fase entre los osciladores locales asociados a cada pareja de receptores. La calibracin de cada uno de los receptores se consigue con dos secuencias de calibracin que verican la seal enviada por unos diodos internos de referencia, una larga (cada dos meses) y otra mucho ms corta (cada semana) que proporcionan informacin de los desvos que haya sufrido cualquier receptor. El nivel absoluto de la imagen se contrasta cada dos semanas con la nica seal externa de referencia para esta misin: las radiacin csmica de microondas, una reminiscencia del Big Bang que se observa girando el instrumento hacia el espacio exterior.

CIENCIA Y ESPACIO

Asimismo, esta seal csmica es aprovechada cada semestre para corregir cualquier desviacin que hayan sufrido las antenas a bordo. Estas dos ltimas secuencias de calibracin requieren un giro del instrumento de forma que MIRAS observe al espacio a 180 grados respecto a la Tierra. Estas actividades han de coordinarse y convertirse en comandos de MIRAS y peticiones para el centro de control de la plataforma en CNES.

El instrumento MIRAS a bordo de SMOS tiene una capacidad de almacenamiento de 20Gb.


Los datos adquirida por MIRAS (tanto la de estatus del instrumento e informacin relevante de sus subsistemas, como la de las correlaciones entre receptores) es almacenada en la memoria del instrumento (con capacidad para 20 Gb, y posibilidad de almacenar ms de un da de datos sin sobrescribirse), y transmitida a tierra. Constituye los datos crudos o raw. stos son recibidos en el centro de procesado de datos (DPGS en ESAC), y convertida primeramente en productos ordenados por semirbitas, al tiempo que clasicados en distintos tipos de producto en funcin de los datos contenidos (correlaciones, calibracin, estatus de instrumento, etc.). Es lo que se llama procesado de nivel 0. Seguidamente, se corrige usando los datos de las distintas calibraciones y luego se recompone la imagen de SMOS aplicando una tcnica similar a una transformada inversa de Fourier. Esa imagen, obtenida en el plano de antena, se proyecta a nivel de tierra, incluyendo entre otras cosas la variacin de la seal debida a la rotacin de Faraday debida a la presencia de carga elctrica en la ionosfera terrestre. Es el procesado de nivel 1, a menudo escindido en distintos subniveles para identicar en qu punto del procesado nos hallamos. Al nal de este nivel, obtendremos mapas de

Temperatura de Brillo (emisividad en banda L). Finalmente, dos procesados diferenciados se encargaran de convertir la temperatura de brillo en salinidad o en datos de humedad. Para ello, es preciso una segregacin geogrca (tierra-mar), y luego aplicar distintos algoritmos para derivar la variable geofsica de la medida. Sin entrar en detalles, pero a ttulo de ejemplo, la informacin de la salinidad del mar depende del conocimiento tambin de la temperatura fsica supercial, y sobre todo de la informacin de la rugosidad del mismo, debida al oleaje. Eso hace que se precisen datos complementarios a SMOS para estos procesados. Para la humedad supercial es necesario entre otros el conocimiento del ndice vegetativo o cantidad de biomasa de la zona en cuestin, siendo esto algo con variabilidad estacional, as como informacin de la rugosidad del suelo. Los mapas globales de salinidad y de humedad constituyen los dos productos de nivel 2 que representan el nal de la cadena operacional de procesado. Todos los productos generados pasan una serie de controles de calidad para evitar que problemas o errores del procesador en tierra o el instrumento originen que datos falsos sean diseminados. Finalmente, los datos son entregados a un grupo de suscriptores (son usuarios que han requerido y han sido autorizados a recibir directamente los datos) y a un archivo de misin que se encarga de gestionar cualquier otra peticin que se recibiera. Los datos de SMOS son gratuitos y abiertos a cualquier persona interesada en su anlisis o explotacin. El portal de observacin de la tierra (http://earth.esa.int) gestiona las peticiones o acceso de los datos. Procesados a niveles superiores (nivel 3, donde los datos de SMOS se analizan y se yuxtaponen temporalmente, o nivel 4 donde se complementan con datos de otros sensores espaciales) son realizados por los usuarios nales, pero tambin por los centros nacionales espaol (CP34) y francs (CATDS).

Procesado de seal (Cortesa ESA)

15| OCCAMs Razor

CIENCIA Y ESPACIO

Comparativa de humedad en Europa 2010/2011 (Cortesa CESBIO)

Como se coment, un requisito paralelo al cientco solicita un componente de datos en tiempo cuasi real. Para ello, partiendo de los datos en nivel 0 se realiza un procesado rpido de nivel 1 (diferente al de la cadena nominal), y esos datos son enviados a un servicio de distribucin para usuarios tpicamente meteorolgicos que utilizan las medidas de SMOS para mejorar las previsiones meteorolgicas a corto y medio plazo. El procesado en tierra aqu descrito est continuamente siendo evaluado por un grupo de usuarios expertos, que proponen y sugieren mejoras. Estas se consolidan anualmente en una actualizacin de la cadena de procesado, y una campaa de reprocesado de todos los datos acumulados desde el comienzo de la misin se lleva a cabo en procesadores con alta capacidad (con velocidades que llegan a 12 veces la del procesador operacional), de forma que los datos se vuelven a consolidar con la ltima actualizacin.

RESULTADOS CIENTFICOS
Los objetivos cientcos de SMOS, despus de dos aos de misin en vuelo, estn convergiendo con los requisitos iniciales de la misin. Hay que destacar una vez ms que los requisitos son ambiciosos, y que SMOS es un concepto absolutamente innovador, por lo que la consecucin de los requisitos iniciales se espera tras varios aos de mejoras en la comprensin del instrumento y campaas en tierra para respaldar sus datos.

Respecto a la humedad supercial, las mediciones de SMOS comparadas con campaas en tierra todava muestran un sesgo inferior. No obstante, sitios de calibracin como Dome-C en la Antrtida o en zonas no contaminadas por interferencias, como en Australia, prueban que se puede obtener una buena correlacin, mejorando sobre todo la comprensin de humedad a gran escala y su variabilidad temporal e incluso anual. SMOS se ha demostrado hasta la fecha como una herramienta esencial para la comprensin de la acumulacin de agua a nivel mundial, analizando fenmenos como las inundaciones (cuando la saturacin del suelo causa escorrenta ms que asimilacin), y al tiempo, la ingestin de productos de SMOS en los modelos de prediccin meteorolgica est mejorndolos. SMOS ha sido la primera misin que ha podido realizar un mapa con una elevada precisin espacial y alta sensibilidad de la Salinidad ocenica. Fenmenos como los deshielos de casquetes polares y su contribucin a las corrientes termo-halinas, o evaporacinprecipitacin que determinan eventos como el Nio o la Nia, o comprensin de los grandes balances salinos entre ocanos (trasvase Atlntico-Pacco) no haban podido ser monitorizados con antelacin, y ahora se hacen visibles a la comunidad cientca. Con ello, se est abriendo una puerta a mltiples formas de investigacin antes no existentes. Adems, en el rea de salinidad, la misin Acquarius, lanzada en 2011, complementar y ampliar los datos de SMOS.

OCCAMs Razor | 16

CIENCIA Y ESPACIO

Mapa de Salinidad (Cortesa CESBIO)

RETOS FUTUROS DE SMOS


SMOS ha entrado ya en su tercer ao de misin, lo que representa su objetivo inicial para poder demostrar la validez de su tecnologa. No obstante, la extensin de la misin est siendo analizada para garantizar ms aos de datos de SMOS. Los principales retos que enfrenta SMOS de cara a los futuros aos son: Eliminacin de interferencias (RFIs). En estos ltimos dos aos, se ha llevado a cabo un intenso trabajo por parte de la ESA y las autoridades nacionales de distintos pases para identicar y apagar cuando ello es posible las fuentes de interferencia. Por otro lado, tcnicas de ltrado de la seal han logrado mitigar parcialmente su impacto. A pesar de ello, un gran nmero de fuentes (y algunas nuevas) permanecen visibles, y queda todava margen para mejorar las tcnicas de ltrado. Como ejemplo se est probando una tcnica de supresin de interferencias que permite mejorar sustancialmente la recuperacin de salinidad en el Mar Mediterrneo o en el Mar Negro, contaminados por emisiones radio-elctricas en la banda protegida. Calibracin. Las principales reas para la mejora de la comprensin del funcionamiento de MIRAS pasan por renar el conocimiento de la estabilidad del instru-

mento a corto y largo plazo, la mejora en la denicin de un modelo de antena, avanzar en las correcciones de fuentes intensas como el sol o las RFIs. Campaas en tierra. La caracterizacin de reas clave en tierra y la correlacin de sus datos con SMOS permitirn referenciar y calibrar mejor sus datos. El lanzamiento de la misin Aquarius (NASA-Argentina) en Junio del 2011 proporcionar tambin otras referencias (especialmente en salinidad) con las que SMOS podr ser evaluado. Uso del tiempo cuasi real. Los datos de SMOS en tiempo cuasi real estn siendo usados en modelos de prediccin meteorolgica a corto y medio plazo, pero todava a ttulo experimental para evaluar el mejor algoritmo para incorporarlos. En los prximos aos cabe esperar que estos modelos se renen y se usen ms ampliamente. Procesado y reprocesado. Como se ha indicado, el procesado de los datos de SMOS no es un algoritmo esttico y estable, sino abierto a continuas mejoras en gran medida derivadas de una mayor comunidad cientca usando los datos. En particular, ser necesario mejorar la conversin de la temperatura de brillo en productos de humedad y salinidad a travs de mejoras en los procesadores de nivel 2.

REFERENCIAS
Pgina SMOS ESA, http://earth.esa.int/smosyhttp://www.esa.int/SMOS Pgina SMOS CNES, http://smsc.cnes.fr/SMOS/ Pgina SMOS CESBIO, http://www.cesbio.ups-tlse.fr/SMOS_blog/ Pgina SMOS BEC-ICM, http://www.smos-bec.icm.csic.es/ Edicin especial SMOS, Transactions on Geoscience and Remote Sensing (TGARS) 2008. Publicaciones tcnicas sobre SMOS hasta el 2009: http://esamultimedia.esa.int/docs/SMOS_publications.pdf SMOS en el boletn de la ESA: http://esamultimedia.esa.int/multimedia/publications/ESA-Bulletin-137/pageflip.html

17| OCCAMs Razor

M RPIDO

Introdcete en la Realidad Aumentada con ARToolkit

Realidad Aumentada
por Er ARturo Grandes

De igual forma que sucede con cualquier tecnologa relacionada con el ser humano, el software no es suciente y junto a este nos encontramos toda una serie de sistemas hardware necesarios para poder implementar la tecnologa en cuestin. La Realidad Aumentada no es una excepcin, y sin la existencia de ciertas soluLas aplicaciones de realidad aumentada se han po- ciones hardware, el concepto en si mismo carece de pularizado en los ltimos aos gracias a multitud de sentido. avances tecnolgicos que han permitido llevar a la prctica ideas que llevaban otando en las cabezas de los cientcos e ingenieros durante varios aos. Curiosamente, los principales avances en este rea se han centrado en intentar aumentar visualmente nuestra percepcin de la realidad y, a da de hoy, el trmino Realidad Aumentada se identica nica y exclusivaLa principal tecnologa hardware relacionada con la mente con este concepto. AR es lo que se denomina Computacin de llevar. S Dicho esto, para el que escribe estas lneas, el concep- bueno, la traduccin es un poco sui-generis. El trto de Realidad Aumentada va mucho ms all y no mino tcnico comnmente utilizado es wearable compuede ms que considerar esta denicin una metoniputing, algo as como ordenadores para vestir, aunque mia en la que se ha tomado la parte por el todo. El esta ltima traduccin, adems de muy larga tampoconcepto Realidad Aumentada no implica en s mis- co es que se ajuste al perfectamente al concepto en mo una dependencia directa con nuestro sentido de general. la vista. Literalmente sugiere aumentar la realidad o, ms precisamente, la realidad como nosotros la perci- De cualquier forma, la idea es muy sencilla. Si querebimos. Y cmo percibimos la realidad?, pues a travs mos extender nuestras capacidades humanas, deberamos de poder llevar encima los dispositivos que utilicede nuestros sentidos. mos para ello de una forma lo menos intrusiva posible. Esto se aplica a todos los elementos del sistema, no solo a los ordenadores, si bien, estos son los ms problemticos. De poco sirve poder extender nuestra percepcin de la realidad si nuestro mundo se reduce a un laboratorio al que estamos encadenados a travs de multitud de cables. La vista es slo uno de nuestros cinco sentidos (s cin- As, esta necesidad de llevar puesto el hardware impoco, aunque muchas veces nos olvidamos de que estn ne en general dos fuertes restricciones. Por una parte ah), y los seres humanos percibimos la realidad a tra- restricciones fsicas; los cacharros tienen que ser lo ms vs de nuestros sentidos. La Realidad Aumentada, en ligeros y pequeos posible. Por otra parte autonoma, su sentido ms general, puede ser vista como el con- lo que implica que tenemos que funcionar con bateras junto de tecnologas que permiten aumentar nuestros y que estas deben durar lo mximo posible. sentidos, y por lo tanto la realidad que percibimos a Conseguir esto ha sido un gran problema durante mucho tiempo. En los ltimos aos, la proliferacin de travs de ellos. A lo largo de este texto nos referiremos a la Realidad los telfonos inteligentes ha proporcionado un impreAumentada por su acrnimo en ingls, AR. Las razn sionante empujn a esta lnea de investigacin. fundamental es que as es como se reere la mayora del mundo a este tipo de tecnologas. La segunda ra-

a realidad aumentada (augmented reality), se puede ver como la disciplina complementaria a la realidad virtual. Mientras en esta ltima se pretende crear un entorno lo ms realista posible de forma sinttica (en la memoria de un ordenador) la realidad aumentada busca aumentar la realidad con informacin adicional.

zn es para evitar que el artculo se relacione con la mitologa egipcia :).

HARDWARE PRET-A-PORT

Wearable Computing es una de las tecnologas clave en un sistema de Realidad Aumentada

La Realidad Aumentada nos permite aadir informacin adicional a la realidad que percibimos

OCCAMs Razor | 18

M RPIDO

La gama de dispositivos hpticos disponibles es bastante amplia. Desde un sencillo (o no tanto, segn se mire) guante capaz de producir pequeas vibraciones en la yema de los dedos para proporcionar la sensacin de que estamos agarrando algo con una determinada textura, hasta complejos exoesqueletos capaces de aumentar nuestras capacidades fsicas de forma articial. Como hemos dicho, estos sistemas son ms comunes EXTENSIN SENSORIAL en el mbito de la realidad virtual, donde no exisEl ordenador en nuestro bolsillo es el que va a aumen- te nada real y ser capaces de transmitir la sensacin tar la realidad, pero para ello necesita poder percibirla de tocar algo incrementa el realismo de la simulacin de alguna forma. No slo eso, el ordenador tambin ne- enormemente. cesita poder comunicar esa realidad aumentada al ser humano, a travs de algn dispositivo que pueda co- GUSTO, OLFATO, SENTIDO COMN municarse con ambos; el ordenador y la computadora. Hasta que los interfaces neuronales se desarrollen lo Y hasta aqu hemos llegado. El olfato y el gusto son suciente, la interaccin entre mquinas y seres hu- los grandes discriminados de la investigacin sensorial. manos se tiene que realizar a nivel sensorial, es decir, Existen investigaciones y resultados muy prometedores, sin embargo, a da de hoy, distan mucho de ser a travs de los sentidos. portables o de poder funcionar con una pequea batera. Finalmente, est el ms importante de todos los sentidos. El sentido comn. S, no es tontera, al nal, las cosas tienen que tener sentido y muchas veces, por gay que parezca alguna solucin puede que no resulte prctica en absoluto o que una obsesin por mimetizar el comportamiento humano nos lleve a soUtilizamos pantallas en las que los ordenadores pueluciones poco viables, sobre todo cuando se intentan den mostrar informacin que nosotros entendemos. abordar antes de que llegue su momento. Utilizamos altavoces para que los ordenadores puedan reproducir informacin que nosotros podamos or. Uti- Ojo, que no estamos hablando de investigacin, sino lizamos dispositivos hpticos para que los ordenado- de soluciones reales, que puedan ser utilizadas en el res puedan proporcionarnos informacin que nosotros mundo real. Ah el sentido comn es fundamental.

Hoy en da disponemos de potentes ordenadores de bolsillo que podemos utilizar durante das y llevar en uno de los bolsillos de nuestra chaqueta. Como suele ocurrir, el concepto de Wearable Computing ha llegado, pero de una forma un poco diferente a la que esperaban los pioneros de este campo...

Vista, Odo y Tacto son los sentidos en los que ms se ha investigado hasta la fecha.

podamos sentir. Utilizamos micrfonos para que los ordenadores puedan percibir nuestras palabras, etc... As que, necesitamos algunas cosas en torno a nuestro ordenador porttil para ser capaces de aumentar la realidad. Por ejemplo, un sistema AR visual necesita como mnimo una pantalla y algn sensor con el que averiguar donde se encuentra el usuario o algn elemento de inters. En el primer caso podramos utilizar, por ejemplo, un GPS y unos acelermetros. En el segundo caso una cmara de vdeo sera una opcin vlida. De la misma forma micrfonos, auriculares y tecnologas anes tales como, cancelacin de ruido, reconocimiento y sntesis de voz son necesarias para poder aumentar nuestro sentido del odo.

APLICACIONES AR VISUALES
Bueno, tras esta breve introduccin y reivindicacin del espritu ms general de la Realidad Aumentada, vamos a empezar a centrarnos para poder empezar a crear nuestras aplicaciones de realidad aumentada m rpido.

En la actualidad, el trmino Realidad Aumentada se utiliza exclusivamente en su vertiente visual.


Como dijimos ms arriba, el trmino Realidad Aumentada ha visto acotado su signicado y hoy en da cuando escuchemos a alguien hablar de Realidad Aumentada se estar reriendo a sistemas AR visuales. Estos sistemas son los ms sencillos de entender, estamos viendo el resultado directamente, y los que ms se han desarrollado en los ltimos tiempos. Por esa ltima razn es relativamente sencillo desarrollar una aplicacin AR muy fcilmente, utilizando herramientas disponibles en la actualidad. Antes de meternos en harina un comentario ms. Existen bsicamente dos tipos de aplicaciones AR visuales. 19| OCCAMs Razor

DISPOSITIVOS HPTICOS. EL TACTO


El siguiente sentido en el que los investigadores han invertido muchos de sus esfuerzos es el tacto. Bajo el nombre genrico de dispositivos hpticos, se agrupan dos tipos fundamentales de tecnologa. Los sistemas capaces de producir vibraciones y los sistemas capaces de producir realimentacin de fuerza. Estos dispositivos se han desarrollado sobre todo en el mbito de la realidad virtual, pero su aplicacin a la realidad aumentada no tardara en hacerse patente.

M RPIDO

A saber, las que ofrecen informacin al usuario en funcin de su posicin y orientacin, y las que reconocen algn patrn o forma y proporcionan informacin asociada al mismo. Las primeras se han hecho muy populares en los nuevos telfonos inteligentes. Estas pequeas bestias, adems de un ordenador portatil, nos proporcionan un GPS, acelermetros, cmara y una pantalla. Todo lo que necesitamos con su batera y con un formato portable. Las segundas tambin empiezan a estar disponibles en estos dispositivos pero han tenido su origen en los ordenadores de sobremesa y los laboratorios, ya que la posicin del usuario no es tan crtica. En este caso, solamente es necesario disponer de una cmara. El ordenador captura las imgenes de la cmara, las procesa en busca de un determinado patrn (este proceso puede ser bastante complejo... ya veremos ms adelante), calcula la posicin y orientacin de dicho patrn con respecto a la cmara, y utiliza esa informacin para mostrar algn tipo de informacin asociado al patrn. Si asociamos la posicin de la cmara a la posicin del usuario, es decir, nos pegamos la cmara a la cabeza, estaremos calculando la posicin y orientacin del usuario, de la misma forma que lo hacemos con el GPS, pero con unas restricciones diferentes. Seguro que habis visto este tipo de aplicaciones en ms de una ocasin, pero sino, no os preocupis, ya que estas son las aplicaciones de las que os vamos a hablar en este artculo.

bre de ARToolkit est preparada para utilizar OpenVRML versin 0.16. En el momento de escribir este artculo, la ltima versin disponible de OpenVRML es la 0.18.X. El problema es que la version 0.16 no compila en las distribuciones modernas, y la versin 0.18 no funciona con ARToolkit. No desesperemos, lo bueno del software libre es que siempre hay opciones. Tenemos dos posibilidades. O modicamos ARToolkit para que funcione con la ltima versin de OpenVRML, o hacemos que la versin 0.16 de VRML compile en nuestro sistema. Nosotros hemos optado por esta ltima opcin y generado un simple patch para recompilar la versin 0.16. Podis encontrar el parche en el cdigo fuente que acompaa a este artculo, disponible desde nuestra pgina web.

ARToolkit nos permitir iniciarnos en la AR M Rpido


Como algunos os habris dado ya cuenta, existe una tercera opcin. Simplemente no utilizar VRML. Afortunadamente el soporte VRML es opcional en la librera y podemos obviarlo si no lo necesitamos en nuestra aplicacin. La aplicacin que vamos a desarrollar en este artculo realmente no necesita OpenVRML, pero en el artculo queremos contaros como utilizar todo el potencial de la librera. Una vez dicho esto, vamos a compilar ARToolkit.

ARTOOLKIT
Para desarrollar nuestra aplicacin de Realidad Aumentada m rpido vamos a utilizar la librera ARToolkit. ARToolkit fue inicialmente desarrollado por los Laboratorios de Tecnologa Interaccin Humana en la Universidad de Washington (HIT Lab) y de la Universidad de Nueva Zelanda (HIT Lab NZ). Inicialmente se distribuy como software libre con licencia GPL, pero a partir de la version 2.72.1, liberada en 2007, el proyecto libre se cerr y se cre una compaa para continuar con el desarrollo del sistema desde una ptica ms comercial. As que, la versin con la que vamos a trabajar nosotros es precisamente esa, la ltima versin libre de la librera. De cualquier forma, esta librera marc un hito en el mundo de la Realidad Aumentada y sirvi de punto de partida para otras muchos clones que han aparecido durante estos ltimos aos. Hablaremos de ellos un poco ms tarde.

CONFIGURANDO LA LIBRERA
ARToolkit proporciona algunas opciones que debemos seleccionar antes de compilarla. Esta conguracin la realiza el script Configure, el cual nos har una serie de preguntas sobre nuestras preferencias. Lo primero que tendremos que elegir es el driver de captura de vdeo. El script nos proporciona cinco opciones:
Select a video capture driver. 1: Video4Linux 2: Video4Linux+JPEG Decompression (EyeToy) 3: Digital Video Camcoder through IEEE 1394 (DV Format) 4: Digital Video Camera through IEEE 1394 (VGA NONCOMPRESSED Image Format) 5: GStreamer Media Framework Enter :

Nuestra eleccin depender de la cmara que tengamos disponible. En caso de duda probad con GStreamer ya que esta opcin proporciona distintas posibilidades para adquirir video. Por ejemplo, si vuestra cmara utiliza v4l2, como los dispositivos uvc INSTALANDO ARTOOLKIT bastante comunes estos das, la primera opcin no funLo primero que necesitamos hacer es instalar AR- cionar, pero Gstreamer s. Toolkit. Para ello descargamos las fuentes desde En el peor de los casos, Gstreamer nos permitir utisu pgina web. ARToolkit nos permite utilizar mode- lizar como fuente un vdeo pregrabado almacenado en los VRML en nuestra aplicacin a travs de la librera un chero, que no es que sea lo mejor, pero es algo OpenVRML. El problema es que la ltima versin li- con lo que trabajar. OCCAMs Razor | 20

M RPIDO

Tras la conguracin del sistema de captura de vdeo, Qu signica todo eso?. Bien, de hecho ese rollo de el script nos har dos preguntas ms: ah arriba es una conguracin de pipes de GSTreamer. La primera parte de la conguracin es la fuente de Do you want to create debug symbols? (y or n) video, en nuestro caso estamos utilizando una cmara Enter : n con driver V4L2. Adems estamos utilizando la segunBuild gsub libraries with texture rectangle support? (y or n) GL_NV_texture_rectangle is supported on most NVidia graphics cards da cmara del sistema (/dev/video1). Nuestro ordeand on ATi Radeon and better graphics cards nador de test es un porttil con una webcam inteEnter : y grada. Lamentablemente la cmara integrada es muy mala, y estamos utilizando una segunda cmara USB para estas pruebas. PROBANDO... PROBANDO... 1,2,3 La siguiente lnea congura el formato de la fuente A la primera pregunta nosotros hemos respondido de vdeo, vamos, de nuestra cmara. En este caso esno. A no ser que pretendis depurar ARToolkit, esta tamos utilizando un formato YUV para los datos y opcin no debera ser necesaria. La segunda depen- queremos una resolucin VGA estndar. der de la tarjeta grca que utilicemos. Como nos A continuacin pasamos los datos de la cmara por informa el script, para tarjetas nVidia y ATI podemos el ltro ffmpegcolorspace que nos permite transformar los datos en formato YUV en datos RGB, que responder yes. En nuestro caso estamos utilizando una tarjeta Intel son los que le gustan a OpenGL. Para forzar la cony hemos respondido y. De hecho, con nuestra con- versin al formato que necesitamos utilizamos un eleguracin GStreamer y tarjeta Intel, responder no ha mento capsfilter a continuacin con el que limitar esta pregunta hace que la librera se estrelle al probar el formato de los datos.. Finalmente, la ltima lnea es necesaria por ARToollos ejemplos. kit, para acceder a los datos de la imagen capturada. Leyendo un poco sobre GStreamer, tendris un montn de diversin asegurada... No os olvidis de enviarnos vuestros experimentos.

ARToolkit nos ofrece distintas opciones para la captura de vdeo, durante su conguracin

AR... AR FIN

Vale, ya van siendo horas de que veamos un Para saber si la extensin est disponible en vuestro poco de ARccin. Para ello tenemos que hasistema, podis ejecutar el siguiente comando: cer dos cosas. En primer lugar abrir el chero ../patterns/pattHiro.pdf, con nuestro visor de PDFs preferido. A continuacin, y sin mediar pala$ glxinfo | grep texture_rectangle bra lanzamos el programa simpleTest en el directorio bin . Ya solo falta hacer make. Ahora estamos en condiciones de probar el resultado de nuestro trabajo. En el directorio bin encontraremos diferentes programas de ejemplo que nos van a permitir comprobar si todo est en orden. El primero que probaremos es videoTest. Este programa simplemente muestra el vdeo capturado por la cmara. En principio debera funcionar sin ms, pero si tenemos varias cmaras instaladas o estamos utilizando uno de los drivers que necesitan conguraciones especiales, como es el caso de GStreamer, necesitamos decirle a ARToolkit como queremos que capture las imgenes. Para ello utilizaremos la variable de entorno ARTOOLKIT_CONFIG. En la documentacin de ARToolkit podis encontrar informacin detallada de las opciones disponibles para los diferentes drivers. Como estamos utilizando GStreamer, nuestros parmetros Ahora solo tenemos que enfocar la cmara hacia el seran estos: visualizador de PDFs, y un bonito cubo azul aparecer sobre el PDF. Como habris comprobado el patrn $ export ARTOOLKIT_CONFIG="v4l2src device=/dev/video1 ! \ aparece tambin en esta pgina, as que si estis levideo/x-raw-yuv,width=640,height=480 ! \ ffmpegcolorspace ! \ yendo el artculo mientras hacis estas pruebas podis capsfilter caps=video/x-raw-rgb,bpp=24 ! \ saltaros el primer paso. identity name=artoolkit ! fakesink" 21| OCCAMs Razor

M RPIDO

Aplicacin de Ejemplo SimpleTest Funcionando!

Ahora que todo est funcionando perfectamente, si habis recompilado OpenVRML en el directorio bin podris encontrar una aplicacin simpleVRML que permite asociar cheros VRML a diferentes patrones. En el chero bin/Data/object_data_vrml encontraris el mapping entre patrones y modelos VRML utilizado por simpleVRML. Aadir vuestros propios modelos es una cuestin de editar una lnea de texto :)

init (); a rV i d e o C a p S ta rt ( ) ; argMainLoop ( NULL, NULL, mainLoop ) ; return ( 0 ) ; }

NUESTRA PRIMERA APLICACIN AR

Los ejemplos que vienen con ARToolkit, ya nos permiten hacer algunas cosillas, pero para desarrollar nuestra propia aplicacin AR, necesitamos tener ms control. Afortunadamente para nosotros, la librera es muy fcil de usar como veremos a continuacin. Vamos a comenzar con una versin simplicada de simpleTest que nos va a permitir introducir los principales elementos de este tipo de aplicaciones y las funciones que proporciona ARToolkit para facilitarnos la vida. INICIALIZANDO ARTOOLKIT Comencemos con la funcin main la primera que se ejecuta. Como os adelantbamos unas lneas ms arriba, la funcin init es la encargada de inicializar ARTooli n t main ( i n t a rg c , c h a r a rg v ) kit. Y en qu consiste esa inicializacin?. Vemoslo { g l u t I n i t (& a rg c , a rg v ) ; utilizando el cdigo de la funcin.

Lo primero que vemos es que nuestro ejemplo, al igual que todos los otros ejemplos distribuidos con ARToolkit utiliza GLUT para sus grcos 3D. Como veremos en seguida, es muy sencillo utilizar cualquier otro mtodo para inicializar OpenGL, glx, SDL, lo que ms rabia os d. A continuacin llamamos a la funcin init encargada de inicializar ARToolkit. En seguida veremos que es lo que hace. Tras ello inicia la captura de vdeo con la cmara que hayamos congurado e inicial el bucle principal de la aplicacin en el que ejecutaremos la funcin mainLoop por cada paso del bucle.

Izquierda: simpleVRML Derecha: Patrones Hiro y Kanji impresos

OCCAMs Razor | 22

M RPIDO

La funcin de inicializacin necesita algunos parmetros. En nuestro sencillo ARminimo, los hemos declarado como variables globales que os mostramos a continuacin.
char int char ARParam char int vconf = "" ; } xsize , ysi ze ; cparam_name = DDIR " / camera_para . dat " ; cparam ; patt_name = DDIR " / p a t t . h i r o " ; p a tt_ i d ;

i f ( ( p a tt_ i d=arLoadPatt ( patt_name ) ) < 0 ) { p r i n t f ( " p a t t e r n l o a d e r r o r ! ! \ n" ) ; exit (0); } a r g I n i t ( &cparam , 1 . 0 , 0 , 0 , 0 , 0 )

Lo primero que nos encontramos es la cadena vconf que utilizaremos para la conguracin del sistema de vdeo. De hecho, esta cadena va a estar vaca, lo que signica que ARToolkit debe utilizar el contenido de la variable ARTOOLKIT_CONFIG para congurar el sistema de captura de imgenes. Las variables xsize e ysize las utilizaremos para obtener el tamao de la imagen que estamos capturando. En un momento veremos como los utilizamos. El siguiente parmetro es cparam_name. Este parmetro es el nombre de un chero que contiene los parmetros de conguracin de la cmara. El que estamos utilizando nosotros viene con ARToolkit, y en general debera funcionar. En caso contraro sera necesario producir uno nuevo para nuestra cmara. La documentacin de ARToolkit nos explica como hacerlo. La constante DDIR la pasamos desde el Makefile, con la opcin -D. Si tenis vuestro chero de cmara en un lugar bien conocido, podis sustituir esta constante por ese directorio. Los parmetros de cmara que leemos del chero anterior los almacenaremos en la variable cparam. Finalmente, necesitaremos dos variables ms. La primera contiene el nombre del chero que contiene el patrn que queremos utilizar en nuestra aplicacin. En nuestro caso se trata del patrn Hiro. Una vez cargado en memoria ese patrn, nos referiremos a l utilizando un identicador entero que almacenamos en la variable patt_id. Tras declarar todas estas variables vamos a ver como las utilizaremos para inicializar ARToolkit. El cdigo de la funcin init se muestra a continuacin:

Lo primero que hacemos es inicializar el sistema de captura de vdeo, terminando la aplicacin si se produce cualquier error. Como ya os comentamos, en nuestro caso vconf es una cadena vaca ya que nosotros estamos utilizando el mtodo de la variable de entorno para esto. A continuacin, le preguntamos al sistema de vdeo cual es el tamao de las imgenes que vamos a capturar. Estos valores los utilizaremos en un momento para terminar de inicializar la librera. Es el momento de leer el chero de conguracin de cmara, lo que conseguimos con una rpida llamada a arParamLoad con la que, de paso, almacenamos estos parmetros en una variable local. Para nalizar la inicializacin, actualizamos nuestros parmetros ledos del chero, con el tamao de la imagen capturada, almacenando el resultado en la variable cparam que contendr nuestra conguracin nal. La variable cparam se utiliza entonces para inicializar ARToolkit para nuestra cmara de acuerdo al tamao de las imgenes que vamos a capturar. A modo informativo, mostramos estos parmetros utilizando la funcin arParamDisp.

PATRONES

Todava nos falta un paso ms para inicializar el sistema. Cargar los patrones que queremos utilizar en nuestra aplicacin. En nuestro ejemplo vamos a utilizar un solo patrn que cargaremos con la funcin arLoadPatt. Esta funcin nos devolver un nmero con el que poder identicar este patrn en nuestro programa. Si nuestra aplicacin necesitara ms patrones,. este es el momento de cargarlos. s t a t i c void i n i t ( void ) { Con esto, ya solo nos queda llamar a la funcin ARParam wparam ; argInit para que ARToolkit quede completamente i f ( arVideoOpen ( v c o n f ) < 0 ) e x i t ( 0 ) ; inicializada.El segundo parmetro de la funcin es un i f ( a r V i d e o I n q S i z e (& x s i z e , &y s i z e ) < 0 ) factor de escala. El valor 1.0 signica que la imagen exit (0); que mostraremos en la pantalla de nuestro ordenador i f ( arParamLoad ( cparam_name , 1 , &wparam ) < 0 )tendr el mismo tamao que la imagen capturada. Si { le diramos el valor 2.0, la imagen que mostraramos p r i n t f ( "Camera p a ra m e te r l o a d e r r o r ! ! \ n" ) ; en la pantalla sera el doble de la que estamos captuexit (0); rando. } El resto de parmetros probablemente no los necesiarParamChangeSize (&wparam , x s i z e , y s i z e , tis, pero si tenis mucha curiosidad echadle un ojo &cparam ) ; al chero include/AR/gsub.h en las fuentes de ARa rIn i tC p a ra m ( &cparam ) ; arParamDisp ( &cparam ) ; Toolkit. 23| OCCAMs Razor

M RPIDO

BUCLE PRINCIPAL

llo, basta con llamar a la funcin arDetectMarker. La funcin recibe como parmetro la imagen que Ahora que todo est listo para funcionar, tenemos que hemos capturado, seguido de un umbral de detechacerlo funcionar. Y esto lo conseguimos con la funcin, un puntero a un vector de elementos del tipo cin mainLoop que introdujimos al principio de nuesARMarkerInfo, y un entero en el que nos devolver el tro ARminimo. nmero de markers detectados en la imagen. Esta funcin se ejecuta por cada ciclo del bucle princiEn nuestro ejemplo, al igual que en los distintos ejempal, tpicamente por cada cuadro de la escena 3D que plos que podemos encontrar en le paquete ARToolkit, dibujamos en la pantalla. Aqu est nuestra mainLoop: el umbral se ja normalmente a un valor de 100. Ess t a t i c v o i d mainLoop ( v o i d ) te parmetro permite ajustar el proceso de conversin { de la imagen de color a monocromo (blanco o negro). ARUint8 i ; Ms o menos, los pixels por encima de este valor sern ARMarkerInfo marker_info ; blancos y los que estn por debajo sern negros... simint marker_num ; plicando el proceso mucho. Los ms curiosos podis i f ( ( i =(ARUint8 ) arVideoGetImage ( ) ) == NULL) echarle un ojo a este artculo. { arUtilSleep (2 ); En este punto ya hemos terminado con la imagen y return ; podemos olvidarnos de ella. Es el momento de decirle } al sistema de video que empiece a capturar la siguiente imagen mientras nosotros terminamos algunas coargDrawMode2D ( ) ; argDispImage ( i , 0 , 0 ) ; sillas. i f ( a rD e te c tM a rk e r ( i , t h r e s h , &marker_info , Esas cosillas las vamos a hacer en la funcin procesa_markers, tras la cual actualizaremos la pan&marker_num ) < 0 ) { cleanup ( ) ; talla con una llamada a argSwapBuffer.
exit (0); } arVideoCapNext ( ) ; p ro c e s a _ m a rk e rs ( marker_info , marker_num ) ; a rg S w a p B u f f e r s ( ) ; }

BOTONES
Ya solo nos quedan dos funciones por comentar. Una que analiza los patrones que hemos encontrado en la imagen, y otra que pinta algo en la pantalla basndose en los resultados de las etapas anteriores. Para ilustrar estos dos pasos, vamos a comenzar con el ejemplo ms sencillo posible: Un botn. Como se suele decir y para muestra un botn :). Nuestro botn lo implementaremos tal que as. Supondremos que un patrn ser normalmente visible, de forma que cuando no lo detectemos, supondremos que hay algo bloqueando la imagen y por tanto diremos que el botn ha sido pulsado. Ms sencillo no se puede, sin embargo, este simple ejemplo nos va ha permitir introducir todos los conceptos necesarios para que podis desarrollar vuestras propias aplicaciones de realidad aumentada.

Pues bien, lo primero que hacemos es leer una imagen de la cmara, si es que hay alguna disponible. En caso contrario, esperamos un poquito e iniciamos otro ciclo. Una vez que tenemos la imagen en nuestro vector i, la dibujamos inmediatamente en pantalla. Para ello, primero activamos el modo 2D utilizando argDrawMode2D y luego mostramos la imagen con argDispImage. Lo siguiente que podemos hacer, una vez tenemos una imagen de la cmara, es detectar nuestros markers o patrones en la imagen, y esto s que es muy senci-

Izquierda: Patrn Visible (Botn Normal) Derecha: Patrones Ocludo (Botn Pulsado)

OCCAMs Razor | 24

M RPIDO

PROCESANDO MARKERS
Es momento de aadir la lgica de nuestro botn. La funcin procesa_markers es la encargada de ello. Aqu la tenis.
void p ro c e s a _ m a rk e rs ( ARMarkerInfo mi , i n t num) { int j , k; / c he c k f o r o b j e c t v i s i b i l i t y / k = 1; f o r ( j = 0 ; j < num ; j++ ) { i f ( p a tt_ i d == mi [ j ] . i d ) { i f ( k == 1 ) k = j ; e l s e i f ( mi [ k ] . c f < mi [ j ] . c f ) k = j ; } } i f ( k == 1 ) { i f ( boton ) { p r i n t f ( " Botton Pulsado \n" ) ; boton = 0 ; } return ; } boton = 1 ; arGetTransMat(&mi [ k ] , p a tt_ c e n te r , patt_width , p a tt_ tra n s ) ; draw ( ) ; }

Una vez que tenemos nuestra matriz, ya solo nos queda pintar algo en la posicin del patrn que acabamos de localizar.

PINTANDO NUESTRO BOTN


Nuestro botn tomar la forma de un tringulo con uno de sus vrtices coloreados. Exactamente, el tringulo que aparece en la gura de la pgina anterior. Veamos como pintar esta gura con la informacin contenida en la variable patt_trans, que no es otra cosa que la posicin y orientacin de la cmara. Esta es la funcin que dibuja el tringulo.
s t a t i c v o i d draw ( v o i d ) { double gl_para [ 1 6 ] ; argDrawMode3D ( ) ; argDraw3dCamera ( 0 , 0 ) ; argConvGlpara ( p a tt_ tra n s , gl_para ) ; glMatrixMode (GL_MODELVIEW) ; glLoadMatrixd ( gl_para ) ; gl Transl atef ( 0.0 , 0.0 , 25.0 ) ; g l B e g i n (GL_TRIANGLES ) ; glColor3f (0 ,0 ,1); g l V e r t e x 3 f ( 30 , 30 ,0); glColor3f (0 ,0 ,1); glVertex3f (30 , 30 ,0); glColor3f (1.0 ,0 ,0); glVertex3f (0 , 50 , 0); glEnd ( ) ;

Si recordis, los parmetros que recibe esta funcin son la lista de patrones detectados en la imagen cap- } turada por la cmara as como su nmero. As que lo que vamos a hacer es buscar entre los patrones detec- Lo realmente importante de esta funcin son las cintados nuestro patrn de referencia. co primeras lneas. El resto de la funcin es cdigo OpenGL estndar para dibujar un tringulo. De hecho podemos sustituir este tringulo por cualquier otra cosa; un modelo VRML utilizando OpenVRML, o guras ms complejas con luces, iluminacin e incluso shaders. Veamos en detalle la parte de ARToolkit. La primeEn este caso el bucle no es realmente necesario, ya ra funcin se encarga de activar el modo dibujo en que solo tenemos un patrn (hiro). Sin embargo lo he- 3D. Recordad que lo primero que hacamos tras capmos dejado por conveniencia para que os resulte ms turar la imagen era activar el modo 2D para dibujar sencillo hacer experimentos con distintos patrones. esa imagen en el fondo. A efectos prcticos, lo que Tras el bucle, la variable k valdr -1 si no se ha encon- todo esto signica es que estamos cambiando de una trado nuestro patrn (patt_id)o su ndice en la tabla proyeccin ortogrca para 2D a una proyeccin en perspectiva para 3D. Las funciones argDrawMode3D y si el patrn aparece en la imagen. argDrawMode2D realizan este cambia pero asegurnCon esta informacin implementamos la lgica de donos que cuando pintemos algo en 3D su posicin nuestro botn. Si el patrn a desaparecido (k = -1) corresponder con el marker en la imagen 2D. y hace nada estaba all (boton = 1) entonces es que hemos pulsado el botn. Si el patrn aparece en la Ahora solo tenemos que transformar la matriz que imagen, entonces el botn est disponible y actualiza- nos ha devuelto ARToolkit al formato que espera OpenGL. mos la variable botn. Finalmente, le pedimos a ARToolkit que nos de la La matriz que nos devuelve ARToolkit es realmeninformacin asociada al patrn k (nuestro patrn de te la posicin y orientacin de la cmara as que si inters), tanto para representarla en 2D (centro y an- asignamos esta matriz a la matriz MODELVIEW de cho) o en 3D (matriz de transformacin). Estos valores OpenGL, estaremos posicionando la cmara virtual en la posicin correcta. los almacenamos variables globales por simplicidad.

Obtener la posicin de los markers es muy fcilcon ARToolkit.

25| OCCAMs Razor

M RPIDO

Eso es lo que hace la llamada a glLoadMatrixd. Observad que hemos aadido una traslacin en el eje z para que nuestro tringulo aparezca por encima del marker y justo en el mismo plano. Un ltimo comentario sobre la funcin de dibujo. Normalmente, y as lo veris en la mayora de los ejemplos que vienen con ARToolkit, justo despus de activar el modo de dibujo en 3D, tendris que restaurar el estado OpenGL que necesitis para vuestra aplicacin. Cosas como activar el z-buer o la iluminacin, asignar materiales, etc. Nosotros hemos eliminado todo eso para mantener los listado pequeos, pero si pretendis hacer algo ms complicado que nuestro simple botn echadle un ojo a los ejemplos de ARToolkit y a esta pgina.

mandos llamada pacmd que nos va a salvar el da. El comando que nos interesa es este: pacmd set-sink-volume 0 100

La funcin system nos permite conectar con el control de volumen de PulseAudio.


Bsicamente le estamos diciendo a pulse audio que ponga el volumen del sink 0 al valor 100.

CONTROL DE VOLUMEN TANGIBLE

Con todos estos elementos solo necesitamos modicar nuestra funcin procesa_markers aadiendo el cdiComo nuestra demo del botn es un poco escasa, va- go que se muestra a continuacin justo antes de la mos a introducir un par de conceptos ms y Aumentar llamada a la funcin draw. nuestra demo para que haga algo til. Para ello vamos a = a ta n 2 ( p a tt_ tra n s [ 2 ] [ 0 ] , a introducir el concepto de Interfaces Tangibles p a tt_ tra n s [ 2 ] [ 1 ] ) ; Los interfaces tangibles son un tipo especial de sistei f ( a < 0 ) a += (2 M_PI ) ; mas AR en los que la interaccin con el mundo real y los objetos virtuales se restringe, generalmente, a una i n t v a l = round ( ( a ) / (2 M_PI) 6 5 5 3 5 . 0 ) ; supercie en lugar de permitir una interaccin libre en el espacio tridimensional. Esta restriccin facilita char c [ 1 0 2 4 ] ; d" , s n p r i n t f ( c , 1 0 2 4 , "pacmd s e t s i n k volume 0 % la interaccin con el sistema utilizando objetos reales. val ) ; Estos sistemas suelen utilizar un supercie multisystem (cmd ) ; toque (Multi-Touch Screen) sobre la que se manipulan objetos reales con algn tipo de identicacin y Lo que estamos haciendo es calcular la rotacin del comportamiento. Si bien ese es el ms comn de los patrn con respecto al eje Z a partir de la matriz escenarios, es posible construir este tipo de sistemas de transformacin que nos devuelve ARToolkit. Luego con nuestro modesto ARToolkit. convertimos el resultado en un valor lineal entre 0 y Para ilustrar lo que acabamos de comentar vamos a 65535, que es el rango de valores que espera pacmd. modicar nuestro simple botn para convertirlo en un Una llamada a system y ya estamos listos interfaz tangible con el que modicar el volumen de Solo nos falta un pequeo toque en la funcin draw. nuestro ordenador :). Suponiendo que el valor a que calculamos en el pedazo de cdigo anterior es una variable global, podemos modicar el color del ltimo vrtice de nuestro tringulo para nos de una idea de como de alto est nuestro volumen.

INTERFACES TANGIBLES

En los interfaces tangibles la interaccin entre mundo real y virtual se restringe a las 2D.

glColor3f(fabs(a) / (2 * M_PI),0,0); Con esto terminamos nuestra breve introduccin a la realidad aumentada con ARToolkit. Hay varias funciones que no hemos comentado, pero no os queremos quitar toda la diversin. Las bases os las hemos contado, y la diferencia entre nuestro sencillo interfaz tangible y cualquier otra aplicacin AR est en vuestras manos. Por ejemplo, nosotros hemos ampliado el ejemplo que describimos en este artculo para improvisar un reproductor MP3 con controles wireless :), conectando nuestro botn con mplayer a travs de su modo esclavo. Visitad nuestro canal de YouTube o los recursos al nal del artculo para verlo en accin.

En este sencillo ejemplo vamos a suponer que el sistema de audio de nuestro ordenador est controlado con PulseAudio. Simplemente necesitamos elegir un interfaz y este parece ser el ms comn ltimamente. La modicacin del volumen la haremos utilizando la funcin estndar system de forma que modicar el programa para que funcione con otras conguraciones debera ser muy sencillo. As que todo lo que necesitamos saber es como decirle a PulseAudio que queremos modicar el volumen del sistema. Afortunadamente para nosotors (bueno, realmente lo hemos hecho a propsito :), PulseAudio incluye una conveniente herramienta de lnea de co-

OCCAMs Razor | 26

M RPIDO

Resultado Final de nuestro interfaz tangible para mplayer

SIFT, SURF Y COMPAA


No podemos terminar este artculo sin daros algunas indicaciones sobre como funcionan los sistemas de realidad aumentada ms actuales que ya no necesitan markers o patrones como los que hemos utilizado en este ejemplo. Realmente no es que no utilicen patrones, sino que ahora, los patrones son imgenes arbitrarias y por lo tanto ms fcil de integrar en nuestras aplicaciones. En general todos esto sistemas se basan en algn algoritmo de extraccin de rasgos de imagen (image features en ingls), algo as como descubrir los puntos interesantes de las imgenes y asignarles un vector de valores que luego puede ser utilizado para reconocer tanto la imagen original como su posicin y orientacin. Existen varios de estos algoritmos, pero quizs el ms popular, por sus buenos resultados es SIFT (Scale Invariant Feature Transform o Transformacin de rasgos invariante con la escala). El algoritmo fue publicado por David Lowe all por 1999, pero lo que realmente revolucion el mundo de la realidad aumentada fue otro algoritmo, conocido como SURF (Speeded Up Robust Feature Rasgos Robustos Acelerados ). Conceptualmente ambos algoritmos son similares y

ambos se basan en la extraccin de features de la imagen, pero SURF fue diseado para funcionar muy rpido y eso era fundamental en las aplicaciones de Realidad Aumentada. Lo interesante de estos algoritmos es lo robustos que resultan frente a variaciones de escala, rotacin e iluminacin de las imgenes (dentro de unos mrgenes), lo que es fundamental en aplicaciones que se no se utilizarn en entornos controlados. Existen otras muchas tcnicas y probablemente aparecern ms. Las pginas de Wikipedia sobre deteccin de rasgos describen buena parte de ellos para aquellos de vosotros que queris profundizar en el tema.

RECAPITULACIN
Aunque ARToolkit no es la librera de realidad aumentada ms avanzada que nos podemos encontrar en 2012, sigue siendo un excelente punto de entrada en este apasionante mundo y un trampoln hacia soluciones ms complejas. An con sus limitaciones, ARToolkit permite crear muchas e interesantes aplicaciones AR y sobre todo, recordad que la tecnologa no es lo ms importante. Lo importante es la idea.

RECURSOS
Pgina Ocial de ARToolkit http://www.hitl.washington.edu/artoolkit/ http://www.hitl.washington.edu/artoolkit/documentation/vision.htm http://www.hitl.washington.edu/artoolkit/documentation/devstartup.htm Pginas Wikipedia de Referencia http://es.wikipedia.org/wiki/Realidad_aumentada http://en.wikipedia.org/wiki/Brain-computer_interface http://en.wikipedia.org/wiki/Scale-invariant_feature_transform http://en.wikipedia.org/wiki/SURF

27| OCCAMs Razor

HISTORIA

Homenaje Pstumo a la televisin analgica


por Fernando Martn Rodrguez

Historia de la Televisin

uando David (el director de esta revista) me pregunt: Qu hacemos esta vez para la seccin de historia? , la verdad es que me sorprendi. Ya saba que me haba convertido en historiador tecnolgico acionado (que me perdonen los historiadores de verdad), pero: Hemos llegado a consolidar una seccin ja en la revista? Posiblemente, la respuesta es s ya que en cuatro nmeros publicados hay tres artculos de esta temtica. La serie sobre biometra tuvo otros tres artculos, ste es el cuarto de la seccin de historia. Y. . . Sobre qu escribir? En aquel momento era inminente el apagn analgico del 3 de abril de 2010, por eso la decisin tomada fue sta: escribir sobre la historia de la televisin (s, a veces, los artculos tienen un poco de retardo). Tal vez, hasta podramos poner un subttulo: Homenaje pstumo a la televisin analgica.

EL SUEO IMPOSIBLE
He plagiado el ttulo de esta seccin de un texto del profesor (y compaero) Xulio Fernndez Hermida. Con l se reere a que los primeros expertos en comunicaciones quisieron llegar ms all del telgrafo (primer sistema de telecomunicacin de la historia) y ser capaces de llevar la realidad que ocurre en un lugar a otro lugar alejado. El telfono (ao 1876) ya supuso un avance en ese sentido, porque permite comunicarse a las personas de la forma ms habitual para ellas (hablando). Por eso fue (y sigue siendo) el sistema de telecomunicacin ms utilizado de la historia. Pero faltaba algo diferente. Tambin haba inters por ser capaz de transmitir ciertos contenidos: teatro, msica, deporte, otros espectculos. . . La radio naci en 1920 (aunque ya hubo experimentos desde 1906). Se haba cumplido parte del sueo: un espectculo producido en un teatro poda ser enviado a muchas personas en sus casas. Qu faltaba? Todos lo sabemos: las personas recibimos la mayor parte de la informacin por dos sentidos: la vista y el odo. Se haba conseguido acercar los odos de los usuarios al espectculo pero faltaban los ojos. El sueo se empez a completar en 1897 cuando Carl Ferdinand Braun invent el osciloscopio (1897) y con OCCAMs Razor | 28

l el tubo de rayos catdicos. Este invento junto al descubrimiento de las propiedades electropticas del selenio (su resistencia vara con la luz que recibe) permiti al ruso Vladimir Zworykin desarrollar el iconoscopio, el primer tubo de cmara prctico (ao 1923). El tubo de cmara fue la primera tecnologa de captura de imagen en movimiento. Se basaba en un tubo de rayos catdicos y una resistencia variable con la luz. No fue sustituido hasta la dcada de los noventa, cuando aparecieron los sensores de imagen de estado slido (CCDs). La tecnologa de los tubos de rayos catdicos tambin se emple en receptores de televisin y monitores de ordenador (tubos de imagen) hasta nales de los noventa, en esa poca la tecnologa de cristales lquidos LCD alcanz la calidad suciente para ser una opcin viable. Tambin en ese momento aparecieron los primeros monitores de plasma. El considerado por todos como padre de la televisin es John Logie Baird que en 1927 logr transmitir una seal a una distancia de 438 millas entre Londres y Glasgow, para ello introdujo una seal analgica en un cable telefnico interurbano. En 1937 estaba en el mercado en Inglaterra un receptor de TV de 405 lneas. La empresa que lo fabricaba era la Marconi-EMI (fundada por el conocido inventor Guillermo Marconi). A partir de aquel momento el sueo se haba cumplido, siempre parcialmente, porque ver un espectculo por televisin nunca ser lo mismo que estar all. Por supuesto, este nuevo servicio experiment muchas mejoras y cambios y eso ser lo que comentaremos en el resto del artculo.

LA SEAL DE TV BLANCO Y NEGRO


La seal original de televisin dependa mucho del sistema concebido para generarla: el tubo de cmara. Un tubo de cmara, como vimos en el apartado anterior, es un caso particular de tubo de rayos catdicos. Esto es: una cmara de vaco donde una gran diferencia de potencial provoca una descarga: un haz o ujo de electrones a gran velocidad (esta corriente circulando por el vaco es lo que recibe el nombre de rayo catdico). En los tubos de televisin (tubo de cmara y tubo de imagen) se utilizaban bobinas (bobinas de deexin) para crear campos magnticos capaces de dirigir el haz al punto deseado (ntese que existen electrodos de enfoque que consiguen que el haz sea estrecho y directivo). En el tubo de imagen se obliga al haz a recorrer toda la supercie disponible por lneas.

HISTORIA

Figura 2 - Funcionamiento del ojo.

Con eso se pretende obtener el brillo de cada punto de la imagen. Si os jis en el esquema de la gura 1, el circuito se cierra atravesando un conductor fotorresistivo (hecho de selenio, material cuya resistencia cambia con la luz incidente). El tubo de cmara funcionaba as: en cada instante, el haz llega a un punto y cierra el circuito a travs de ese punto (y la resistencia depende del brillo que llega a ese punto). Al igual que el ojo humano y que las cmaras de fotografa, un sistema ptico se encarga de formar una imagen sobre una supercie fotosensible (la capa de selenio).

Dado su origen tenemos una seal barrida por lneas, es decir: la seal va a ser una forma de onda analgica proporcional al brillo de la imagen y que la recorre por lneas. Ntese que hablamos de brillo (sensacin de luminosidad de la luz, que aumenta con la energa transportada por la misma) pero no de color, en cada punto tendremos un color gris del brillo adecuado; el brillo mnimo es el color negro y el mximo es el blanco. En la gura 3, podemos ver que los tramos correspondientes a las diferentes lneas van separados por mnimos de tensin. Esos pulsos reciben el nombre de sincronismos horizontales y ocupaban el 25 % del margen dinmico (margen dinmico de una seal normalizada: 1 V). Ntese que se eligi un valor muy grande para proteger los sincronismos (en un tiempo en que la electrnica no era muy avanzada). Durante el tiempo que duran estos sincronismos (tiempo no activo de una lnea) el haz del tubo receptor vuelve a su posicin horizontal inicial (en esos momentos el haz de electrones est cortado, este tiempo tambin se llama tiempo de borrado o tiempo de retorno horizontal).

Figura 1 - Esquema del tubo de cmara.

Figura 3 - Forma de onda de la seal de blanco y negro.

29| OCCAMs Razor

HISTORIA

Durante el resto del tiempo (tiempo activo) la tensin indica el brillo o luminancia de la imagen. Los valores grandes de tensin provocarn un haz de electrones grande y un brillo grande (cercano al blanco), los valores pequeos de tensin provocarn haces dbiles y puntos oscuros (cercanos al negro).

proporciona sensacin de movimiento pero es insuciente para evitar el icker o parpadeo de la imagen en pantalla. Para evitar este problema se recurri al barrido entrelazado: las lneas no van ordenadas de manera natural (1,2,3,4... ) sino divididas en dos subcuadros o campos: el primero formado por las impares (1,3,5...) y el segundo por las pares (2,4,6... ). Como consecuencia del entrelazado cada imagen supone dos recorridos verticales de pantalla. Como consecuencia, el recorrido del haz de un tubo de cmara tambin era entrelazado al igual que el de un tubo de imagen. La tasa de imgenes de la televisin se eligi igual a la mitad de la frecuencia de la seal de corriente alterna (la corriente alterna oscila con 50 Hz en Europa y 60 Hz en Estados Unidos). Esta eleccin fue necesaria para eliminar ciertas interferencias debidas a la red elctrica. Adems de eso, en Europa se eligi un sistema con 625 lneas por imagen (576 activas) y en Estados Unidos el sistema se dise con 525 lneas (480 activas).

Figura 4 - Tubo de imagen (monitor blanco y negro con TRC). El haz de electrones cierra un circuito con la capa de aluminio (nodo) y la energa del impacto es absorbida por el fsforo que emite luz de intensidad proporcional a dicha energa.

LA TV COLOR: NTSC, PAL Y SECAM


Entre los aos 40 y 50 la televisin en blanco y negro lleg a casi todo el mundo. Por ejemplo, en Espaa se empez a emitir en 1956 (aunque se venan realizando pruebas desde 1952). El deseo de incorporar el color era natural entonces, y ms con la experiencia del cine, que haba logrado incorporar la tecnologa del color en 1935. En EEUU fue la cadena de TV CBS la que inici la investigacin fundando el comit NTSC (Nacional Televisin System Committee). Dicho comit data de 1930 y pretenda encontrar una extensin a la seal blanco y negro que permitiera emitir en color pero que, adems, la seal fuese compatible con los televisores blanco y negro existentes (esto es: que la seal se pudiese visualizar, en blanco y negro, pero correctamente sin interferencias del color). El sistema NTSC no fue aprobado por la FCC (Comisin Federal de Comunicaciones) hasta la dcada de los 50. El sistema NTSC se adopt en Estados Unidos, gran parte de Latinoamrica y algunos pases de extremo oriente: Japn, Filipinas. . . En la historia de la TV en color, debemos mencionar los trabajos realizados por el ingeniero mexicano Guillermo Gonzlez Camarena que patent un sistema de color en 1940. Posteriormente, colabor con investigadores norteamericanos en 1950. Fruto de su trabajo se desarroll el sistema bicolor simplicado con el que se emiti TV en color en Mxico entre 1962 y 1968. Gonzlez Camarena muri en accidente de trco en 1965. Su falta hizo que el sistema bicolor dejara de desarrollarse y que Mxico decidiera pasarse al sistema NTSC (haba adems una gran presin para adoptar un sistema compatible con el resto del mundo ante el gran evento de la olimpiada de Ciudad de Mxico, 1968).

Adems de los sincronismos de lnea (u horizontales) es necesario sealizar donde empieza y acaba cada imagen. Para eso se han introducido una serie de lneas que no llevan informacin de imagen (lneas no activas). Varias de esas lneas tienen perles de tensin especcos que le sirven al televisor para identicarlas y as saber que ha acabado una imagen y va a empezar la siguiente. A estas lneas se les llama: lneas de sincronismo vertical. Las lneas de sincronismo vertical son lneas no activas porque no tienen imagen (aunque son necesarias para la sincronizacin de la seal). Adems de estas lneas no activas incluyeron muchas ms: en la TV europea, de un total de 625 lneas por imagen se tienen 576 activas y 49 no activas. El sincronismo vertical ocupa 18 lneas. El exceso de lneas no activas (49-18 = 31 lneas) se pens para dejar espacio para usos futuros. En las primeras emisiones esas lneas estaban vacas (la seal era nula). Despus, tuvieron varios usos: teletexto (seal digital), seales para el control de calidad (por ejemplo, se pueden introducir sinusoides de diferentes frecuencias y se ve en qu estado se reciben, con lo que se tiene una idea de la respuesta en frecuencia de un canal) e incluso seales para controlar acceso a servicios de pago (sistemas de acceso condicional analgico como nagravision utilizado por Canal+ analgico). Por ltimo, en la gura 3 podemos ver que las lneas aparecen numeradas de una forma extraa (primero las impares y despus las pares). Eso se debe a que la tasa temporal de imgenes entonces era relativamente baja: 25 imgenes por segundo en Europa y 30 imgenes por segundo en Estados Unidos. Este nmero

OCCAMs Razor | 30

HISTORIA

Figura 5 - El espectro de la seal B/N ocupa 5 MHz de ancho de banda, pero si aumentamos la resolucin vemos que no es un espectro continuo sino que se trata de lbulos separados.

En Europa se desarroll el sistema PAL (Phase Alternate Line), que realmente es una mejora del sistema NTSC, inventada por el investigador Walter Bruch en los laboratorios de Telefunken (Hannover, Alemania) en 1963. El PAL ha sido el sistema de TV analgica ms extendido en el mundo. No sin variantes, fue adoptado en la mayor parte de Europa (excepto Francia y Europa del este), Brasil, Argentina, Paraguay, Uruguay, gran parte de frica (excepto pases de habla francesa), Australia, China, la India, Turqua y pases rabes. En Espaa se utiliz en TV terrena, hasta el pasado 3 de abril de 2010 (aunque sigue en uso en algunas plataformas de TV por cable). Aun sigue en uso en muchos pases que no han completado la transicin a TV digital. Es el sistema de TV con ms usuarios de la historia y, seguramente, todava es el ms visto del mundo. El ltimo sistema analgico del que hablaremos es el SECAM (Sequentiel Couleur Avec Mmoire) desarrollado en Francia por Henri de France trabajando en la empresa Thomson (Boulogne, Francia). Realmente, es un sistema ms antiguo que el PAL que se adopt en Francia y pases de su inuencia: Marruecos, Tnez, Camern. . . Tambin fue adoptado por la antigua Unin Sovitica y por otros pases del este de Europa.

Todos los sistemas de color analgicos se basan en expresar la seal en color como una seal en blanco y negro (B/N) a la que se suma una componente de color. As se logra que los receptores blanco y negro reciban su seal de siempre y no se preocupen por la parte de color; el receptor en color deber disearse para detectar la parte de color. Una de las especicaciones de diseo fue que el ancho de banda total de la seal en color fuese el mismo de la antigua seal B/N, as se aprovecharan las antenas emisoras y toda la infraestructura dedicada a llevar la seal a los centros emisores (red terrestre de distribucin). Esta restriccin obliga a encontrar un hueco o zona sin informacin (o sin mucha informacin) en la seal B/N y, adems, implica que el color realmente va a ser una seal interferente que puede provocar errores (sumar ruido a la seal de brillo). Esa interferencia del color sobre la luminancia, llamada cross-color, ha existido siempre en la TV analgica. Tambin hay una interferencia de la seal de brillo (o luminancia) sobre el color: cross-luminancia. Una imagen en color est formada por tres imgenes o seales: R, G y B que miden el contenido de cada punto luminoso en tres colores bsicos o primarios: rojo, verde y azul.

Figura 6 - La seal de color (verde) se coloca en la parte de frecuencia alta donde la luminancia (verde) ya es dbil. Adems, se modula de tal forma que los mximos no coincidan.

31| OCCAMs Razor

HISTORIA

En el sistema NTSC se decidi utilizar una conversin de las seales originales R, G y B segn las siguientes frmulas: Y = 0,299R + 0,587G + 0,114B I = 0,595R 0,274G 0,321B Q = 0,211R 0,522G + 0,311B Donde la seal Y corresponde con una seal B/N equivalente a la imagen en color que tenemos. Las componentes I y Q son la parte de color y sern aadidas a la seal B/N (seal principal).

La portadora de color es de 4.43 MHz. La mayor resolucin implica que se debe subir ms en frecuencia para llegar a la zona de componentes dbiles de luminancia. La caracterstica ms denitoria del PAL (la que le da su nombre: Phase Alternate Line) es la alternancia en fase de la seal de color. Esto, bsicamente consiste en que la seal de color va modulada con una fase en una lnea y con fase opuesta en la siguiente. Los receptores PAL reciben ambas fases y promedian las seales demoduladas. Con esto se consigue anular los errores de color que aparecan, a veces, en el NTSC. Por ltimo, el sistema SECAM se basa en enviar alternativamente las dos componentes de color: en una lnea se enva U (Cb ) y V (Cr ) va en la siguiente. En este sistema, el color se modula en FM: al tener una sola componente por lnea se puede utilizar un sistema de modulacin ms robusto pero con ms gasto de ancho de banda. Algunos ingenieros dicen que el SECAM es un sistema inferior ya que la resolucin en las componentes de color se reduce a la mitad y los receptores tienen que almacenar la lnea anterior del componente que falta para repetirla. Yo creo (y digo creo porque no me he puesto a hacer simulaciones para demostrarlo) que la prdida de resolucin en el color no causa errores importantes (de hecho, tambin se hace en los sistema digitales) y, sin embargo, la mayor robustez de la modulacin FM hace a SECAM un sistema superior. Como la cuestin no parece resuelta (he encontrado opiniones en ambos sentidos pero ninguna parece denitiva, ni siquiera mayoritaria), es casi seguro que la diferencia de calidad entre SECAM y PAL era muy leve. No puedo armarlo categricamente porque no he podido compararlos en persona.

La seal de TV en color reduce la calidad de las componentes de color


Fijaos que si tenemos R = G = B (que es lo que ocurre con una seal gris, esto es: una imagen que ya es blanco y negro como una pelcula antigua) las componentes de color se anulas (I = Q = 0). A las seales I y Q se les aplicar una reduccin de calidad (en analgico un ltrado paso-bajo) y se modularn en una frecuencia de 3.58 MHz (subportadora de color) antes de ser sumadas a la seal principal. Fijaos que se usa la idea de que la parte de color es menos importante y se puede reducir su calidad (esa es una idea que se sigue utilizando en los sistemas digitales). La subportadora de color se ha elegido de forma que la interferencia se sume en la parte menos signicativa de la seal de luminancia. Adems el valor de esa frecuencia se eligi de forma que los mximos en el espectro de color (una vez modulados) no coincidieran con los de luminancia interferencia no destructiva. La TV PAL utiliza la misma idea del sistema NTSC (modular el color con una sub-portadora auxiliar). Las diferencias son las siguientes:

PAL tiene 25 imgenes por segundo y 625 lneas por imagen (frente a 30 imgenes por segundo con 525 lneas cada una en NTSC). Desde siempre, la TV europea ha tenido ms resolucin pero menos imgenes por segundo que la Una cuestin polmica es por qu Francia adopt el norteamericana. SECAM. Era un sistema de diseo ms antiguo (y de origen nacional) pero se adopt para difusin cuanPAL utiliza otras frmulas para la transformado el PAL ya dominaba en Europa. Se dice que pudo cin del color: inuir cierto proteccionismo: adoptando un sistema Y = 0,299R + 0,587G + 0,114B diferente se protege a la industria nacional de la lleU = 0,49(B Y ) gada de equipos extranjeros (que acabaron llegando V = 0,88(R Y ) ya que a partir de los 90 los diseos de televisores utilizaban chips decodicadores de vdeo capaces de A veces, a estas componentes se les llama Y, Cb, entender PAL, NTSC y SECAM). Cr y cumplen la misma propiedad de las YIQ; Algunos ingenieros norteamericanos bromeaban desi R = G = B (color gris), las componentes de niendo SECAM como System Essentially Contrary to color U y V se anulan. the American Method.

Los principales sistemas de TV en color analgicos son NTSC, PAL y SECAM

OCCAMs Razor | 32

HISTORIA

El sistema NTSC (EEUU 1953) utiliza una codicacin del color en cuadratura en la que la seal I va modulada por cos(w0 t) y la Q por sen(w0 t). En este tipo de codicaciones el vector de color (o el nmero complejo I+jQ) cumplen la siguiente regla: Su mdulo, s = U 2 + V 2 es proporcional a la saturacin o pureza del color. Un color de alta saturacin tiene un porcentaje de blanco bajo. Mientras que si S es pequea, el color tiene mucha parte de blanco. Su fase, = tg 1 ( V U ) es proporcional al tinte o matiz del color. El tinte es un ngulo que indica de qu color (rojo, naranja ...) es el punto en cuestin. El origen ( = 0) se suele poner en el rojo y existe una gura llamada vectorscopio que nos indica la distribucin de los colores.

Figura a1 - Vectorscopio, el tinte vara con el ngulo, la saturacin crece al alejarse del centro.

El problema del sistema NTSC es que la acumulacin de amplicadores en el camino de la seal puede generar un error constante en la fase de la seal en cuadratura. Eso genera un error constante en el tinte y hace que las imgenes salgan con colores falsos. Los televisores norteamericanos tienen un mando para ajustar el tinte (H de hue, en ingls). Los diseadores del PAL (1963) se propusieron evitar este problema. La solucin fue alternar la fase de la componente en cuadratura. En la lnea N se enva el color segn la frmula: U cos(w0 t) V sen(w0 t) y en la lnea N+1 se le cambia el signo a V: U cos(w0 t)+ V sen(w0 t). Eso dibujado en forma de vector podemos verlo en la gura siguiente (en la mitad de las lneas enviamos el tinte cambiado de signo). Como el diseador del receptor ya sabe esta caracterstica, lo que hace es cambiarle el signo a la componente V decodicada en las lneas en que se le cambi el signo. Adems, se hace el promediado de U y V entre el valor de la lnea actual y el valor correspondiente a la lnea anterior (para ello los televisores PAL incorporan un circuito que retarda la seal 64 seg , tiempo de lnea de este sistema). Ese promediado es capaz de compensar errores de tinte (gura 3.8) al precio de introducir errores mnimos ya que en vez de recibir el valor autntico, se est promediando el color con el de la lnea anterior (dos pxeles ms arriba debido al entrelazado), todo funcionar bien si la imagen es suave, suposicin que suele ser cierta).

Figura a2 - Alternancia de fase en el sistema PAL (vista en polares: tinte, saturacin).

Figura a3 - Correccin de un error de tiente (negativo).

33| OCCAMs Razor

HISTORIA

INTENTOS DE MEJORAR LA TELEVISIN ANALGICA

Una vez consolidados los sistemas analgicos de televisin en color la tecnologa de receptores evolucion mucho. Por ejemplo, algunas mejoras importantes fueParalelamente al inters por la alta denicin, naci ron: el concepto de formatos panormicos. La idea es que El mando a distancia (nales de los 70). . . que la relacin de aspecto clsica (4/3) es muy baja: la oblig a centralizar en una CPU el control de to- pantalla es casi cuadrada y el usuario mantiene los dos los elementos variables del equipo y supuso ojos jos en la pantalla sin apenas moverlos. Desde un cambio radical en el diseo de los receptores. siempre, el cine ha sido una experiencia ms agradable porque la pantalla ms ancha permite que la El tubo de imagen trinitron que posibilitaba mirada del observador se desplace por la misma. Se pantallas con una curvatura mnima y mayor deni como formato panormico aquel que tiene una brillo. Sony retuvo la patente durante el lmite relacin de aspecto al menos aproximadamente igual legal de 20 aos y en el momento de su cadu- a 16/9 = (4/3)2 . cidad (1996) surgieron muchas imitaciones: at- El primer formato comercial capaz de enviar televisin tron, diamondtron. en formato panormico fue el PALplus. Un televisor Relacionado con lo anterior, empezaron a apare- PAL estndar representar una imagen panormica cer pantallas cada vez mayores de 28 pulgadas y con barras negras arriba y abajo: las 432 lneas cenms (una pantalla se suele medir por el tamao trales tendrn imagen, la franja negra superior estar fsico de su diagonal, por herencia anglosajona formada por (576-432)/2 = 72 lneas, la franja negra inferior estar formada por otras tantas. Las lneas nese mide en pulgadas, 1 pulgada = 2.54 cm). gras, realmente contienen una seal modulada en alta Este ltimo avance hizo pensar que la resolucin de los frecuencia, invisible para un televisor PAL. Un televisistemas analgicos era insuciente. Hablamos de 576 sor PALplus era capaz de decodicar esa seal oculta lneas activas en PAL y SECAM, 480 en NTSC (todos (seal de ayuda vertical) y utilizar esa informacin ellos utilizando una relacin de aspecto, ancho/alto = para generar 576 lneas con formato 16/9 (con mayor 4/3). Se deni alta denicin como aquellos sistemas ancho que las convencionales). Hubo muchas pruebas capaces de representar ms de mil lneas activas en de PALplus en diferentes televisiones europeas en los aos 90 (en Espaa se prob en autonmicas) pero pantalla. ninguna tuvo un xito destacable. Actualmente, ninLos primeros intentos de crear sistemas de alta de- gn operador utiliza PALplus. nicin fueron: MAC (Multiplexed Analog Components): se lleg a estandarizar como sistema para el envo de TV terrestre de alta denicin. Debera haber empezado a utilizarse en 1995, algo que nunca ocurri. El sistema se basa en multiplexar en tiempo las diversas informaciones necesarias: brillo, color, audio. . . Aunque se trata de concatenar seales analgicas, tanto el emisor como el receptor debern digitalizar la seal para poder ensamblar y desensamblar la seal MAC. MAC se lleg a utilizar en TV satlite pero nunca tuvo mucho xito. Tal vez el fracaso se debi al elevado precio de los receptores (en aquel momento un sistema que hiciese procesado de seal digital a gran velocidad estaba en el lmite de la tecnologa) y por el hecho de que no se ganara nada utilizando conversin a PAL para reutilizar televisores antiguos (haciendo esto en TDT se gana calidad pero convertir a PAL la seal MAC es perder la mitad de la resolucin). MUSE (Multiple sub-Nyquist Sampling Encoding): fue un sistema desarrollado en Japn en los aos 80 y fue el primer sistema de alta denicin con xito (slo en Japn). Igual que MAC es

una tcnica que combina procesos digitales con otros analgicos. Nunca se consigui importar a Europa. La principal limitacin es el enorme costo en ancho de banda que supone.

LA TECNOLOGA DE IMAGEN Y SU EVOLUCIN


Este artculo est dedicado a los avances en la seal de televisin, sus formatos y su tecnologa de emisin/recepcin. Paralelamente a la seal tambin ha evolucionado la tecnologa de imagen, esto es: los dispositivos de captura (cmaras) y representacin (monitores). Este apartado se ha incluido para conocer un poco de esta evolucin. Hasta los aos 80, tanto cmaras como monitores se basaban en tubos de rayos catdicos (tubos de vaco donde se provocaban descargas de electrones, tubo de cmara para las cmaras y tubo de imagen para los monitores). Los tubos de rayos catdicos eran pesados (porque deban soportar las presin atmosfrica sobre una cmara de vaco), grandes (necesitaban mucho fondo para dar recorrido a los haces de electrones), difciles de fabricar y de gran consumo (porque necesitan enormes tensiones para generar los haces de electrones). Los avances vinieron de la mano de aplicar una losofa digital (o discreta) creando matrices de elementos sensores para las cmaras y otras de elementos luminosos para los monitores.

OCCAMs Razor | 34

HISTORIA

Figura 7 - Sensor CCD.

Las nuevas tecnologas de imagen son los sensores CCD y los sensores CMOS. Los sensores CCD (Charged Coupled Devices), son transistores de efecto de campo sensibles a la luz. En lenguaje cuntico puede decirse que cada fotn (unidad de energa luminosa) recibido produce un par electrn-hueco (una unidad elemental de carga en la capacidad que el transistor genera entre puerta y tierra). Hasta aqu sabemos como convertir la luz en una seal (captacin de imagen) pero otro problema es conseguir leer esa imagen. Los CCDs se construyen en estructuras espaciales (1D o lineales para escneres o fotocopiadoras, 2D o matriciales para cmaras), adems, su estructura permite que la carga acumulada se pueda desplazar muy rpidamente de un transistor a otro. Esa es la propiedad que se aprovecha para leer los CCDs. Recordad que toda cmara imita al ojo, donde un sistema ptico genera una imagen sobre una supercie sensible a la luz (retina). Los CCDs se convirtieron en la primera retina electrnica y por tanto mucho ms eciente en tamao y consumo que un tubo de cmara. Los sensores CMOS se basan en el mismo principio de funcionamiento pero no utilizan desplazamientos de carga para la lectura. Se pueden leer pxel a pxel y permiten integrar ms funciones en el chip. Durante mucho tiempo fueron una alternativa barata pero de inferior calidad comparados con los CCDs. Los primeros sensores CMOS no podan competir con los CCDs en nmero de pxeles por unidad de rea, por eso se utilizaban en cmaras sencillas y baratas (webcams). En los ltimos aos la tecnologa CMOS ha mejorado mucho llegando a ser comparable a los sensores CCD. En cuanto a los monitores debemos destacar dos nuevas tecnologas: la tecnologa de cristal lquido o LCD y la tecnologa de plasma. Tecnologas de cristal lquido (LCD) se basan en la propiedad de ciertos materiales de ltrar la luz de manera diferente segn el campo elctrico que reciben. Una luz inicial es polarizada por un ltro polarizador (polarizador pasivo: ngulo de polarizacin jo), despus se atraviesa el material (polarizador activo: que puede cambiar o no el ngulo de polarizacin segn la tensin recibida) y se encuentra, por ltimo, otro ltro polarizador (un polarizador pasivo con un ngulo

diferente al inicial). La luz atravesar o no el segundo ltro dependiendo de si el material ha girado la polarizacin inicial o no. El material consiste en un lquido que contiene molculas orgnicas en suspensin. Los primeros displays LCD eran sistemas pequeos para calculadoras y relojes. El material se excitaba a travs de electrodos individuales. Para monitores se han impuesto matrices activas que se basan en transistores TFT (Thin Film Transistor) que permiten aplicar tensiones individualizadas para gobernar cada pxel.

Figura 8 - Monitor TFT

Los monitores de plasma se basan en la propiedad de ciertos gases (como Argn, Xenn y Nen) de ionizarse y emitir luz ultravioleta al ser sometidos a tensiones fuertes (es el mismo principio de los tubos uorescentes). Se crea una matriz de celdas de gas que son controladas por electrodos. El gas emite luz ultravioleta que es captada por granos de fsforo parecidos a los de los monitores de tubo. El efecto es el mismo: al absorber la energa de la luz ultravioleta, el fsforo brilla (emite luz visible). Esta tecnologa produce un tamao de pxel mucho mayor que en los monitores LCD (no se ha conseguido bajar de 0.3 mm, las imgenes son de menor resolucin: menor nmero de pxeles por unidad de longitud). Por eso, se usa en pantallas grandes que van a ser observadas a distancia y no en monitores de ordenador. Otros problemas son: la prdida de brillo por desgaste del fsforo y el mayor consumo. 35| OCCAMs Razor

HISTORIA

Como ventajas: no se ven afectados por campos electromagnticos externos (aunque, a cambio, producen mucha radiacin) y son muy rpidos. Por ltimo, destacar que un monitor de plasma no es capaz de crear puntos de intensidad intermedia, todos los brillos son todo o nada. Para lograr intensidades se hace que los elementos conmuten a una frecuencia invisible para el ojo y el ciclo de trabajo (tiempo activo/tiempo total) determina el brillo.

acuerdo con las tablas de cuanticacin calculadas por A. B. Watson en 1993. Dichas tablas indican hasta donde se puede degradar cada coeciente segn su posicin (en frecuencia) sin que haya degradacin apreciable en la calidad que percibe el usuario nal. Esta cuanticacin, a grandes rasgos, va a reducir el margen dinmico de cada coeciente (y por tanto el nmero de bits necesarios para su representacin) y, sobre todo, va a convertir en cero muchos coecientes de alta frecuencia. La cuanticacin (que es la parte que introduce una prdida de calidad inapreciable) no es ms que una preparacin para aplicar un algoritmo de codicacin variable (se puede usar el cdigo de Human o alguna variante). El reducido margen dinmico de los coecientes y, sobre todo, la gran cantidad de ceros en la parte de alta frecuencia, hacen que la compresin (sin prdidas) sea muy grande. JPEG es por tanto un algoritmo de compresin con prdidas (invisibles segn el clculo de Watson) que permite reducir el tamao binario de una imagen digital dividindolo por factores de hasta 20. Por sus buenos resultados y porque es fcil de implementar se ha convertido en el estndar de facto en compresin de imagen ja. Y lo que os estaris preguntando es: Por qu hablar de JPEG en un artculo sobre televisin? Simplemente porque fue el primer paso en el desarrollo de estndares de codicacin de vdeo. Pensad que JPEG prcticamente resuelve el problema de aprovechar al mximo la redundancia espacial (parecido de un pxel con sus vecinos) para comprimir una imagen. Poco despus de JPEG, empezaron a aparecer estndares de codicacin de vdeo: M-JPEG (Motion JPEG): es la idea ms simple, cada fotograma (imagen individual) se codica en formato JPEG. Al no aprovechar la redundancia temporal (parecidos entre fotogramas) se trata de un mtodo ineciente (baja compresin). A pesar de ello, MJPEG y algunas variantes (DV-25) se siguen utilizando en dispositivos como videocmaras. AL tratarse de un mtodo simple es adecuado para sistemas con poca potencia de clculo y, adems, al trabajar con imgenes independientes es un formato adecuado para poder editar el vdeo grabado que despus se convertir a un formato ms eciente. H.261: pensado para videoconferencia es el primer estndar que introduce el concepto de codicacin hbrida (transformada DCT para la redundancia espacial y codicacin predictiva para la redundancia temporal). H.261 codica la primera imagen con un mtodo prcticamente igual al estndar JPEG. Despus, se hace una prediccin de cmo ser la siguiente imagen y se codica JPEG la diferencia entre la imagen que realmente hay y su prediccin.

Figura 9 - Monitor de Plasma

MPEG Y DVB: TELEVISION DIGITAL


Y bien. . . hemos llegado a la actualidad. De esta parte hablaremos poco. . . en parte porque todava no es historia y tambin porque ya llevo escrito mucho y me estoy cansando :). Hacia el ao 1986 se consigui reunir al Joint Photographic Experts Group ms conocido como JPEG. Como adivinaris este grupo de expertos denieron el conocido estndar de codicacin de imagen ja, aunque tardaron hasta los primeros 90 (s, s, JPEG es ms que un formato de chero, es un estndar que contiene varios algoritmos de compresin llamados modos de JPEG). El algoritmo bsico JPEG (JFIF) consiste, simplicando, en los siguientes pasos: Si la imagen es en escala de grises, slo tendremos luminancia. Si es en color la convertiremos al formato YUV con lo que tendremos tres subimgenes (planos). Los planos U y V pueden ser sub-muestreados, esto es: se eliminan algunas muestras. Hay varios formatos. El ms habitual es el que reduce U y V a imgenes de la mitad de altura y la mitad de anchura. Cada plano se divide en bloques (o matrices) de tamao 8x8. Para cada bloque se calcula la transformada discreta del coseno (DCT: Discrete Cosine Transform). Esta transformada (de propiedades similares a la de Fourier) es capaz de concentrar la mayor parte de la informacin en la parte de baja frecuencia. Los coecientes (valores de la transformada) son cuanticados, esto es: se reduce su calidad de OCCAMs Razor | 36

HISTORIA

El sistema contina hasta el innito construyendo predicciones y corrigindolas. . . Slo se envan las correcciones, las predicciones son calculadas por igual por emisor y receptor. H.261 mejor mucho cuando se comenzaron a aplicar mtodos de deteccin de movimiento que permitieron hacer mejores predicciones (aunque esto obliga a enviar al receptor los movimientos detectados en forma de vectores de movimiento). MPEG (Motion Pictures Experts Group): creado a partir de H.261 para permitir otras aplicaciones adems de la videoconferencia. H.261 no se puede utilizar para almacenar vdeos y menos para emitir televisin porque toda la secuencia depende de emitir y recibir correctamente la imagen inicial (la que se codica sin predicciones). Para superar ese problema se decidi dividir el vdeo en grupos de imgenes (GOPs: Groups of Pictures) donde la primera se codica sin predicciones y las siguientes a partir de ella. Adems, en MPEG se aadi la posibilidad de codicar algunas imgenes de forma bidireccional, esto es: teniendo en cuenta el parecido con las anteriores y con las siguientes.

El siguiente paso al MPEG fue estandarizarlo para su empleo en televisin digital. El estndar DVB (Digital Video Broadcasting) consiste en una serie de normas que denen cmo enviar y recibir vdeo. Se empezaron distinguiendo tres tipos de DVB: DVB-S (televisin digital por satlite), DVB-C (televisin digital por cable) y DVB-T (televisin digital terrestre). Cada una de estas variedades utiliza un tipo de modulacin digital diferente para adaptarse a cada tipo de canal de transmisin. Como novedades recientes podemos destacar: El uso de MPEG versin 4 para canales de alta denicin (los canales convencionales comenzaron con MPEG-2 pero para alta denicin se requiere una mayor compresin y MPEG-4 presenta aproximadamente el doble de eciencia). La aparicin de nuevas variedades de difusin como el uso de Internet como medio de transmisin. Realmente, IPTV (televisin digital por Internet) empez siendo un sistema independiente del DVB pero posteriormente el consorcio se ha unido a la iniciativa.

CONCLUSIONES
Como conclusin me gustara decir que el sueo imposible que comentbamos al comienzo sigue despertando tanto inters como al principio. Quiz su mayor encanto es que siempre ser imposible ya que por mucho que se avance nunca lograremos que la experiencia sea igual a presenciar un evento en directo (tal vez deba ser as porque de lo contrario asistir en directo no tendra inters). Debido a esta conclusin est claro que la evolucin de la televisin no terminar nunca. Actualmente el inters en el mundo audiovisual est volcado en los sistemas de visualizacin 3D. Estos sistemas aprovechan la binocularidad (visin con dos ojos) para crear sensacin de profundidad (entregando una seal diferente a cada ojo). Ya se han probado emisiones de televisin en 3D (por ejemplo, durante el mundial de ftbol de 2010) pero todava no hay un estndar establecido para ese tipo de emisiones. Sin duda, en breve lo habr.

Figura 10 - Grupo de imgenes MPEG. Tipos de imgenes: I (codicacin independiente), P (prediccin hacia adelante), B (prediccin bidireccional).

37| OCCAMs Razor

EN LA PRCTICA

Clculo de Geometra para Misiones Planetarias


por Jose Luis Vzquez Garca

Introduccin a SPICE

mento en que fue tomada. En qu instante fue tomada la imagen? Quiero usar imgenes de Mars Express para buscar rovers en la supercie de Marte. Es la resolucin de la cmara suciente? En este artculo aprenderemos a instalar la librera (el toolkit) para C, y veremos unos ejemplos sencillos que nos ayudarn a coger soltura con SPICE.

odos hemos visto alguna vez las impresionantes imgenes de Marte que obtienen las sondas espaciales que orbitan el planeta. Nos dicen que son de tal o cual crter, o del polo norte, o que corresponde a unas determinadas longitud y latitud en la supercie de Marte. Probablemente alguna vez te has preguntado cmo, una vez que la sonda enva la imagen a tierra, se calcula esa informacin. SPICE juega un papel muy importante en el proceso.

SPICE es una libreria de software (el toolkit ) y una serie de formatos de datos que pueden ayudar a un cientco a usar datos auxiliares para planicar las observaciones de un vehculo espacial, o para analizar los datos cientcos obtenidos por esas observaciones. SPICE tambin es til para cientcos e ingenieros en la planicacin de futuras misiones. En este contexto, datos auxiliares signica geometra de misin, y conversin entre diferentes sistemas de tiempo.
Por geometra de misin se entiende el clculo de los parmetros geomtricos necesarios para controlar un satlite y obtener datos de l. Por ejemplo, su posicin y orientacin, los parmetros que denen su rbita alrededor de un cuerpo, etc.

La ESA y la NASA utilizan SPICE para los clculos en algunas de sus misiones
INSTALANDO SPICE
Ya que todos los ejemplos que vamos a ver estn en C, mostraremos aqu como instalar el toolkit para Linux/C (CSPICE). Ve a la pgina: http://naif.jpl.nasa.gov/naif/toolkit_C.html y descarga el toolkit adecuado para tu ordenador, y descomprmelo en el directorio en donde lo quieres instalar. Una vez descomprimido, ve al directorio cspice, y ejecuta el script makeall.csh (csh tiene que estar instalado en el sistema). Si bien el toolkit ya viene precompilado, siempre es una buena idea ejecutar el script para descartar posibles problemas con tu equipo.
[jvazquez@cork: cspice] $ ls cspice.tar.Z [jvazquez@cork: cspice] $ uncompress cpice.tar.Z [jvazquez@cork: cspice] $ tar xf cpice.tar [jvazquez@cork: cspice] $ ls cspice/ cspice.tar [jvazquez@cork: cspice] $ cd cspice [jvazquez@cork: cspice] $ ls data/ doc/ etc/ exe/ include/ lib/ makeall.csh* src/ [jvazquez@cork: cspice] $ Pasos Necesarios para instalar SPICE. Una vez descomprimido, ejecuta el script makeall.csh para compilarlo

SPICE fue desarrollado y es mantenido por el Navigation and Ancillary Information Facility (NAIF) del Jet Propulsion Laboratory para la NASA. Es software libre en el sentido de que no est sujeto a restricciones a su exportacin bajo las leyes de Estados Unidos, y se distribuye a travs de la pgina web de NAIF sin coste alguno. En el momento de la publicacin de este artculo, SPICE est disponible en Fortran, C, IDL y Matlab para diferentes plataformas, y NAIF est trabajando en una versin Java del toolkit. La pgina ocial de NAIF, http://naif.jpl.nasa.gov ofrece toda la informacin, los toolkits y la documentacin necesaria para entender SPICE y trabajar con l. SPICE puede responder a preguntas del tipo:

Una vez compilado el toolkit, podrs ver varios direcCul ser la posicin de Rosetta vista desde la torios. De momento nos interesan include, donde se Tierra en un determinado momento? encuentran los cheros de cabecera, y lib, donde est Tengo una imagen de Marte tomada por MGS, la biblioteca de SPICE. y conozco el valor del reloj del satlite en el moOCCAMs Razor | 38

EN LA PRCTICA

LOS KERNELS DE SPICE


El toolkit es una parte de SPICE, la otra son los cheros con datos que SPICE usa para trabajar. Estos cheros se llaman kernels, y almacenan posicin y orientacin para los cuerpos del sistema solar (satlites articiales incluidos), informacin de tiempo, y parmetros que describen los instrumentos a bordo de un satlite. Los kernels pueden ser cheros binarios o de texto, y cada kernel slo almacena un tipo de informacin; es decir, un kernel no almacena, por ejemplo, informacin sobre la posicin de un cuerpo y sobre conversiones entre sistemas de tiempo (aunque esto es la mayora de las veces ms una convencin que una restriccin tcnica). Para usar SPICE en tu aplicacin, primero tienes que cargar los kernels que necesitas. No es un paso trivial, muchas veces es ms difcil averiguar cules son los kernels que hay que cargar que la aplicacin en s. No hay una regla para esto, si no que es la experiencia la que te dir que kernels necesitas y cuales no. Dnde encontrar los kernels? Para kernels genricos y misiones de la NASA, el primer sitio en el que debers buscar es ftp://naif.jpl.nasa.gov/pub/naif Para misones de la ESA, el almacn ocial es ftp://ssols01.esac.esa.int/pub/data/SPICE Adems, puedes acceder a este sitio a travs de su interfaz web. Como puedes ver, este inferfaz proporciona mucha informacin sobre los kernels, sin necesidad de entender demasiado sobre SPICE. En el siguiente artculo profundizaremos un poco ms en los distintos tipos de kernels que hay, y cmo obtener informacin bsica sobre ellos.

visto un montn de cheros de cabecera. Sin embargo, el chero SpiceUsr.h incluye todos los cheros necesarios, por lo que es la nica cabecera que necesitamos incluir en nuestros programas. Para compilar el programa, debes decir a gcc donde encontrar las cabeceras de SPICE y la librera. SPICE tiene la particularidad de que la librera (cspice.a) se enlaza como un chero objeto ms, por lo que simplemente la tienes que aadir a los parmetros de entrada de gcc, en lugar de usar el ag -l del compilador. En mi ordenador, el comando para compilar este programa sera:
gcc -o program1 program1.c /opt/SPICE/cspice/lib/cspice.a \ -I/opt/SPICE/cspice/include/

Compilando y ejecutando el programa 1.


[jvazquez@cork: programs] $ gcc -o program1 program1.c \ /opt/SPICE/cspice/lib/cspice.a \ -I/opt/SPICE/cspice/include/ [jvazquez@cork: programs] $ ls program1* program1.c [jvazquez@cork: programs] $ ./program1 1 grado = 0.017453 radianes 1 radian = 57.295780 grados

CALCULANDO POSICIONES
Ahora veremos un ejemplo un poco ms complejo que combina el trabajo con tiempos y el clculo de posiciones. Como esto requiere un conocimiento detallado de los sistemas de tiempo y de referencia espacial que usa SPICE, no te preocupes si no entiendes todo a la primera; paciencia. Para simplicar imprimir vectores, creamos la libreria print_tools, que puedes ver en el listado siguiente. Primero el chero de cabecera print_tools.h.
PROGRAMA 2: Librera para imprimir vectores
# ifndef P R I N T _ T O O L S _ H # define P R I N T _ T O O L S _ H # include < stdio .h > # include < SpiceUsr .h > void p r i n t V e c t o r( FILE * out , S p i c e D o u b l e * vector , unsigned long size ); # endif

PRIMER PROGRAMA SPICE


Vamos a crear un programa muy simple, para comprobar que SPICE se ha instalado y funciona. Simplemente, imprimiremos la razn de conversin de grados a radianes, y de radianes a grados, que en SPICE vienen dados por dos funciones, rpd_c y dpr_c.
PROGRAMA 1: Probando SPICE
# include < stdio .h > /* Cabecera de SPICE */ # include < SpiceUsr .h > int main () { float r a d i a n e s _ p o r _ g r a d o = rpd_c (); float g r a d o s _ p o r _ r a d i a n = dpr_c (); printf ( " 1 grado = %f radianes \ n " , r a d i a n e s _ p o r _ g r a d o ); printf ( " 1 radian = %f grados \ n " , g r a d o s _ p o r _ r a d i a n ); return 0; }

Y este es el chero print_tools.c


# include " p r i n t _ t o o l s. h " void p r i n t V e c t o r( FILE * out , S p i c e D o u b l e * vector , unsigned long size ) { unsigned long i ; fprintf ( out , " [ " ); for ( i = 0; i < size - 1; i ++ ) fprintf ( out , " %f , " , vector [ i ]); fprintf ( out , " %f ] " , vector [ size - 1]); }

Si has echado un vistazo al directorio include, habrs 39| OCCAMs Razor

EN LA PRCTICA

Ahora, vamos a calcular la posicin de la luna vista Fjate que el formato en que tenemos que especicar desde la tierra, en el sistema de referencia J2000, el 1 UTC es de junio de 2010, a las 12 del medioda. YYYY-MM-DDThh:mm:ss PROGRAMA 3: Calculando la posicin de la Luna (1)
# include < stdio .h > # include < SpiceUsr .h > # include " p r i n t _ t o o l s. h " int main () { S p i c e D o u b l e posicion [ 3 ]; S p i c e D o u b l e lt ; S p i c e D o u b l e et ; /* * Cargamos los kernels que n e c e s i t a m o s * para nuestros clculos */ furnsh_c ( " NAIF0009 . TLS " ); furnsh_c ( " DE405 . BSP " ); /* C o n v e r t i m o s tiempo de formato UTC a ET */ utc2et_c ( " 2010 -06 -01 T12 :00:00 " , & et ); /* C a l c u l a m o s la posicion de la luna */ spkpos_c ( " moon " , et , " j2000 " , " none " , " earth " , posicion , & lt ); printf ( " Posicion de la luna : " ); p r i n t V e c t o r( stdout , posicion , 3 ); printf ( " Km \ n " ); return 0; }

El siguiente paso es calcular la posicin de la luna, con la funcin spkpos_c. Los parmetros que recibe son: 1. target : es el cuerpo del que queremos calcular la posicin. 2. et : instante para el que queremos calcular la posicin. 3. frame : sistema de referencia en el que queremos la solucin. En nuestro caso es J2000. 4. corrections : dejaremos esto para ms adelante. De momento, siempre sera none. 5. observer : es el cuerpo desde el que queremos calcular la posicin. En este caso es earth, porque queremos calcular la posicin de la luna vista desde la tierra. 6. position : es un vector que nos da la posicin que queremos calcular, en kilmetros. 7. light time : esto lo dejaremos tambin para ms adelante.

Vemos que las variables que declaramos son de tipo SpiceDouble; SPICE, como muchas otras libreras, utiliza sus propios tipos que permiten que los progra- Si examinamos el cdigo, veremos alguna caractersmas puedan ser compilados en diferentes plataformas tica ms de SPICE: sin que haya que cambiar el cdigo. SpiceDouble est Todas las funciones de SPICE tienen el sujo denido como el tipo de datos de punto otante que _c. ocupa el doble de memoria que un tipo entero; dependiendo de tu sistema operativo, ser double o long Muchas de las funciones de SPICE no devueldouble. ven valores. En su lugar, devuelven resultados

SPICE nos permite utilizar distintos Sistemas de Referencia fcilmente


El siguiente paso es cargar los kernels que necesitaremos. DE405.BSP es el kernel que almacena informacin sobre efemrides de los principales cuerpos del sistema solar, y NAIF0009.TLS almacena informacin que permite convertir de UTC a ET, y viceversa. Puedes encontrar los kernels aqu y aqu (consultad el cuadro al nal para obtener las URL completas si los enlaces no funcionan). Ahora, ya que todos los clculos que dependen del tiempo en SPICE se realizan en ET, tenemos que pasar de UTC a ET, con la funcin utc2et_c.
ET, Ephemeris Time. El tiempo de un evento en ET se mide como segundos que han pasado desde el 1 de enero de 2000 al medioda.

en punteros que se le pasan como argumentos. Por ejemplo, la funcin spkpos_c devuelve dos valores, la posicin de un cuerpo y otro parmetro (light time ), cuyas direcciones se pasan como parmetros a la funcion (fjate que el parmetro posicion se pasa directamente, en lugar de su posicin, porque ya es un puntero). Si compilamos el programa y lo ejecutamos (no olvides incluir en la compilacin el chero print_tools ), obtendremos el siguiente resultado de la gura.
[jvazquez@cork: programs] $ ./pos_j2000 Posicin de la luna: [220242.595980, -312947.666645, -121185.983058] Km [jvazquez@cork: programs] $

El problema que tiene este programa es que nos devuelve la posicin de la luna en un sistema de referencia que no es muy til para nosotros. El sistema J2000 est denido de forma que, si colocamos el origen de coordenadas en el centro de la tierra, el eje Z es el eje de rotacin de la tierra, y el eje X es tal que el sol pasa por l en equinocio de primavera.

OCCAMs Razor | 40

EN LA PRCTICA

SISTEMAS DE REFERENCIA
En fsica existen dos tipos fundamentales de sistemas de referencia, inerciales y no inerciales. En pocas palabras, en un sistema de referencia inercial se pueden aplicar las leyes de Newton, y en uno no inercial, no. Un sistema de referencia que est quieto o se mueve a velocidad constante (es decir, que no acelera) con respecto al fondo de estrellas jas se considera inercial. El sistema inercial fundamental en SPICE es el sistema J2000 (tambin lo puedes encontrar en la literatura como EME2000), y que se dene de la siguiente forma: El centro del sistema es el centro de la Tierra. El eje Z del sistema coincide con el eje de rotacin de la Tierra. Por lo tanto, el plano XY del sistema coincide con el plano que contiene el ecuador de la Tierra. El eje X se dene de forma que el Sol lo cruza (atravesando el plano del ecuador de sur a norte) en el equinocio de verano. El eje Y completa el sistema de forma que X Y = Z .

En otras palabras, el eje X de J2000 es la interseccin del plano que contiene al ecuador de la tierra con el plano de la eclptica, que es el plano que contiene la trayectoria que sigue el sol alrededor de la tierra. Otro sistema importante es el sistema IAU para la Tierra. Es un sistema que rota con la Tierra, por lo que no es un sistema inercial. Se dene de forma que el eje de rotacin de la Tierra es el eje Z del sistema, y el eje X est contenido en el plano del ecuador y cruza la supercie de la Tierra en el meridiano de Greenwich. El eje Y completa el sistema de forma que X Y = Z . Este sistema se llama en SPICE IAU_EARTH; tambin existe un IAU_MARS, IAU_VENUS, . . . .

41| OCCAMs Razor

EN LA PRCTICA

Vamos a calcular la posicin ahora en un sistema mucho ms interesante para nosotros, el sistema IAU para la tierra, que est denido de forma que el eje Z es el eje de rotacin de la tierra, pero el eje X cruza el meridiano cero. Por tanto, este sistema gira con la tierra En el siguiente programa podemos ver que simplemente necesitamos cargar un nuevo kernel (que dene el sistema que vamos a usar), y decirle a SPICE que nos d la posicin en el nuevo sistema. El kernel lo puedes encontrar aqu. (Consulta la tabla de recursos al nal del artculo si tu enlace no funciona)
PROGRAMA 4: Calculando la posicin de la luna
# include < stdio .h > # include < SpiceUsr .h > # include " p r i n t _ t o o l s. h " int main () { SpiceDouble SpiceDouble SpiceDouble SpiceDouble posicion [ 3 ]; lt ; et ; r , lon , lat ;

plo podemos calcular el punto de la tierra que est debajo de la luna. La funcin reclat_c simplemente convierte un vector en sus coordenadas esfricas, aunque las dos coordenadas angulares son devueltas en radianes, por lo que hay que convertirlas a grados; esto es muy fcil en SPICE, simplemente tienes que multiplicar la cantidad por dpr_c().

SPICE nos permite calcular la posicin de cualquier cuerpo para el que exista un kernel
SPICE no slo calcula posiciones de cuerpos naturales del sistema solar, sino de cualquier cuerpo para el que haya un kernel con efemrides. En este ejemplo, calcularemos la posicin de Rosetta visto desde la Tierra en un instante de tiempo dado.
PROGRAMA 5: Calculando la posicin de Rosetta
# include < stdio .h > # include < SpiceUsr .h > # include " p r i n t _ t o o l s. h " int main () { S p i c e D o u b l e posicion [ 3 ]; S p i c e C h a r utc [ 50 ]; S p i c e D o u b l e lt ; S p i c e D o u b l e et ; /* * Cargamos los kernels que n e c e s i t a m o s * para nuestros calculos */ furnsh_c ( " NAIF0009 . TLS " ); furnsh_c ( " DE405 . BSP " ); furnsh_c ( " PCK00009 . TPC " ); furnsh_c ( " O R H R _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0 0 1 2 2. BSP " ); /* Leemos el tiempo de la consola */ printf ( " I n t r o d u c e el tiempo en formato " " YYYY - MM - DDThh : mm : ss : " ); scanf ( " %s " , utc ); /* C o n v e r t i m o s tiempo de formato UTC a ET */ utc2et_c ( utc , & et ); /* C a l c u l a m o s la posicion de Rosetta */ spkpos_c ( " rosetta " , et , " i a u _ e a r t h" , " none " , " earth " , posicion , & lt ); printf ( " Posicion de Rosetta : " ); p r i n t V e c t o r( stdout , posicion , 3 ); printf ( " Km \ n " ); return 0; }

/* * Cargamos los kernels que n e c e s i t a m o s para * nuestros calculos */ furnsh_c ( " NAIF0009 . TLS " ); furnsh_c ( " DE405 . BSP " ); furnsh_c ( " PCK00009 . TPC " ); /* C o n v e r t i m o s tiempo de formato UTC a ET */ utc2et_c ( " 2010 -06 -01 T12 :00:00 " , & et ); /* C a l c u l a m o s la posicion de la luna */ spkpos_c ( " moon " , et , " i a u _ e a r t h" , " none " , " earth " , posicion , & lt ); printf ( " Posicion de la luna : " ); p r i n t V e c t o r( stdout , posicion , 3 ); printf ( " Km \ n " ); /* * C a l c u l a m o s la posicion en c o o r d e n a d a s * esfericas */ reclat_c ( posicion , &r , & lon , & lat ); /* Longitud de radianes a grados */ lon *= dpr_c (); /* Latitud de radianes a grados */ lat *= dpr_c (); printf ( " D i s t a n c i a: %f Km \ n " , r ); printf ( " Longitud : %.2 f grados \ n " , lon ); %.2 f grados \ n " , lat ); printf ( " Latitud : return 0; }

Cambiar nuestro Sistema de Referencia es muy fcil. Solo tenemos que decirle a SPICE en que sistema queremos las soluciones
Al nal del programa, podemos ver por qu este nuevo sistema de referencia es til. Debido a cmo est denido, si convertimos un vector dado en este sistema a coordenadas esfricas (, , ), y se corresponden a la longitud y latitud del punto en que el vector cruza la supercie de la tierra. Por tanto, en nuestro ejemOCCAMs Razor | 42

Como ves, la nica diferencia con el programa anterior es que necesitamos cargar el kernel con efemrides de Rosetta

EN LA SIGUIENTE ENTREGA
Aprenderemos algo ms sobre los kernels, usaremos la base de datos de efemrides de la nasa para hacer nuestros propios kernels de posicin, y aprenderemos a denir un sistema de referencia referido a nuestra localizacin en la tierra.

EN LA PRCTICA

MIDIENDO EL TIEMPO EN SPICE


No es tan fcil como puede parecer medir el tiempo. Segn la teora de la relatividad, depende del observador, por lo que el tiempo medido en Marte puede no ser el mismo que el medido en Venus o en la Tierra. Adems, los sistemas que se usan en la vida diaria para medir el tiempo (en aos, meses, dias, horas,...) no son los ms adecuados para hacer operaciones. En SPICE normalmente se trabaja con dos sistemas de tiempo fundamentales, UTC y ET. La denicin de ET (Ephemeris Time) es muy complicada. ET es la variable temporal en las ecuaciones diferenciales que describen el movimiento de los planetas en el sistema solar. Puede aparecer en dos formas, TDB (Barycentric Dynamical Time) y TDT (Terrestrial Dynamical Time). TDB describe el tiempo medido desde el baricentro (el centro de gravedad) del sistema solar, y TDT el tiempo medido en la Tierra. La diferencia entre ellos, aunque pequea, cambia con el tiempo, en una poca del ao TDB va ms rpido que TDT, y en otra es al revs. Por lo tanto, la diferencia entre TDB y TDT nunca es mayor que una determinada cantidad muy pequea (del orden de una milsima de segundo). SPICE toma TDB como ET, y se expresa como el nmero de segundos que han transcurrido desde un instante determinado (la poca J2000, que es el uno de enero de 2000 a las 11 horas 58 minutos y 55.816 segundos). Este es el sistema de tiempo que usa SPICE para todos sus clculos. UTC, por otro lado, no es un sistema de medida del tiempo propiamente dicho, sino una forma de asignar un nombre a cada segundo ET. UTC intenta mantenerse en sincrona con la rotacin de la Tierra, de forma que el 1 de enero de cualquier ao el Sol est en la misma posicin. Si todos los aos tuvieran la misma duracin en segundos, esto no se cumplira, puesto que la velocidad de rotacin de la Tierra vara con el tiempo (tpicamente se va ralentizando). El IERS (International Earth Rotation Service) se encarga de mantener la sincrona, que se hace intercalando un leapsecond (segundo intercalar), normalmente a nales de junio o diciembre, si es necesario. Este leapsecond puede ser positivo o negativo, dependiendo de si se aade o se sustrae de la cuenta de tiempo. Por ejemplo, si la rotacin de la Tierra se ralentiza, el efecto es que el ao se alarga. Para corregir, se aade un leapsecond al nal de un ao, y la cuenta de segundos se correspondera con los siguientes momentos UTC:
... ... ... ... ... ... DECEMBER 31 23:59:57 DECEMBER 31 23:59:58 DECEMBER 31 23:59:59 DECEMBER 31 23:59:60 JANUARY 1 00:00:00

, en lugar de la cuenta normal:


... ... ... ... ... DECEMBER 31 23:59:57 DECEMBER 31 23:59:58 DECEMBER 31 23:59:59 JANUARY 1 00:00:00

Si la rotacin de la Tierra se acelerase (no se ha dado nunca desde que el sistema de leapseconds se introdujo en 1972), el leapsecond se sustrae (un leapsecond negativo), y la cuenta sera por el contrario:
... DECEMBER 31 23:59:57 ... DECEMBER 31 23:59:58 ... JANUARY 1 00:00:00 ...

SPICE proporciona varias funciones para convertir entre diferentes sistemas e tiempo. Por ejemplo, utc2et_c permite convertir de UTC a ET, y et2utc_c de ET a UTC. Toda la informacin que maneja SPICE est dada en ET, por lo que estas operaciones son muy comunes, para traducir el tiempo entre el sistema intuitivo que entendemos las personas y el sistema ms matemtico que usa SPICE. El hecho de que haya que llevar la cuenta de leapseconds que han ocurrido histricamente para poder hacer la conversin es la razn de que tengamos que cargar en nuestro programa un leapseconds kernel, que almacena precisamente esa informacin. Slo hay un kernel de leapseconds ocial que se actualiza cada vez que aparece un nuevo leapsecond; a da de hoy, el kernel es el NAIF0009.TLS, y el prximo ser el NAIF0010.TLS. En la siguiente entrega veremos un tercer sistema para medir el tiempo, usado por los satlites para registrar los eventos que ocurren a bordo. En el cuadro sobre sistemas de referencia hemos denido el sistema J2000, pero nos faltaba una pieza. El eje de rotacin de la Tierra no est jo, sino que sufre un efecto que se llama precesin (se mueve como una peonza), de forma que, por ejemplo, dentro de unos aos (ms bien milenios) la estrella polar se habr desviado tanto del polo norte geogrco que ya no ser til para marcar ese punto cardinal de la Tierra. Esto signica que, tal como lo hemos denido, J2000, se movera con el tiempo y ya no sera inercial. La forma de evitar esto es referir las posiciones que denen el sistema a la poca J2000. Por ejemplo, el eje Z se dene como el eje de rotacin medio de la Tierra en la poca J2000.

43| OCCAMs Razor

EN LA PRCTICA

RECURSOS
GENERAL
Pgina Ocial del Navigation and Ancillary Information Facility NAIF: Pgina Principal: http://naif.jpl.nasa.gov Descarga CSPICE: http://naif.jpl.nasa.gov/naif/toolkit_C.html

KERNELS NASA y ESA


Misiones de la NASA: ftp://naif.jpl.nasa.gov/pub/naif Misiones de la ESA: FTP: ftp://ssols01.esac.esa.int/pub/data/SPICE Interfaz Web: http://www.rssd.esa.int/index.php?project=SPICE&page=RepositoryBrowser

KERNELS UTILIZADOS EN EL ARTCULO:


Efemrides Sistema Solar: ftp://ssols01.esac.esa.int/pub/data/SPICE/MEX/kernels/spk/DE405.BSP Conversiones tiempo UTC/ET: ftp://ssols01.esac.esa.int/pub/data/SPICE/MEX/kernels/lsk/NAIF0009.TLS Kernel que dene diferentes constantes para el sistema solar, entre ellas los parmetros que describen el sistema IAU para la tierra: ftp://ssols01.esac.esa.int/pub/data/SPICE/MEX/kernels/pck/PCK00009.TPC Efemrides de Rosetta: ftp://ssols01.esac.esa.int/pub/data/SPICE/ROSETTA/kernels/spk/ORHR_______________00122.BSP

Numquam ponenda est pluralitas sine necessitate.


Quaestiones et decisiones in quattuor libros Sententiarum Petri Lombardi (ed. Lugd., 1495), i, dist. 27, qu. 2, K

OCCAMs Razor | 44

LA CACHARRERA

Constryelos fcilmente con Teensy

Teclados Personalizados
por er Teo Cla DOr

eensy es un completo sistema de desarrollo para microcontroladores basado en un interfaz USB. Un simple cable USB es todo lo que necesitamos para empezar a utilizarlo y sus posibilidades son muy interesantes, como veremos en este artculo. En el momento de publicar este artculo (nales de 2011), la versin actual de esta pequea placa es la 2.0. Podemos encontrarla en dos conguraciones denominadas, respectivamente, Teensy 2.0 y Teensy++ 2.0. Las diferencias fundamentales entre ambas versiones las podis comprobar en la siguiente tabla, extrada de la web del proyecto.

para utilizarlo en placas de prototipos o sin los pines, de forma que podris soldar los que mejor os convengan.

Con un Teensy y unos cuantos botones podremos extender nuestro teclado muy fcilmente
MS CARACTERSTICAS

Adems de lo que ya hemos comentado, su bajo precio, su pequeo tamao y unas especicaciones sucientes para abordar varios proyectos de distinta naturaleza, hay dos cosas ms que hacen esta placa bastante interesante. Elemento Teensy 2.0 Teensy++ 2.0 Procesador ATMEGA32U4 AT90USB1286 La primera es que utilizando un Teensy es prcticaMemoria Flash 32256 130048 mente trivial construir dispositivos de entrada para Memoria RAM 2560 8192 nuestros ordenadores, tales como teclados, ratones o EEPROM 1024 4096 joysticks. Esto lo veremos en seguida. I/O 25 46 Entradas Analgicas 12 8 La otra caracterstica interesante de esta placa se llaPWM 7 9 ma Teensyduino. Se trata de un paquete que extiende UART,I2C,SPI 1,1,1 1,1,1 Precio $ 16 $ 24 el entorno de desarrollo de Arduino, para trabajar con Teensy. Adems de ellos, este paquete incluye la maAdems, la versin ++, es ms larga, unos 5 cm frente yora de las libreras a las que estamos acostumbrados a los 3cm del Teensy 2.0. Nosotros vamos a trabajar con Arduino, y un sinfn de ejemplos. con el Teensy 2.0, ms que suciente para lo que os queremos contar. Para que os hagis una idea del ta- Para terminar con esta introduccin, solo comentar mao de esta pequea placa, aqu lo podis ver junto que en la web del proyecto podris encontrar los esquemas de los circuitos de todas las versiones de Teensy y a un Arduino. una librera para la utilidad Eagle con la que desarrollar vuestras propias placas, basadas en este diseo.

SOFTWARE
Para empezar a trabajar con nuestro pequeo amigo, necesitamos descargar el paquete llamado Teensy Loader de la pgina web del proyecto.

La versin de la foto es un Teensy 2.0 con los pines ya soldados. Podis comprarlo as, bastante prctico 45| OCCAMs Razor

LA CACHARRERA

La aplicacin est disponible para los principales sistemas operativos. Existe tambin una versin de lnea de comandos que podis compilar vosotros mismos si as lo prefers. Slo tenis que descargarla y ejecutarla.

El paquete Teensyduino nos permite programar Teensy desde el entorno Arduino


La aplicacin Teensy Loader nos permite reprogramar la tarjeta, en otras palabras, volcar el cdigo que deseemos ejecutar en el microcontrolador. Para generar ese cdigo necesitamos un toolchain. En el caso de los sistemas GNU/Linux, este no es otro que el proporcionado por GCC para AVR. Compilador, linker y librera estndar estn disponibles en la mayora de los sistemas GNU/Linux. Si estis utilizando otro sistema, consultad la pgina del proyecto donde encontraris instrucciones detalladas para los distintos sistemas soportados. Por tratarse este de un artculo introductorio, no vamos a profundizar en este tema. Nos centraremos en el entorno Teensyduino ms sencillo y familiar. Sin embargo, no os olvidis de que al nal, lo que escribimos en el editor del entorno de Arduino, acaba siendo compilador por gcc y descargado en Teensy por el Teensy Loader. La web de Teensy contiene instrucciones detalladas sobre como trabajar directamente utilizando estas herramientas, para aquellos de vosotros que queris sacar el mximo de ella. Para los dems vamos a instalar Teensyduino.

nuestro sistema y ejecutarlo. Una aplicacin grca realizar todo el trabajo. Lo nico que nos preguntar es donde tenemos instalado el entorno de desarrollo de Arduino. El paquete Teensyduino, no funciona con la versin del software de Arduino que de distribuye con Ubuntu. En este caso tenemos que descargar el software de la web de Arduino, y descomprimirlo donde ms rabia nos d. Luego solo tendremos que decirle a Teensyduino cual es ese lugar. Una vez hecho esto solo tenemos que lanzar arduino y seleccionar en el men Tools >Board nuestra versin de Teensy. Ahora comprobemos que todo funciona correctamente. En el men File >Examples >Teensy >Tutotial 1 cargaremos el Sketch llamado Blink (es el nico que aparece). Al principio del sketch nos encontramos una variable que indica el pin por defecto asociado al LED en Teensy. Para Teensy 2.0 es el 11 (el que aparece en el cdigo). Si estamos utilizando un Teensy++, deberemos modicar esa lnea para utilizar el pin 6.
const int const int l e d P i n = 1 1 ; // Teensy l e d P i n = 6 ; // Teensy++

Ahora solo tenemos que pulsar el botn Upload y el programa se compilar y se descargar en la tarjeta. El Teensy Loader aparecer en pantalla y nos informar del estado de la tarjeta as como del proceso de descarga del software en el microcontrolador. Si Teensy est ejecutando ya un programa, el interfaz nos informar de que debemos pulsar el pequeo botn en la tarjeta para que el nuevo programa se descargue. Lo hacemos y el pequeo LED naranja sobre Teensy comenzar a cambiar su estado cada segundo. TEENSYDUINO Tras comprobar que todo funciona perfectamente, vaLa instalacin de Teensyduino no puede ser ms fcil. mos a intentar hacer algo ms til con nuestro nuevo Solo tenemos que descargar el paquete adecuado para juguete.

Interfaz Teensiduino.

OCCAMs Razor | 46

LA CACHARRERA

DISPOSITIVOS DE INTERACCIN HUMANA (HID)

ltrado de los rebotes. Una vez hecho esto, solo tenemos que llamar al mCon nuestra conguracin actual, podremos utilizar todo update en nuestro bucle principal, ya que esta nuestro Teensy para hacer casi cualquier cosa que po- librera no utiliza interrupciones y, por lo tanto, nosodamos hacer con nuestro Arduino, pero lo que Teensy tros tenemos que forzar la lectura de los pines. hace realmente bien es simular dispositivos HID. HID (Human Interface Device o Dispositivo de Interfaz Humano) es un protocolo estndar utilizado por dispositivos diseados para la interaccin entre hombres y mquinas. La mayora de teclados, ratones, joysticks, etc. actuales son dispositivos de este tipo. Teensy tiene la capacidad de presentarse ante el ordenador al que se conecta como uno de estos dispositivos. Teensy adems nos permite enviarle informacin al ordenador utilizando este mismo protocolo y por lo tanto, puede comportarse como cualquiera de esos dispositivos. O dicho de otra forma, utilizando Teensy podemos crear, muy fcilmente, teclados, ratones o joysticks (entre otras cosas).

TECLADOS DE UNA TECLA


Vamos a empezar por lo ms sencillo, un teclado de una sola tecla. Aunque pueda parecer un poco intil, hay un gran nmero de aplicaciones en la que nos puede interesar ofrecer a nuestros usuarios solo un nmero reducido de teclas para interactuar con nuestro sistema, en lugar de un teclado completo. Pensad por ejemplo en un kiosko electrnico en un lugar pblico. Como veris enseguida, quien dice una tecla, dice dos, o tres o cuatro. Todo depender de cuantos botones queramos conectar a nuestras entradas digitales. Nuestro primer programa ser un simple simulador de barra espaciadora.
#i n c l u d e <Bounce . h> Bounce b u t t o n 0 = Bounce ( 1 , void setup ( ) { pinMode ( 1 , INPUT_PULLUP) ; } void loop ( ) { button0 . update ( ) ; if } } ( button0 . r i s i n g E d g e ( ) ) { Keyboard . p r i n t ( " " ) ; 10);

Los objetos Bounce nos ofrecen varios mtodos, pero los ms importantes para nuestra aplicacin son fallingEdge y risingEdge que nos permiten comprobar si se ha producido un anco de bajada o de subida respectivamente. En otras palabras, nos indican si hemos pulsado la tecla o la hemos soltado. En nuestro caso estamos enviando el carcter espacio al ordenador cuando liberamos la tecla. El otro comentario que debemos hacer sobre este programa es una extensin de Teensy al entorno Arduino. En la funcin setup, conguramos el pin 0 de la placa como una entrada, pero adems le estamos pidiendo que se congure en modo pull-up de forma que leeremos un valor 1 si nada est conectado, y un valor cero, cuando conectemos la entrada a tierra, es decir cuando pulsemos el botn.
PIN 0 pinMode (0, INPUT)

PIN 0 pinMode (0, INPUT_PULLUP)

+VCC

+VCC

10K

PIN 0 PIN 0

An siendo un programa muy sencillo, es necesario hacer un par de comentarios. El primero es el uso de la librera Bounce. Esta librera simplica el uso de pulsadores. Normalmente, este tipo de botones, produce un rebote de la seal. Cuando pulsamos el botn, no obtenemos un nico pulso, sino una secuencia de ellos que, si no tomamos medidas seran interpretados como varias pulsaciones muy rpidas. Este problema se puede solucionar con un sencillo circuito anti-rebotes o en el software con una librera como Bounce. El uso de la librera es muy sencillo. Solamente tenemos que crear un objeto Bounce indicndole que pin queremos ltrar, y que intervalo de tiempo en milisegundos queremos considerar para el

GND GND

Para que este programa funcione, tenemos que congurar la placa en modo teclado. Para ello en el men Tools >USB Type deberemos seleccionar uno de los tipos que incluye el teclado. Ahora solo tenemos que conectar nuestro pulsador a los pines indicados en la gura anterior y ya tenemos nuestra barra espaciadora personalizada. 47| OCCAMs Razor

LA CACHARRERA

TECLADOS SIN TECLAS. SEGURIDAD FSICA


Acabamos de ver como simular un teclado de una sola tecla, pero qu os parecera un teclado sin teclas?. Puede parecer un poco intil, pero que sucede si solo queremos escribir algo muy concreto y una sola vez... como por ejemplo una puerta trasera para tener acceso a un ordenador ms tarde. Hacer lo que acabamos de decir es un poco ms complicado que lo que os vamos a contar a continuacin, pero no mucho ms. Hay algunas personas ah fuera que ya lo han hecho, pero si alguno os animis no dudis en contarnos vuestros resultados. Nosotros os vamos a mostrar una prueba de concepto. En lugar de un caballo de Troya vamos a generar un sencillo Hola Mundo y vamos a suponer que una consola ya se encuentra abierta y lista para ser utilizada. Adems vamos a mantener nuestro pulsador. La razn es que, para depurar el programa y hacer pruebas es ms prctico que conectar y desconectar la placa todo el tiempo. En cualquier caso es recomendable tener cuidado cuando juguis con el siguiente programa, es fcil escribir algo inapropiado en el lugar incorrecto y que las cosas vayan mal. Sin ms, aqu tenis el programa que lanza vim, escribe el programa Hola Mundo, sale de vim, lo compila y luego lo ejecuta :)
#i n c l u d e <Bounce . h> Bounce b u t t o n 0 = Bounce ( 0 , void setup ( ) { pinMode ( 0 , INPUT_PULLUP) ; } void loop ( ) { button0 . update ( ) ; if ( button2 . r i s i n g E d g e ( ) ) { Keyboard . p r i n t l n ( " vim kk . c \ n" ) ; Keyboard . p r i n t l n ( ":\ %d\ n i#i n c l u d e < s t d i o . h>" Keyboard . p r i n t l n ( " i n t main ( ) " ) ; Keyboard . p r i n t l n ( " { p r i n t f ( \ " h e l l o \\ n \ " ) ; } " ) ; Keyboard . s e t _ m o d i f i e r ( 0 ) ; Keyboard . se t _ k e y 1 (KEY_ESC) ; Keyboard . send_now ( ) ; Keyboard . p r i n t l n ( " : wq\ n" ) ; delay (100); Keyboard . p r i n t l n ( "make kk \ n . / kk \ n" ) ; 10);

a modo comando en vim.

TECLAS ESPECIALES Y COMBINACIONES


Teclas como ESC o F1 no las podemos enviar utilizando el mtodo print que conocemos. De la misma forma, combinaciones de teclas como CTRL+C tampoco se pueden simular con esas funciones. En ese caso tenemos que construir nuestra combinacin de teclas a mano.

Podemos almacenar un programa en nuestro Teensy y hacer que se escriba y compile automticamente al ser conectado.
Para estos casos, disponemos de los mtodos set_modifier y set_keyN. El primero nos permite congurar los modicadores de teclado, esto es, las teclas CTRL, SHIFT, ALT y GUI (las teclas de Windows y MAC). La segunda nos permite congurar hasta seis teclas que se enviarn simultneamente cuando ejecutemos el mtodo send_now. En nuestro ejemplo anterior podemos ver como lo primero que hacemos es borrar los modicadores para, a continuacin, congurar la pulsacin de la tecla ESC y nalmente enviar todo junto. Esto nos devuelve al modo comando de vim, lo que nos permite grabar el chero en disco con el bien conocido comando :wq. Observad que tras enviar el comando esperamos un poco. En nuestra primera prueba sin el retardo, el carcter m del comando make kk se perda, al parecer porque el ordenador estaba ocupado grabando el chero en disco. Si experimentis un problema similar probad a aumentar el retardo.

MUCHO MS QUE TECLADOS

Aunque no hemos hablado de ello, para mantener el artculo corto, Teensy puede ser utilizado para cons} truir ratones o joysticks de una forma tan sencilla co} mo la que acabamos de ver para nuestros teclados esComo podis comprobar, el programa hace uso exten- peciales. Estad atentos a la lista de correo. sivo de la funcin println que nos permite enviar una Las posibilidades son muchas. desde un panel de bocadena de texto seguida de un retorno de carro. En el tones para nuestro ordenador de saln (hay un interemomento de soltar el pulsador, simplemente enviamos sante sketch en los ejemplos de Teensyduino), hasta un botn CTRL+ALT+SUPR para reiniciar servidores. todo el texto que escribiramos en el caso normal. Hay una pequea salvedad. La tecla ESC para volver Esperamos vuestros experimentos.

RECURSOS
Pgina Web de Teensy http://www.pjrc.com/teensy/index.html Todo sobre Teensiduino http://www.pjrc.com/teensy/teensyduino.html Algunas ideas de las posibilidades http://www.pjrc.com/teensy/projects.html

OCCAMs Razor | 48

TRUCOS

Con un par... de lneas


Chuletillas para hacer cosas m rpido
por Tamariz el de la Perdz

SERVIDOR WEB IMPROVISADO

8 Mantenimiento del Sistema

Python es un lenguaje de programacin que se ha po9 Interioridades del Kernel pularizado mucho en los ltimos aos. Como consecuencia de ello una enorme cantidad de mdulos es- Algunos ejemplos: tn disponibles para hacer nuestras vidas mucho ms $ man -k thread cmodas. $ man socket Uno de estos mdulos es SimpleHTTPServer que nos $ man 7 socket permite desarrollar sencillos servidores web de forma muy sencilla. De forma tan sencilla como esta: Otras pginas del manual interesantes son:
$ python -m SimpleHTTPServer $ $ $ $ $ $ man man man man man man 7 tcp 7 ip syscalls standards feature_test_macros ascii

Ahora solo tenemos que poner nuestros cheros HTML en el mismo directorio en el que hemos ejecutado nuestro comando, y apuntar nuestro servidor a localhost:8000, o a la IP de nuestra mquina si La utilidad man tienen un montn de ags interesanpretendemos acceder de forma remota. tes, no tenis ms que pedir la pgina del manual, Por defecto el mdulo escucha en el puerto 8000. Si sobre el manual... queremos utilizar un puerto diferente solo tenemos que aadirlo al nal del comando. $ man man
$ python -m SimpleHTTPServer 8080

Un mdulo muy til para sacarnos de un aprieto m rpido

DISCO SUPERRPIDO /dev/shm


El dispositivo /dev/shm es realmente memoria, y por lo tanto muy til para almacenar informacin a la que queremos acceder m rpido. Y para muestra un botn.
$ dd if=/dev/zero of=/dev/shm/test count=102400 bs=1024 102400+0 records in 102400+0 records out 104857600 bytes (105 MB) copied, 0.105547 s, 993 MB/s $ dd if=/dev/zero of=/tmp/test count=102400 bs=1024 102400+0 records in 102400+0 records out 104857600 bytes (105 MB) copied, 0.629624 s, 167 MB/s

EL HOMBRE
Existen dos ags de la utilidad man que resultan muy tiles en el da a da. El primero es -k. Este ag le dice a man que busque cosas relacionadas con la palabra clave que se pasa como parmetro. El ag -f es similar pero permite buscar cadenas. El otro es N donde N es el nmero de la seccin del manual que queremos consultar. Para los que no lo sepis estas son las secciones del manual: 1 Comandos Generales 2 Llamadas al Sistemas y Nmeros de Error 3 Librera C 3p perl 4 Dispositivos y Drivers de Dispositivos 5 Formatos de cheros y Ficheros de Conguracin 6 Instrucciones de Juegos 7 Miscelnea

EDITAR COMANDOS BASH SUPER LARGOS


Bash tiene un comando interno llamado fc que permite editar el ltimo comando tecleado en un editor. Cuando salimos del editor, lo que hayamos escrito en el editor se ejecutar Enva tus trucos Puedes enviarnos esos trucos que usas a diario para compartirlos con el resto de lectores a la direccin: occams-razor@uvigo.es

49| OCCAMs Razor

LICENCIAS

Gracias a todos los que comparten su trabajo!


por The Occams Razor Team

LICENCIAS DE LAS IMGENES EN ESTE NMERO

Todas las imgenes de esta publicacin, salvo las excepciones listadas en esta pgina y las imgenes que forman parte de los artculos se distribuyen bajo los siguientes trminos: Licencia: CC-BY (Creative Commons Attribution 3.0) Autor/Creditos: Laura I. Rodrguez Gonzlez/Revista Occams Razor Los trminos anteriormente mencionados se aplican a las secciones generales de la revista: Editorial, La Comunidad de Occam y Trucos.

PORTADA
Imagen del satelite SMOS utilizada de fondo Licencia: ESA (http://www.esa.int/esa-mmg/mmgdownload.pl ) Autor/Creditos: ESA

CIENCIA Y ESPACIO
Todas las imgenes en este artculo pertenecen han sido cedidas por ESA o CESBIO. Consulte el pie de foto de cada una de ellas. Licencia: ESA (http://www.esa.int/esa-mmg/mmgdownload.pl ) Autor/Creditos: ESA/CESBIO, ESA/CNES

EN LA PRCTICA
Imagen de Fondo Cabecera Licencia: ESA (http://www.esa.int/esa-mmg/mmgdownload.pl ) Autor/Creditos: ESA

HISTORIA
Figuras 1, 2 y 4 Licencia: CC-BY (Creative Commons Attibution 3.0) Autor/Creditos: Fernando Martn y Xulio Fernndez Figuras 3, 5, 6, a1, a2, a3, 10 Licencia: CC-BY (Creative Commons Attibution 3.0) Autor/Creditos: Fernando Martn Figuras 7 y 8 Licencia: Dominio Pblico Autor/Creditos: Wikipedia Figura 10 Licencia: Creative Commons Attribution-Share Alike 3.0 Unported Autor/Creditos: Ed g2s (Fuente Wikipedia) Figura 10 Licencia: Licencia de arte libre (http://artlibre.org/licence/lal/es ) Autor/Creditos: Jari Laamanen (Fuente Wikipedia)

RATAS DE BIBLIOTECA, M RPIDO, LA CACHARRERA


Licencia: CC-BY (Creative Commons Attibution 3.0) Autor/Creditos: Laura I. Rodrguez Gonzlez/Occams Razor

OCCAMs Razor | 50

S-ar putea să vă placă și