Full text
Proyecto Fin de Carrera Sistema de monitorización de posición para cámaras en rodajes 3D. Autor/es Javier Martínez Amo Documento Memoria Director/es y/o ponente Director: Jesús Ponce de León Ponente: Antonio Bono Nuez E.I.N.A Convocatoria: Diciembre de 2011
Índice. 1. INTRODUCCION 1.1 Resumen 1.2 Requisitos de diseño 1.3 Estructura del documento 1.4 Introducción al 3D y la problemática del rodaje. 1.5 Proyectos anteriores de la empresa. 1.6 Aplicaciones 1.7 Antecedentes 1.7.1. Estereoscopía y cine 3D 1.7.2. Sensores de movimiento en todos los ejes 1.7.3. Placas de hardware libre: Arduino 1.8 Comentarios previos 1.8.1. Sobre las medidas absolutas y relativas 1.8.2. Sobre las limitaciones en los rodajes 1.8.3. Sobre el movimiento en el trípode 1.8.4. Sobre el uso de Arduino 1.9 Planificación 1.9.1. Etapas 1.9.2. Cronograma 2. ANALISIS DE SOLUCIONES
2.1 Decisiones de diseño 2.1.1. Tipos de movimiento y sensores 2.1.2. Magnetómetro y acelerómetro 2.1.3. Placa del sensor 2.1.4. Placa de microcontrolador 2.1.5. Alimentación 2.1.6. Arduino o Matlab 2.2 Descripción y documentación del hardware 2.2.1. Cómo funciona un acelerómetro 2.2.2. Cómo funciona un magnetómetro 2.2.3. La placa del sensor 2.2.4. La placa Arduino 2.3 Descripción y documentación del software 2.3.1. Introducción y esquema 2.3.2. Librería de lectura de datos mediante protocolo I2C entre Arduino y sensores. 2.3.3. Sketch de la placa Arduino 2.3.4. Librería para control de placas Arduino (arduino.m) 2.3.5. Funciones de calibración de sensores en Matlab. 2.3.6. Función de cálculo de inclinación 2.3.7. Función de cálculo de cabeceo 2.3.8. Representación gráfica en tiempo real. 3. CONCLUSIONES 3.1 Resultados finales 3.2 Futuras mejoras
3.3 Conclusión personal 4. REFERENCIAS Y GLOSARIO 4.1 Referencias 4.2 Software y gestión 4.3 Glosario 5. ANEXOS 5.1 Planos 5.2 Presupuesto
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 1. INTRODUCCIÓN Nota previa: en adelante los superíndices n con numeración árabe indican referencias en el glosario, sección 4.3. Los números encerrados entre corchetes [n] se refieren a bibliografía en la sección de referencias 4.1. 1.1 Resumen. El presente proyecto ha sido llevado a cabo para la empresa productora de cine 3+D Entertainment S.L. como parte de su programa de investigación y desarrollo. Se pretende desarrollar un sistema se monitorización1 del movimiento del rig2 que sustenta la o las cámaras de video usadas en un rodaje profesional. Concretamente se debe lograr averiguar la posición absoluta en tiempo real de la cámara en todos los ejes posibles con la precisión adecuada. Los objetivos centrales se podrían resumir del siguiente modo, haciendo una distinción entre hardware y software: a) Obtener las medidas de posición a partir de un magnetómetro y un acelerómetro así como su adecuado tratamiento digital y calibración de los dispositivos. b) Desarrollar una interface con Matlab compatible con Arduino y que permita la integración de otros proyectos y mejoras posteriores. 1.2 Requisitos de diseño. -Prototipo de sistema electrónico con sensor/es y placa de - 5 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 microcontrolador Arduino para monitorizar movimientos de cámaras encima de un trípode desde un ordenador. -Es imprescindible que el hardware sea ampliable posteriormente con nuevos sensores. No realizar un sistema cerrado. -Software de monitorización y control también adaptable a posibles añadidos posteriores (más sensores, control de motores, etc) preferiblemente en Matlab. -El software debe poder operar en los principales sistemas operativos. Especialmente en Windows y Mac OS. -Tamaño máximo de la PCB del sensor del orden del tamaño de la placa Arduino. -Ángulo de inclinación máximo del sensor/es en torno a +- 45º en torno al eje. -Capacidad de realización de unas 25 mediciones del sensor por segundo, incluyendo tratamiento de la señal. -Error máximo de 2º en cualquier medida angular en términos absolutos. -Error máximo del 1% en las medidas en términos relativos.* *Aclaraciones en apartado 1.7.1 CARACTERÍSTICAS FÍSICAS: –Para el montaje del prototipo no será necesario el uso de ningún encapsulado, puesto que dificultaría eventuales interacciones posteriores. No obstante sería conveniente dotar al prototipo de cierta - 6 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 estructura que le permita mantenerse estable. CARATERÍSTICAS AMBIENTALES DE FUNCIONAMIENTO PREVISTAS: - Rango de temperaturas entre 0ºC y 75ºC. –Rango de humedad relativa entre 5% y 90%. 1.3 Estructura del documento. El presente documento ha sido estructurado de la siguiente manera: En primer lugar una amplia introducción en la que se trata la problemática a la que se pretende dar solución con este proyecto y con la que se pretenden poner en contexto las decisiones tomadas. También en este apartado se encuentran diversas aclaraciones y conceptos que es recomendable conocer antes de pasar al desarrollo técnico. A continuación se pasa a describir las decisiones de diseño tomadas y sus causas. Seguidamente comienza una descripción desde el punto de vista técnico de todos los aspectos del proyecto. En esta sección se encuentran todos los detalles concretos referentes al hardware y en especial el software del proyecto. En la tercera sección se muestran los resultados y conclusiones pertinentes, así como una relación de las posibles ampliaciones que - 7 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 puede recibir el sistema en el futuro. En último lugar se encuentran las referencias y bibliografía, un glosario con definiciones de posibles palabras de interés y por último una sección de anexos. 1.4 Introducción al 3D y la problemática del rodaje.[1] El rodaje estereoscópico requiere de dos cámaras exactamente iguales situadas a una cierta distancia interocular (típicamente en torno a la separación de los ojos humanos) y con un cierto ángulo de convergencia. Algunas definiciones previas: -Se define como plano de convergencia el plano donde converge la mirada de ambos ojos/cámaras. Por tanto es la única zona en la que la imagen sería la misma para ambos. -El paralaje se define como la desviación angular de la posición aparente de un objeto, dependiendo del punto de vista elegido. En estereoscopía hace referencia a la distancia espacial de representación de un mismo objeto para el ojo/cámara izquierdo y derecho en un mismo instante temporal. Todos los objetos que están por detrás del plano de convergencia tienen por convenio un paralaje negativo. Todo lo que está por delante tiene paralaje de signo contrario. Por último, todos los objetos situados en el plano de convergencia tienen un paralaje nulo. - 8 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 El ángulo de convergencia por su parte es la desviación de las cámaras respecto a la disposición de paralelismo. Dicho de otro modo, es el ángulo formado por las cámaras y el plano de convergencia. Los parámetros de 3D modificables en el rodaje serían pues la distancia interocular y el ángulo de convergencia. Conviene ilustrar gráficamente las consecuencias de cada uno de estos parámetros: En primer lugar el ángulo de convergencia influye en la posición de los objetos respecto de la pantalla. Ésta y el plano de convergencia siempre van a coincidir, por tanto el lugar donde se sitúe el eje será el que aparezca en la pantalla durante la reproducción. Cuando el ángulo de convergencia es cero, el plano de convergencia se sitúa en el horizonte. En consecuencia todos los objetos quedan por delante de del eje y por tanto de la pantalla. - 9 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 En las películas con gran cantidad de escenas con croma3 es imperativo que el director pueda tener una idea de lo que se está rodando a través de los monitores de campo. Son necesarios sensores para poder variar la simulación de los escenarios según se produzcan o no desplazamientos de las cámaras. Es recomendable leer las referencias del glosario para información más detallada. 1.7 Antecedentes 1.7.1 La estereoscopía8 y el cine 3D [2] El 3D es una tecnología relativamente nueva como fenómeno filmográfico mainstream9. Sin embargo, la estereoscopía es utilizada en el cine desde los años 20 del pasado siglo. Su uso se vio limitado por las capacidades tecnológicas de la época, que no han sido subsanadas hasta auge del cine tridimensional de la primera década del siglo XXI. Los desafíos tecnológicos han acompañado al cine tridimensional desde su cuna. Incluso en la primera explosión del cine estereoscópico en los años 40, fue la complejidad técnica lo que disparó a la baja su rentabilidad y lo condenó al olvido. No obstante, la mayor lacra de este tipo de cine reside en el rodaje. Se hace necesaria una tecnología muy avanzada para lograr la fluidez y posibilidades artísticas del cine tradicional. En esta misma línea se están buscando soluciones para la emisión en directo de contenidos 3D para impulsar su empleo en - 16 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 televisión. El principal referente técnico que se ha tenido en cuenta para este y todos los proyectos de la empresa es la solución adoptada por James Cameron durante el rodaje de “Avatar”. Consiste en una monitorización de todos los movimientos de la cámara, y la utilización de estos datos para robotización de cámaras (incluso en tiempo real), repetición y aplicación correcta de los efectos especiales y la posproducción. Por supuesto la solución adoptada por Cameron fue una costosísima obra de ingeniería que pocos estudios europeos se pueden permitir adquirir o desarrollar. En Europa la industria del 3D todavía no ha alcanzado una mínima cuota de mercado y la tecnología apenas está desarrollada. Bajo esta premisa se hace muy necesario desarrollar sistemas más sencillos y económicos para el contexto de la televisión o el cine de mediano presupuesto. 1.7.2 Sensores de movimiento en todos los ejes. La medida de los movimientos en cualquiera de los ejes cartesianos y polares no es algo nuevo, de hecho es algo muy extendido en el terreno de la aeronáutica. Es precisamente en los aviones donde se normalizó la nomenclatura de los ejes XYZ y el nombre de los giros (tilt, roll y heading10 por sus nombres anglosajones). Desafortunadamente, aunque el principio físico es el mismo, los sensores aeronaúticos son muy caros y voluminosos por lo - 17 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 que no tienen aplicación posible en el caso que nos ocupa. A una escala más similar a la nuestra nos encontramos con soluciones electrónicas para teléfonos móviles y consolas. Especial interés merecen sensores de movimiento como el WiiMote11 (basado en acelerómetros, giroscopios e infrarrojos) o el Kinect12 (basado en visión por computador e infrarrojos). Precisamente de este tipo de dispositivos fueron los que inspiraron en un principio este proyecto. En cualquier caso la aplicación es bien distinta y ninguno de los disponibles cumplía con las especificaciones necesarias para resolver los problemas planteados, como se explica en el apartado 2.1.1. 1.7.3 Placas de hardware libre13: Arduino. Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y uso sencillo. En origen fue creado para artistas, diseñadores, aficionados y en general personas interesadas en crear entornos u objetos interactivos. Arduino puede tomar información del entorno a través de sus pines de entrada de toda una gama de sensores y puede controlar aquello que le rodea como luces, motores y otros actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación arduino (basado en Wiring14) y el entorno de desarrollo Arduino (basado en Processing15). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un - 18 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 ordenador, si bien tienen la posibilidad de hacerlo y comunicar con diferentes tipos de software. Fuente www.arduino.cc Esta plataforma de desarrollo, que empezó siendo un proyecto para aficionados, se está convirtiendo en un referente a nivel mundial. Esto ha ocurrido gracias a una curva de aprendizaje muy cómoda, acompañada de grandes posibilidades de expansión. Es difícil encontrar un límite para esta plataforma puesto que la comunidad no deja de aportar nuevos programas y shields . Estos últimos son placas PCB adaptadas para colocar directamente sobre Arduino y dotarle de infinidad de posibilidades. Como ejemplo cabe destacar el caso de Telefónica I+D. Esta empresa ha desarrollado su propio shield para añadir la funcionalidad GPRS-GSM a Arduino, consiguiendo comunicarse con teléfonos móviles u otras placas similares.[16] 1.8 Comentarios previos 1.8.1 Sobre las medidas absolutas y relativas: En los rodajes ya se dispone de un sistema que facilita información sobre la situación inicial del rig (y por tanto del sensor). Sin embargo no se puede conocer la posición final, ni tampoco posibles posiciones intermedias en las que la cámara se detenga o cambie el ritmo de su - 19 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 desplazamiento. Esto justifica que las medidas sean absolutas y no una serie de diferencias entre medidas de posición (velocidad). El uso de sensores de velocidad, como los giroscopios, acumulan error conforme se realizan movimientos salvo que conozcamos las posiciones inicial y final de manera absoluta. No tiene demasiada importancia si de la medida que se desprende que la inclinación es cero, cuando en realidad existe una pequeña inclinación, y lo mismo ocurre con la posición de la cámara respecto al norte (cabeceo). Lo que es fundamental es que esos puntos sean siempre los mismos, así como la distancia entre unos y otros. Ejemplo: Si la inclinación de la cámara cuando marca (0,0,0) es en realidad x:0.5º, y:0.2º, z:0.1º, es indispensable que el dato sea fijo siempre. De haber un error, este debe ser constante. La importancia de esto reside en la repetibilidad de los movimientos. Debe poderse regresar al punto inicial, sea cual sea. 1.8.2 Sobre las limitaciones en los rodajes: Hay una serie de cuestiones que deben tenerse en cuenta en los rodajes y por tanto han delimitado bastante el camino del desarrollo del proyecto. En primer lugar la intemperie es una cuestión a tener en cuenta. Por ejemplo los sensores de infrarrojos en exteriores no pueden - 20 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 usarse, por lo que fueron descartados automáticamente. Sin embargo un sensor basado en campos magnéticos sólo se ve afectado de forma crítica con imanes, lineas de alta tensión muy cercanas y tormentas. Si se tienen en cuenta estas precauciones se puede trabajar con él. También es necesario mirar por la humedad y la temperatura. Los requisitos no tienen por qué ser muy extremos, pero en un momento determinado se podría llegar a los límites soportables por los componentes electrónicos. Esto se ha de tener en cuenta tanto durante los rodajes como en el caso de encapsulados del producto final (no del prototipo). Para malas condiciones climáticas hay que asegurar el aislamiento y ventilación del sensor, por ser la parte más delicada. Por último se hace necesario contar con la posible ausencia o escasez de conexiones a la red eléctrica durante ciertos momentos del rodaje. Para evitar problemas lo mejor es barajar estas dos posibilidades: -Alimentar desde un ordenador portátil. Siendo el uso de estos dispositivos imprescindible, siempre se dispondrá de alimentación. -Diseñar un alimentador basado en pilas de clase AA o AAA. Todo equipo de producción toma siempre la precaución de adquirir este tipo de fungibles previamente a los rodajes, tanto interiores como exteriores. - 21 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 1.8.3 Sobre el movimiento en el trípode: Conviene comentar que los movimientos que tratan de medirse son los que realiza el rig de cámaras sobre el trípode. Se ha elegido como punto de partida por su estabilidad y su empleo masivo. Además los movimientos son extrapolables a cualquier otra técnica de rodaje, simplemente añadiendo algunas piezas más al sistema. Como se ve en la ilustración, todos los movimientos se realizan siguiendo los ejes polares. Por tanto el resultado final será la posición en grados respecto a los ejes X e Y (paralelos al suelo) y el cabeceo, medido en grados respecto del norte magnético. El nombramiento de los ejes se hace siguiendo el criterio de Euler. - 22 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Más allá del trípode, ya se está planeando la manera de medir en otras condiciones que puedan surgir en el rodaje. En el caso del desplazamiento sobre railes, se incluirá en el futuro un encoder en una de las ruedas para saber el desplazamiento y la velocidad. 1.8.4 Sobre el uso de Arduino [8]: La plataforma Arduino ha sido fundamental en el desarrollo del conjunto de proyectos de la empresa. Por un lado, su sencillez y la ingente cantidad de ayuda que se puede encontrar en los foros hace que la curva de aprendizaje sea muy asequible. Por otro lado permite el uso de múltiples librerías compatibles, ya que es una plataforma muy utilizada en todo el mundo y la mayoría de los dispositivos electrónicos y software de programación ya facilitan el entrelazamiento con Arduino. Téngase en cuenta también que una empresa en que entran y salen colaboradores de distintos campos exige el uso de una plataforma sencilla y genérica. Además se se está investigando en campos tan dispares como los sensores y el control de motores. Un hardware único es el primer paso para un software común. A pesar de lo dicho, no han podido localizarse librerías utilizables directamente en el sistema, con lo cual se ha tenido que implementar la mayor parte del software casi desde cero. La clase arduino.m para Matlab (de la que se hablará más adelante) si que partió de un aporte de la comunidad que permitía el manejo de Arduino desde el citado - 23 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 programa. Sin embargo sólo se aprovecharon algunas de las funcionalidades incluidas, mientras que la mayor parte del código fue reprogramado. 1.9 Planificación. 1.9.1 Etapas. - Seguimiento del proyecto. - Búsqueda de información y toma de datos. - Estudio de posibles soluciones. - Realización de diseños preliminares. - Preparación de la memoria. - Selección y definición del diseño final. - Búsqueda de componentes. - Programación del software del sistema. - Creación de un prototipo. - Elaboración de los documentos básicos. –Confección de planos. 1.9.2 Cronograma. Tarea/Semana 1 2 3 4 5 6 7 8 9 10 11 12 Seguimiento del proyecto x x x x x x x x x x x x Búsqueda de información y toma de datos x x x x x x x x Estudio de posibles soluciones x x Realización de diseños preliminares xxx Selección y definición del diseño final x x x x x Búsqueda de componentes x x - 24 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Confección de planos x x x Programación del software x x x x x x x x Elaboración de la memoria x x x x x x x Creación de un prototipo x x x x Además de estos últimos tres meses de actividad, fueron necesarios otros tres para el aprendizaje de programación en C y los conceptos técnicos del cine 3D. Durante ese tiempo también se hizo parte del estudio de posibles soluciones. - 25 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 2.1.6 Representación esquemática de la solución - 32 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 2.2 Descripción y documentación del hardware. En este apartado se va a entrar en detalle con los componentes del sistema y los tipos de conexión que existen entre los tres bloques principales: sensor, placa de microcontrolador y ordenador. 2.2.1 Cómo funciona un acelerómetro. Como su propio nombre indica, el acelerómetro es un instrumento destinado a medir aceleraciones. No obstante, no mide lo que intuitivamente se entiende por aceleración (variación de la velocidad en el espacio) sino la asociada al peso de una masa de referencia. Esto quiere decir que si se mide en el eje de un acelerómetro orientado hacia el suelo, la lectura debería ser equivalente a 1g, la aceleración de la gravedad. Los acelerómetros más modernos ya no funcionan con una masa, puesto que eso impediría alcanzar tamaños propios del montaje superficial (SMD). La tecnología que utilizan se basa en el traspaso térmico por convección natural, pudiendo medir la trasferencia de calor causada por la aceleración. 2.2.2 Cómo funciona un magnetómetro. - 33 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Los magnetómetros son aparatos capaces de medir la fuerza o dirección de un campo magnético. El utilizado en este proyecto sólo es capaz de medir la fuerza. El principio de funcionamiento del sensor es captar el campo magnético de la tierra [4], que es constante en el tiempo y el espacio mientras no haya un gran cambio de latitud. Para ilustrar la situación se adjunta una imagen con la distribución de la intensidad de campo magnético terrestre. (las medidas medidas están en Teslas, 1gauss=10.000T) En base a esto se puede saber que posición ocupa el sensor respecto de dicho campo magnético, creando así una aplicación de - 34 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 brújula electrónica. El campo magnético local de la Tierra (H) tiene una componente Hh fija en el plano horizontal (x,y) que apunta al norte magnético. Esta componente puede ser medida por el sensor a través de las componentes Xh e Yh, que se encuentran en los ejes de medida del magnetómetro. La ecuación a utilizar para calcular el cabeceo es la siguiente: Hay que tener en cuenta que para la correcta medida del campo magnético, los ejes del magnetómetro deben coindicir con los del susodicho campo. Estos ejes son el perpendicular al eje de la tierra (z) y los paralelos al suelo (x e y). Si el sensor se inclinara, habría que tener en cuenta el dato de la inclinación para compensar la medida. Esto se debe a que el módulo del vector resultante (fuerza magnética medida) sería menor. - 35 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Para ello sería necesario aplicar la siguiente ecuación: Donde: -Xh e Yh son los valores corregidos, -pitch y roll son inclinación y giro (en castellano son nombres algo confusos por no estar normalizados). -Xm, Ym y Zm son los valores medidos por el sensor. 2.2.3 La placa del sensor El corazón de la placa es un integrado de la casa STMicroelectronics. Se trata de un acelerómetro y un magnetómetro, ambos de tres ejes. El segundo depende del primero para su correcto funcionamiento, pero además del conjunto se han utilizado las medidas del acelerómetro como sensor independiente. El integrado es el LSM303DLH [11] y cuenta con una serie - 36 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 características que se detallan a continuación: -Tensión de alimentación analógica de entre 2.5 y 3.3v -Tensión de alimentación digital de 1.8v -Modo de bajo consumo -3 canales de campo magnético y 3 de aceleración -Escala de campo magnético entre 1,3 y 8,1 gauss -Escala de aceleración de ±2 g/±4 g/±8 g dinámicamente seleccionable. -Salida digital de 16 bit. -2 generadores programables de interrupción para detección de caída libre. -Interface serie I2C -Función de hibernación para el acelerómetro -Detección de orientación en 6 direcciones -ECOPACK ajustado a la normativa RoHS Ejes de los sensores y esquema de pines del integrado. - 37 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 A continuación se detallan las cuestiones y decisiones relativas a las diferentes características del integrado LSM303DLH: Tensiones de alimentación: Para lograr estos requisitos se ha optado por alimentar la placa desde Arduino que proporciona 3.3 o 5v. De las dos, se ha elegido la de 3.3 por se la más próxima a las necesarias para el integrado. No obstante ha sido necesario añadir sendos reguladores de 1.8 y 3.3v para alcanzar las tensiones de alimentación digital y analógica respectivamente. Técnicamente hubiera sido suficiente con el regulador de 1.8, pero de este modo es posible la conexión con tensiones de alimentación mayores y se logra un grado más de protección frente a sobretensiones y sobrecorrientes. Cambios de escala: La escala en que se toman las medidas puede ser modificada en ambos sensores. Concretamente en el acelerómetro se permite realizar esa modificación dinámicamente, durante la ejecución de la lectura de medidas. Para el propósito de este proyecto interesa medir a una escala que permita la captura de movimientos suaves. Para el acelerómetro, en ningún caso deberíamos registrar aceleraciones superiores a 2g o - 38 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 incluso menos. Por su parte, el magnetómetro mide la fuerza del campo magnético de la Tierra, que es constante y del orden de 0.4 gauss en España. La escala de 1.3 gauss es la más adecuada. Por defecto, el integrado viene con esta configuración, pensada para la mayor parte de las aplicaciones típicas de este sensor. No obstante dispone de unos registros para que pueda modificarse a gusto del usuario. Interface serie I 2 C: Las lecturas son transmitidas al microcontrolador mediante el protocolo I2C que permite conectar múltiples sensores en paralelo y llamar al que más interese. En este caso sólo hay uno, aunque no se descarta en el futuro añadir un segundo sensor idéntico, pero en posición diametralmente opuesta, para obtener redundancia. Las medidas son recogidas por el integrado en 12 registros independientes (2 por cada medida, para parte alta y baja del dato). Hacen un total 6 medidas pertenecentes a los ejes x, y, z del acelerómetro y lo mismo para el magnetómetro. Así se consigue el propósito de medir cabeceo, compensando el magnetómetro con la inclinación, y también aprovechar el acelerómetro como medida independiente de inclinación en los tres ejes. - 39 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Funciones extra: Las funciones de reducción de consumo como la de hibernación del acelerómetro han sido obviadas puesto que son irrelevantes para esta aplicación. El dispositivo está siempre alimentado y el consumo es minúsculo (0.83mA). Las interrupciones para detección de caída libre no han sido implementadas porque carecían de sentido para el propósito del prototipo. No obstante en el futuro podrían tener cierta utilidad a la hora de activar rutinas de interrupción en caso de cambios bruscos. Otras características relevantes: -Rango de temperaturas entre -30 y 85ºC. -Sensibilidad de aceleración lineal 1 mg/digito. Para 12 bit, 4096 digitos. (1 LSB= 4g/4096 = 0.001 g). -Resolución magnética típica de 8 mgauss. (1 LSB= 1,3 gauss/4096 = 0.0003 gauss) El rango de temperaturas permite su empleo en situaciones climáticas extremas. La resolución de sus medidas también es en principio suficiente para los propósitos de este proyecto. En cualquier caso hay que apuntar que ha aparecido ruido en las medidas cuyo origen no viene especificado en la hoja de datos del fabricante. Este problema se ha paliado en buena medida mediante la implementación de filtros paso bajo por software. - 40 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Cálculo del ruido en las medidas: Es necesario hacer un cálculo para saber la precisión real de los sensores en cuanto a magnitudes físicas, después se calculará la influencia real del ruido. El nivel de ruido ha sido recogido de forma empírica mediante Matlab. Acelerómetro: ruido de fondo ±6 LSB aprox. 1 LSB = 0.001g Inclinación máxima ±90º En el peor de los casos tendríamos una variación de 2g (de -1g a 1g) para una variación de 180º volcando por completo el eje en que se está midiendo. 2g/180º=0,011g/grado => unos 10 LSB por grado. El ruido es del orden de 1 grado, en algunos casos incluso puede haber variaciones de ±1º. Obviamente hay que recurrir a filtrado. Magnetómetro: ruido de fondo ±10 LSB aprox. 1 LSB = 0,0003gauss Cabeceo máximo ±180º El cálculo es similar al caso anterior. El campo magnético terrestre es del orden de 0.45gauss en España. La variación en un giro de 180º sería de 0,45 a -0,45. 0.9gauss/180º=0,005gauss/grado => unos 16 LSB por grado. El error introducido por el ruido es mayor de 1 grado, por lo que se hace imprescindible filtrar para obtener medidas fidedignas. - 41 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 2.3 Descripción y documentación del software. 2.3.1 Introducción y esquema. El grueso del trabajo y el tiempo dedicado a la puesta en marcha de este sistema reside en el software. En los próximos apartados se detallarán los pasos seguidos en su desarrollo, los problemas encontrados y como se han solucionado. Esta es la lista de programas y funciones implementadas, en orden de aparición: -Librería de lectura de datos mediante protocolo I2C entre Arduino y sensores. -Sketch18 de la placa Arduino para capturar los datos del sensor, tratarlos y enviarlos por puerto serie a Matlab. -Librería para control de placas Arduino mediante puerto serie desde Matlab (en adelante clase arduino.m). Sirve tanto para este proyecto como para control de motores. -Diversas funciones de filtrado de datos en tiempo real, para incluir en el sketch de Arduino. -Funciones de calibración del sensor para Matlab. Incluye filtrado digital, calibrado del acelerómetro, eliminación de efectos “hard-iron” del magnetómetro y corrección de alineación. -Función de cálculo de inclinación. -Función de cálculo de cabeceo (“heading”) que además corrige el - 48 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 error en la medida provocado por la inclinación. -Representación gráfica en tiempo real. 2.3.2 Librería de lectura de datos mediante protocolo I2C entre Arduino y sensores. [9] El integrado LSM303DLH guarda las medidas realizadas en unos registros determinados, que son los que hay que leer desde Arduino. Esta mini-librería abstrae al programador del sketch de este proceso haciendo la lectura de los 12 registros. En ellos esta guardada la información en forma “little indians”, con parte baja y alta de palabra. Al guardar los datos en Arduino se reconstruyen los datos dejándolos en forma de 6 valores decimales con signo. La librería está escrita en lenguaje C++ y se integra como “include” en el sketch de Arduino. Además se ha creado también una clase llamada compass (brújula en inglés) donde se guardan siempre los 6 valores para su envío a Matlab. Hay que añadir que esta librería se combina con la propia interna de Arduino para conexiones I2C (llamada Wire ), la cual tiene embebido el código para conectar y desconectar con el sensor. 2.3.3 Sketch de la placa Arduino El programa que ejecuta Arduino está organizado de la siguiente manera. Por un lado el bucle principal se dedica a leer y almacenar en un array los datos del sensor. Cada vez que se comienza este proceso - 49 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 se comprueba el puerto serie para ver si hay una petición por parte de Matlab, en cuyo caso se atiende. En la versión final lo único que se recibe por puerto serie es la petición de envío de datos a Matlab. Sin embargo hay inhabilitadas otras opciones que permiten configuraciones remotas, como cambiar el tipo de filtrado que Arduino hace a los datos antes de enviar (se implementó para poder probar los diversos filtros y medir su efectividad desde Matlab, comparando los resultados). Una vez que se confirma que hay una petición en el puerto serie se pasa a ejecutar el filtro pertinente. En la última versión es una media con diezmado de datos. Después de filtrar se envían los datos según el protocolo que implementamos en Matlab para que éste los pueda entender. El protocolo de envío de datos se explica detalladamente en la sección 2.3.4. Conviene resaltar que los motores son controlados por otra placa Arduino con su propio sketch implementado paralelamente por otros compañeros de la empresa. El modo de funcionamiento es muy similar ya que el esquema a seguir se decidió de mutuo acuerdo. - 50 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Filtros con media [5] A continuación se trata el tema de los filtros de media para los datos. Se trató de buscar un buen filtro que actuara a modo de pasobajo con los datos, ya que había un ruido importante en las medidas. La idea era neutralizar este ruido dentro del sketch de Arduino, ya que en teoría se pueden hacer muchas medidas por I2C entre petición y petición serie de Matlab. De este modo se trabaja de manera muy similar a como lo haría una interrupción. Empíricamente los resultados fueron bastante peor de lo previsto. Al tener que usar matrices de 6 datos para todo el tratamiento, los ciclos de reloj y la memoria ocupada se disparaban. Explicado punto - 51 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 por punto: -Medidas brutas: Cogiendo una medida cada vez que hay una petición serie. Es muy rápida pero con demasiado ruido. Concretamente el tiempo consumido en Arduino es despreciable frente a la gestión en Matlab, mientras que el error llega hasta 12 LSB (+-6) en situación de estabilidad total. A continuación una muestra del perfil de ruido del acelerómetro. Se tomó como referencia por defecto en lugar del magnetómetro, aunque el ruido y el efecto de los filtros es equivalente en ambos. El eje vertical son LSB y el horizontal segundos. El sensor estaba en completo reposo durante la medida. -Media simple: realizaba la media de las últimas n medidas antes de la petición serie. Funcionaba bien a partir de 100, logrando errores - 52 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 de 2 LSB (+-1) practicamente insuperables. Sin embargo se creaba un cuello de botella en Arduino. El coste en tiempo era de 200ms, permitiendo en total recoger 4 datos por segundo desde Matlab. Obviamente fue descartada. -Media acumulativa: En vista de que no se estaba trabajando con todos los datos disponibles, se hizo un algoritmo que lo permitiera. Se trata de una media acumulativa, escrita de la siguiente forma: media_actual = media_anterior + ((nuevoValor – media_anterior)/ (n+1)) Desafortunadamente seguían persistiendo el problema de tiempo de ejecución en Arduino. Si se reducía era a costa de que la conexión serie (durante la que no se recogen medidas) fuera casi tan larga como el tiempo en que Arduino trabajaba en hacer lecturas del sensor. Empíricamente se vio que no aportaba gran precisión, unos 8 LSB a costa de recoger menos de 10 medidas por segundo. -Media diezmada: Por los resultados se dedujo que merecía más la pena ser menos ambiciosos, cogiendo unas pocas medidas separadas en el tiempo. Luego, al recibir la petición serie se realizaría la media muy rápidamente. Se midió cual era la velocidad real de la petición serie desde Matlab usando el “Profiler”, una utilidad que mide el gasto de tiempo de las funciones durante la ejecución. El resultado es de unos 14ms, - 53 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 aunque puede variar un poco dependiendo del ordenador. Gráfico de tiempos de trabajo de Arduino y Matlab A continuación Matlab procede a realizar el “plot” para la representación gráfica. Durante ese tiempo (alrededor de 24 ms) Arduino va tomando medidas cada 1ms y almacenándolas. Luego Matlab llevará a cabo otra petición serie y recibirá la media de las medidas tomadas por Arduino. El error frente a las medidas brutas se rebajaba desde 12 hasta 5 LSB. La velocidad de lectura asciende a unas muy aceptables 25 medidas por segundo, que permite la representación en tiempo real que pretendíamos. Con este sistema hay cierta pérdida de datos, pero no es muy relevante para ésta aplicación. En definitiva se están tomando alrededor de 25 medidas por segundo de un sensor. Sin embargo en vez de ser datos instantáneos, se trata de medias de unos cuantos datos consecutivos, reduciendo el ruido. - 54 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 2.3.4 Librería para control de placas Arduino (arduino.m) [10] Se podría decir que arduino.m es el cimiento de la mayor parte del proyecto puesto que todo el trabajo de Matlab se basa en esta clase. Originalmente era un código abierto encontrado en internet que básicamente pretendía utilizar Arduino de forma absolutamente independiente desde Matlab. Para lograr este propósito había por un lado un sketch de Arduino muy extenso para realizar todas las funciones disponibles (I/O analógicas y digitales, PWM, control de servos, etc). Por el otro, arduino.m aglutinaba en casi 1000 líneas de código toda una interface de funciones de comunicación con la placa. Esto quiere decir que se podía ejecutar cualquier código típico de un sistema embebido desde Matlab en tiempo real. A pesar de la gran funcionalidad que tenía, la complejidad del código era tremenda. Además no era útil para ejecutar código en Arduino, ya que lo ponía realmente difícil. Resultaba inviable modificar los detalles necesarios para cada pequeña aplicación. Se decidió conservar la idea y la parte del código más básica. Luego se crearon dos protocolos mucho más sencillos de los existentes. Uno de ellos sirve para comunicarse con las placas que alberguen sensores, el otro con las que controlan los motores paso a paso. De este modo se dispone de un código mucho más limpio e intuitivo, que permite intervenciones y ampliaciones posteriores, a - 55 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 diferencia del arduino.m original. El código está estructurado de la siguiente manera: Función constructor del objeto arduino: function a=arduino(comPort) Principalmente nos abstrae de la conexión entre Matlab y el puerto serie. Su función interna más importante es “aser” (abreviación de Arduino serial connection). “Aser” Permite la configuración de la velocidad de conexión, 115200 baudios por defecto, así como elegir el puerto al que se quiere conectar, que se le pasa a través de la función principal. La nomenclatura del puerto cambia entre arquitectura PC y Unix pero funcionan ambas. Esta parte del código incluye también varias funciones de seguridad y avisos de errores, así como el destructor del objeto. Función para mover motores: function moverMotor(a,mot_ID, dir, usteps, delay) Permite una abstracción de modo que en una sola linea de código de pueda mandar toda la información que necesita Arduino para mover los motores paso a paso de las cámaras. Envía los siguientes datos: -Nombre del Arduino, ya que se pueden manejar varios objetos de este tipo desde el mismo programa. Típicamente “a” o “b”. - 56 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 -Número del motor (del 1 al 4). Cada placa controla 4 motores. Dos de ellos producen en las cámaras desplazamientos longitudinales y los otros circulares. -Dirección. Puede ser a derechas o izquierdas (1 o 2). -Número de pasos a mover. Cada motor paso-a-paso dispone de de 10000. -Delay entre pasos. Esto sirve para que no se muevan de uno en uno sino en grupos más grandes. Por ejemplo un grado de giro serían 80 pasos. Con Delay=80 cada paso en la variable anterior sería un grado. Funciones para leer información del Arduino: function [mot_1,mot_2,mot_3,mot_4,tiempo,ArduinoFree]=SerialRead(a) function [cabecera,ax,ay,az,mx,my,mz,t_readsensor]=SerialReadSensor(a) Ambas son muy parecidas en su estructura. La primera sirve para leer la placa controladora de motores mientras que la otra es para la placa lectora de sensores. Voy a centrarme en explicar la segunda por ser ligeramente más completa. En primer lugar envía un código (40) por puerto serie para indicar a Arduino que le tiene que mandar la información de los sensores. Otros códigos consecutivos como 41 o 42 se reservan para otras peticiones, como se verá más tarde. A su vez 10, 20 o 30 se han dejado libres pensando en la placa de motores y otras posibles - 57 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 evitar confusiones con los ejes se le ha llamado ACC. Función para calibrar y normalizar los datos recibidos function [Ax1,Ay1,Az1]=normalize_acc(Ax, Ay, Az, ACC) Simplemente recoge los datos crudos del acelerómetro y los multiplica por la matriz de calibración. De este modo a la salida obtenemos los valores calibrados y normalizados entre -1 y 1. B- Calibración del magnetómetro: Explicación teórica. La calibración del magnetómetro es algo más compleja que la anterior. Se basa en principios bastante similares, pero debe hacerse paso a paso. Para lograrlo hay que recoger datos de tres giros completos del sensor en cada eje. El resultad idealmente sería una matriz de puntos de forma esférica y centrada en los ejes. No obstante, en la práctica puede encontrarse distorsionada, obteniendo forma elíptica y descentrada de los ejes. Esta forma se respondería con la siguiente ecuación: No obstante, como se explicará más adelante, ciertos efectos se - 64 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 pueden despreciar de modo que quedaría una ecuación más simplificada. Conocidos todos los valores de la ecuación se pueden implementar unas matrices de calibración que corrijan el factor de escala y el offset. A continuación se explican los dos efectos más importantes que pueden aparecer en un sensor de este tipo. Para dichos efectos se han conservado sus nombres en inglés, puesto que no se ha encontrado ninguna traducción al castellano. Efectos soft-iron. Son inducidos por materiales que producen distorsiones o influencias en el campo magnético. Se pueden distinguir gráficamente porque convierten la esfera en un elipsoide típicamente inclinado respecto a los ejes, como de muestra a continuación. - 65 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 La imagen escogida no ha sido capturada durante los experimentos, puesto que la esfera de datos perteneciente al sensor utilizado era prácticamente perfecta. Esto ha permitido obviar estos efectos, como ya predecía el datasheet. De hecho el fabricante daba por hecho que los efectos serían nulos y no incluía mayor información al respecto. Por lo que se ha podido averiguar, la compensación de este efecto es muy compleja, en ocasiones incluso imposible. La manera de conseguirlo sería multiplicando cada valor del elipsoide por una - 66 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 constante, de tal forma que el resultado fuera una esfera perfecta. Desgraciadamente estos efectos no suelen ser constantes y por tanto esta técnica no siempre es válida. Efectos hard-iron [3] Son de lejos los más importantes en los magnetómetros puesto que su aparición es muy habitual. Este tipo de distorsión se suele producir por materiales que añaden un campo magnético constante al propio campo magnético de la tierra, y por tanto suman un valor constante (offset) a cada uno de los ejes del magnetómetro. Si por ejemplo el sensor se encontrara en la PCB de un teléfono móvil o un portátil, el imán permanente de los altavoces podría producir esta distorsión. En caso de representar este efecto visualmente se apreciaría un esfera perfecta pero cuyo centro no coincidiera con el eje de coordenadas. Procedimiento de calibración. Como se ha explicado anteriormente, el primer paso para realizar la calibración es obtener datos del sensor. Para ello se deben dar un mínimo de tres giros completos alrededor de los tres ejes del magnetómetro. Aprovechando que la calibración no es un proceso en tiempo real, - 67 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 se ha aplicado un complejo y pesado filtro digital para eliminar el ruido de las medidas. Concretamente se trata del filtro “smooth” incluido en Matlab. Es un algoritmo de media móvil ponderada. El factor de ponderación puede ser modificado por el usuario hasta encontrar el compromiso perfecto en el que se filtre sin falsear las medidas. Tras hacer las tres rotaciones completas en 2D y recolectar las medidas crudas del sensor magnético, se puede realiza un desarrollo matemático que convierta la ecuación de la esfera en la siguiente ecuación matricial: - 68 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Donde : -x, y, z son valores 2D de los distintos ejes del magnetómetro (Mx, My, Mz); -x0, y0, z0 son los las constantes de offset (que se averiguan para la matriz M_OS) -a, b, c son las longitudes de los semiejes de la esfera (necesarias para la matriz M_SC). -R es una constante de la fuerza del campo magnético terrestre. La ecuación anterior sería en el caso de una sola medida. Para tratar los datos en forma matricial, el aspecto sería el siguiente: - 69 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Donde X sería la matriz de incógnitas, mientras que las otras se construyen con los datos adquiridos. La manera de hallar los valores de la matriz X es similar a la empleada en la calibración del acelerómetro, por el método de mínimos cuadrados. De este modo la matriz H está bien condicionada y semidefinida positiva (tiene el rango completo y se puede invertir): En la práctica, el paso a seguir para obtener la matriz de offset M_OS consiste en despejar x0, y0 y z0. Del primer valor de la matriz X (2*x0) se deduce x0. Con el segundo y el cuarto sale y0. Con el tercero y el quinto se obtiene z0. Para obtener la matriz para reescalar los valores, M_SC, hay que obtener los valores A, B y C correspondientes a los denominadores de la ecuación de la esfera. En primer lugar hay que despejar R2 e introducirla en dichos denominadores. Luego se despejan A, B y C igual que en caso de M_OS: - 70 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Si se hace ya la resta de las medidas crudas y el offset así: La ecuación de la esfera respondería a la siguiente forma: Por tanto para aplicar el factor de escala a cada componente tenemos que tener en cuenta que la ecuación de una esfera ideal es x2 + y2 +z2 = 1 luego los valores de factor de escala se corresponden con la raíz cuadrada: De este modo ya se han obtenido las matrices necesarias para la calibración. - 71 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Función de obtención de la matriz de calibración function [X,M_OS,M_SC]=getMagCalibMatrix(M) Exactamente igual que ocurría en el caso del acelerómetro, esta función calcula la matriz de calibración para el magnetómetro siguiendo los pasos explicados en el apartado anterior. No obstante, en vez de poder dar una matriz compacta que solucione todos los problemas, la función devuelve la matriz de corrección de offset (M_OS) y la del factor de escala (M_SC). Función para calibrar y normalizar los datos recibidos function [Mx1,My1,Mz1]=normalize_mag(Mx, My, Mz, M_OS, M_SC) Sencillamente coge las medidas crudas del magnetómetro y les resta los valores de offset. Después multiplica esa nueva matriz sin efectos hard-iron por M_SC que corrige el factor de escala. De este modo a la salida obtenemos los valores calibrados y normalizados entre -1 y 1. 2.3.6 Función de cálculo de inclinación. A partir de los datos calibrados hay que ejecutar una función que permita el cálculo de inclinación en el eje X (pitch) y en el Y (roll) en radianes. Por tanto los datos de entrada de esta función serán Ax1, Ay1 calibrados y normalizados en la función “normalize_acc”. Una vez obtenidos, la función a aplicar es la siguiente: function [pitch,roll]=position(Ax1, Ay1) - 72 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 La función aplica unas sencillas funciones trigonómetricas que convierten los datos a radianes. Son las siguientes: pitch = asin(-Ax1) roll = asin(Ay1/cos(pitch)) Además hay que tener cuidado con el coseno de +-pi/2 que puede dar problemas, porque tendríamos arcsen (Ay1 / 0). Como se puede observar devuelve “pitch” y “roll” que son la inclinación en eje X y en Y respectivamente. Con estos dos datos se puede simular un nivel de burbuja, como el utilizado en las obras. Además de darnos la inclinación, también se utilizan estos dos datos para la siguiente función. 2.3.7 Función de cálculo de cabeceo. f [heading,check_mag]=heading(Mx1, My1, Mz1, pitch, roll) El último y mayor objetivo de todas estas funciones es obtener una manera fiable y precisa el cabeceo del sensor. Esto quiere decir que se sabrá en todo momento la posición del mismo respecto del norte magnético, incluso si aparecen inclinaciones que pudieran falsear la medida. En primer lugar, los parámetro de inclinación pitch y roll permiten realizar esa compensación. La expresión a aplicar es la siguiente: - 73 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Agradecimientos: Quisiera agradecer aquí la paciencia de mis padres, a los que día tras día les tuve que decir que no me daba tiempo a comer en casa, y siempre a última hora. Por supuesto debo dar también mil gracias a Álvaro y Patxi, compañeros de 3+D, que siempre estaban ahí para ayudarme con los problemas en las partes más peliagudas y sobre todo en los comienzos con Maltab. Me gustaría mandar un saludo a mi director Jesús Ponce y a Antonio Bono que se ofreció amablemente a ser ponente del proyecto. También a los compañeros de laboratorio, esos que compartimos tantos dolores de cabeza durante estos meses. Por último, quiero dedicar esta línea de agradecimientos a Tomás Pollán. Por ser un docente que inspiró tanto a tantos. Los que te conocieron siempre hablarán de ti con buenas palabras. - 80 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 4. REFERENCIAS Y GLOSARIO 4.1 REFERENCIAS. -Documentación En esta sección se incluyen enlaces que han servido para documentar sobre diversas cuestiones principalmente teóricas. También se contemplan temas prácticos pero no a nivel de datasheet o código de programación. 3D: [1] Teoría del 3D: http://www.3d-forums.com/stereoscopic-parallax-t4.html [2] Historia del 3D: http://www.kinepolis.com/es/index.cfm?PageID=108230 -Ambos: Libro “3D Movie Making: Stereoscopic digital cinema from script to screen” de Bernard Mendiburu. Elsevier 2009. Sensores magnéticos: [3] Compensación de efectos hard-iron y soft-iron: http://www.sensorsmag.com/sensors/motion-velocity- displacement/compensating-tilt-hard-iron-and-soft-iron-effects- - 81 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 6475 [4] Sobre el campo magnético terrestre: http://www.telefonica.net/web2/jgarciaf/cambio_climatico/Camp o_magnetico/cmagnetico.htm http://en.wikipedia.org/wiki/Earth's_magnetic_field Wikipedia: [5] Información sobre el filtro de media móvil: http://en.wikipedia.org/wiki/Moving_average [6] Croma: http://es.wikipedia.org/wiki/Croma [7] Esteroscopía: http://es.wikipedia.org/wiki/Estereoscop%C3%ADa Arduino: [8] Todo sobre Arduino desde lo divulgativo hasta lo más técnico: http://www.arduino.cc -Código de apoyo [9] Librería I2C de Arduino: http://arduino.cc/en/Reference/Wire [10] Librería Matlab (arduino.m): http://www.mathworks.es/academia/arduino-software/arduinomatlab.html -Datasheets - 82 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 [11] Datasheet LSM303DLH: http://www.pololu.com/file/download/LSM303DLH.pdf? file_id=0J433 [12] Nota para aplicación del LSM303DLH como brújula: http://www.pololu.com/file/download/LSM303DLH-compass-app- note.pdf?file_id=0J434 [13] Datasheet Atmel Atmega328P: http://www.atmel.com/dyn/resources/prod_documents/doc8161.p df [14] Datasheet Micrel mic5205: http://www.micrel.com/_PDF/mic5205.pdf -Compra de material -Farnell: http://es.farnell.com/ -Pololu: http://www.pololu.com/ -Sparkfun: http://www.sparkfun.com/ -Otras [16] Noticia relacionada con Arduino: http://www.elpais.com/articulo/Pantallas/Internet/cosas/crece/el pepurtv/20110713elpepirtv_3/Tes 4.2 SOFTWARE Y GESTIÓN 4.2.1 Software utilizado: - 83 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Programas de cálculo: -Matlab R2010b para el tratamiento de datos de sensores, gráfica y analíticamente. Además contiene la interfaz de comunicación con Arduino. -Microsoft Excel 2007 para cálculo de presupuestos. Entornos de desarrollo (programación): -Arduino IDE para la programación de la placa Arduino. -Codeblocks para compilar código cpp. Programas de diseño: -Eagle 2011 (CadSoft) para el diseño de la PCB. 4.2.2 Comunicación interna y sistemas colaborativos en la empresa. Mención aparte requiere la gestión que se ha hecho de la información del proyecto gracias a los nuevos medios informáticos. Partiendo de la base de que la empresa contratante es una startup sin apenas infraestructura física y con muy pocos trabajadores, no se disponía de ninguna herramienta ERP16. Esto está totalmente justificado puesto que las dimensiones de la empresa no son lo suficientemente grandes como para amortizar semejante inversión. Por otra parte hay que aclarar que los mismos empleados realizan varios mini-proyectos en paralelo a este (y entrelazados con él) para completar la funcionalidad del sistema. En vista de todo esto, se optós por el uso de la plataforma online - 84 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 que nos ofrece Google para trabajo en grupo. Aprovechando la aparición de Google+ este verano (https://plus.google.com/ ) se decidió exprimir toda su funcionalidad. Por un lado Google+ es una red social, muy similar a Facebook, pero su enorme facilidad para la gestión de la privacidad hace que sea compatible tanto para el ocio como para el trabajo. En este sentido se ha usado para comunicación síncrona (chat y videoconferencia múltiple, pizarra digital compartida...) y asíncrona (conversaciones privadas multipersonales, compartición de links y archivos, etc). Esto se debe a su integración con “Google Docs”, otra herramienta colaborativa de google que ya permitía la edición de documentos Office en tiempo real por varios usuarios a la vez y la compartición de archivos “on the cloud”. Precisamente es el concepto de cloud computing17 el que hay que destacar como base de todo este planteamiento. Una aplicación tan simple (y gratuita) como esta ha mejorado enormemente la productividad del grupo, puesto que es multidisciplinar y trabaja en distintos proyectos. Además, a pesar de trabajar muchas veces a distancia, aumentaba la cohesión y la sensación de respaldo, que a su vez influye en la motivación personal de cada uno. 4.3 GLOSARIO 1. Monitorización: Por definición, monitorización es el proceso por medio - 85 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 del cual, nos aseguramos que nuestro proceder está encaminado adecuada y eficazmente hacia un resultado final, evitando las posibles desviaciones que pudieran presentarse. En el caso que nos ocupa se refiere a poder seguir en tiempo real el movimiento de la cámara de video mediante medidas de sensores, y además guardar esos datos de aceleraciones, ángulos de giro, etc para tenerlos en cuenta en la posterior edición de la grabación. 2. Rig: La plataforma gracias a la cual se pueden anclar las cámaras de vídeo al trípode donde se sustentan. Suele ser de metal, y su calidad es determinante a la hora de rodar en 3D puesto que se usan dos cámaras perfectamente simétricas. Si por ejemplo se produjeran oscilaciones en una cámara pero en la otra fueran más leves, el resultado sería un gran deterioro de calidad en el efecto tridimensional. 3. Croma: [6] E s una técnica audiovisual utilizada ampliamente tanto en cine y televisión como en fotografía, que consiste en la sustitución de un fondo por otro mediante un equipo especializado o un ordenador. Esto se hace debido a que es demasiado costoso e inviable el recorte del fondo o personajes para completar cuadro a cuadro mediante rotoscopia. Para realizar esta operación con facilidad y buen resultado, se utiliza el Chroma key o "clave de color": Básicamente consiste en un fondo de color sólido y uniforme y el objeto que se desea recortar o cambiar de fondo, dejando lo demás para tarea del ordenador. Para realizar la operación correctamente se debe escoger un fondo y después un objeto o persona para colocar en una situación posterior a ese hipotético fondo. - 86 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 Este color debe ser alguno de los primarios (rojo, verde o azul). Habitualmente se usa verde o azul y no rojo, ya que es el componente de color más importante de la piel humana. Aunque el color más habitual del fondo o ciclorama era el azul, el verde se ha impuesto al ser la ropa azul mucho más común que la verde. (fuente Wikipedia) 4. Posproducción: La posproducción es la manipulación de material audiovisual, normalmente posterior al rodaje. Se suele llamar posproducción a la aplicación de filtros, iluminación artificial, efectos especiales, animación, etc. 5. Fiducial: Se trata de la referencia visual que es capaz de reconocer un computador a través de la visión artificial. Dicha referencia puede ser desde una figura en papel hasta el rostro humano. El principal requisito es que la referencia disponga de una serie de marcas de tamaño y separación conocidos para permitir al computador identificar el objeto en cualquier situación. Por ejemplo en los códigos BIDI como el de la foto se reconoce el objeto gracias a los cuadrados de las esquinas. 6. Escenografía renderizada: Consiste en cubrir todo o parte del escenario con croma (una tela verde), de tal manera que más tarde se pueda añadir el escenario deseado con posproducción digital. Es una técnica muy utilizada hoy en - 87 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 día en Hollywood (por ejemplo las nuevas películas de “Star Wars” están grabadas íntegramente en croma). También se pueden añadir personajes digitalmente que parecen interactuar con humanos. La renderización es el paso que hay que dar para transformar los diseños tridimensionales (vectores y polígonos) a imágenes bidimensionales, que son realmente las que aparecen en la pantalla (pixeles, anchura x altura). Es un proceso que realizan computadores especialmente preparados puesto que consume enormes recursos y es muy difícil y caro lograr hacerlo en tiempo real. 7. Monitores de campo: Son las pantallas que reproducen lo que está viendo la cámara en tiempo real durante el rodaje. El equipo de dirección y fotografía la usan para saber realmente como se están grabando las cosas e intervenir cuando sea necesario. Si la película es en 3D y además grabada con croma (como en el caso de Avatar) nos encontramos con un gran problema. Por una parte hay que proyectar en tiempo real en el monitor de campo la escenografía, aunque sea muy simplificada, para saber si los personajes interactúan bien con el entorno que es invisible para ellos. Además si son cámaras de 3D, no podemos olvidar que toda la configuración cambia si son desplazadas, y habrá que modificar de igual manera la escenografía proyectada en el monitor para saber si el efecto tridimensional es correcto o no (corregir esto a posteriori es costoso y en ocasiones imposible). De nuevo es imperativo conocer los movimientos de la cámara en tiempo real. 8. Estereoscopía: [7] Es cualquier técnica capaz de recoger información - 88 -
Sistema de monitorización de la posición de cámaras en rodajes 3D Memoria 14/11/2011 visual tridimensional y/o crear la ilusión de profundidad en una imagen. La ilusión de la profundidad en una fotografía, película, u otra imagen bidimensional se crea presentando una imagen ligeramente diferente para cada ojo, como ocurre en nuestra forma habitual de ver. Muchas pantallas 3D usan este método para transmitir imágenes. Fue inventado por Sir Charles Wheatstone en 1840. (fuente Wikipedia). 9. Mainstream (corriente principal): Se emplea al hablar de arte en general y de música moderna en particular, para designar los trabajos que cuentan con grandes medios para su producción y comercialización, y que llegan con facilidad al gran público. Un buen ejemplo de mainstream podría ser la cultura pop, producida principalmente para su comercialización y en muchos casos con el objetivo de obtener la mayor cantidad de ventas y beneficios económicos. En el caso del cine, el término se refiere básicamente a las super producciones de Hollywood. 10. Tilt, roll y heading (inclinación, giro y cabeceo): Se refieren a la rotación de acuerdo a los ejes cartesianos según la unificación propuesta por el sector aeronaútico. Durante todo el proyecto los estamos nombrando en inglés porque así aparecen en toda la bibliografía y son inequívocos. 11. Wiimote: Es el mando principal de la consola Wii de Nintendo. Destaca por ser capaz de captar movimientos con bastante precisión basándose en el uso de acelerómetros y giroscopios, así como de un sensor de infrarrojos que se comunica con una barra de sensores similares que se pone sobre la televisión. 12. Kinect: Es un accesorio para la consola “X-Box 360” de Microsoft consistente en una cámara que integra un potente software de visión por computador (además en código abierto para quien quiera darle un uso distinto del original). Su utilidad principal es el reconocimiento - 89 -