Cálculo de coordenadas

 

El objetivo es calcular las coordenadas locales (ángulo horizontal y vertical desde el observador) de los objetos celestes a partir de las coordenadas ecuatoriales que nos ofrece Stellarium (si no lo hiciste ya, échale un vistazo a este otro post).

 

Coordenadas horizontales  Coordenadas ecuatoriales

 Coordenadas horizontales y ecuatoriales (wikipedia).

 

Para los cálculos nos basaremos en el método matricial desarrollado por el ingeniero japonés Toshimi Taki en Noviembre de 2002, publicado en su página web personal. En contraposición a los usuales métodos de cálculo de coordenadas celestes basados en trigonometría esférica, el método matricial ofrece una vía de cálculo alternativa, más adecuada para su implementación en microcontroladores.

En concreto, nos basaremos en las ecuaciones propuestas por Toshimi Taki para implementar a partir de ellas un sistema de cálculo de coordenadas en C++, para la placa Arduino (el código esta probado en un ATmega328). El código fuente resultante será empaquetado en una librería estándar con el objetivo de proporcionar una  implementación reusable de este método para Arduino.

 

Sistema polar

El método se basa en el cálculo de una matriz de transformación, para el cambio de sistema de referencia de vectores en coordenadas cartesianas, obtenidas a partir de su representación equivalente en coordenadas polares.

En el gráfico de la derecha, el punto O representa el origen de coordenadas. El vector OR muestra un vector unitario con dirección hacia el objeto celeste. La posición del objeto es expresada en coordenadas polares (ξ, ζ), donde:

  • ξ representa el ángulo horizontal medido en el sentido anti-horario desde el eje X, en el plano XY (en radianes).
  • ζ ángulo que forma el vector OR medido hacia arriba desde el plano XY (en radianes).

El vector OR también se puede expresar en coordenadas cartesianas (L, M, N), que serán las usadas para realizar las transformaciones.

 

Por un lado tendremos un vector que representará las coordenadas del objeto tomando el sistema ecuatorial como referencia, la matriz de transformación resultante permitirá obtener el vector equivalente para el sistema local de coordenadas, considerando además el factor del tiempo en las ecuaciones, y permitiendo así compensar la influencia del giro de la tierra en el segundo sistema respecto del primero. En el siguiente esquema se muestra cómo obtener el vector en coordenadas cartesianas (L, M, N) de cada sistema de referencia:

 

Obtención de vectores

 

Para el cálculo de la matriz de transformación, necesitamos conocer las coordenadas en ambos sistemas de referencia de al menos tres objetos. Si bien, el tercer objeto se puede aproximar mediante el producto vectorial de los dos primeros. En el siguiente gráfico se muestran las ecuaciones implicadas en el proceso. En mayúsculas se representan los vectores  de coordenadas cartesianas en el sistema de referencia ecuatorial (L, M, N), y en minúsculas los vectores en el sistema de referencia local (l, m, n). En amarillo, abajo a la izquierda, se muestra la ecuación del producto vectorial para obtener la tercera coordenada local (en minúsculas); por supuesto, la misma ecuación para las coordenadas ecuatoriales (en mayúsculas..) sería análoga.

 

Cálculo de la matriz de transformación

 

A partir de las ecuaciones de transformación, agrupando y despejando podemos obtener la expresión de la matriz. Para hacer la transformación del vector en el sentido contrario (de coordenadas horizontales a ecuatoriales), necesitamos obtener también la matriz inversa de T.

En el recuadro de la derecha, las operaciones para obtener de nuevo las coordenadas horizontales o locales (ac = acimut, alt= altitud) y ecuatoriales (ar = ascensión recta, dec = declinación) a partir de los vectores cartesianos.

Aunque no es absolutamente necesario, para aumentar la precisión en los cálculos es recomendable elegir los objetos de referencia con una separación cercana a los 90º. Entre 60º y 120º los resultados son bastante aceptables.

 

La librería desarrollada para Arduino implementa las operaciones anteriores, proveyendo de algunos métodos públicos para el establecimiento de los objetos de referencia y la obtención de las coordenadas equivalentes en ambos sistemas.

Los métodos públicos reciben y devuelven coordenadas ecuatoriales u horizontales, según el caso, expresadas en radianes. El cálculo de los vectores y las operaciones con matrices se hacen de forma transparente. El siguiente fragmento de código muestra el uso básico de la librería, de forma conceptual:

 

 

Para obtener los valores en radianes de los parámetros a partir de las coordenadas o el tiempo, podemos usar las funciones definidas en el archivo coords.py incluido en  este post sobre las comunicaciones con Stellarium. La función hourStr_2_rad nos servirá para la ascensión recta (ar) y el tiempo (hora en que se toma cada medida), ambos en formato “HhMmSs“, mientras que degStr_2_rad nos servirá para la declinación (dec), el acimut (ac) y la altura (alt), todos en formato “DºM’S”“.

 

Por último, el código de la librería, comentado y documentado al estilo Doxygen:

 

 

Para las funciones trigonométricas, incluimos el módulo math.h de la librería estándar AVR Libc (#include <math.h>). Sin embargo aún no existen utilidades para el trabajo con matrices en Arduino, por lo que se han tenido que implementar las operaciones necesarias (multiplicación de matrices, cálculo de la inversa, etc):

 

 

En otros posts comentaré cómo conectar con Arduino mediante el puerto serie para pasarle los parámetros directamente desde el PC. Para las coordenadas ecuatoriales tenemos las comunicaciones con Stellarium, sin embargo para las coordenadas locales tendríamos que disponer de un mecanismo físico que podamos apuntar a una dirección concreta. El proceso de construcción de este mecanismo también lo pienso publicar más adelante, pero mientras tanto podemos usar las coordenadas acimutales (Az/Alt) mostradas en Stellarium -aunque las tendremos que copiar a mano- para calibrar y hacer las pruebas de conversión entre ambos sistemas.

Y bueno, esto es todo por el momento amigos 🙂

Salud! y saludos!

 
Tagged . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *