jueves, 13 de julio de 2017

Cómo utilizar la librería Libnova en C

Hay muchas personas a las que les encanta reinventar la rueda, pero cuando hablamos de desarrollar aplicaciones, reutilizar código es muy importante... sobre todo si te ahorra quebraderos de cabeza o mucho tiempo (como es el caso). En este caso voy a utilizar una librería realizada por Liam Girdwood y Petr Kubanek con licencia GNU GPL que se llama Libnova.

Esta librería se utiliza para hacer cálculos de trayectorias, posiciones, horarios de los planetas mayores (y Plutón) y de algunos otros objetos importantes del Sistema Solar como la Luna, asteroides y cometas.


Introducción

¿Para qué voy a utilizar está librería en el futuro? Es fácil imaginar la respuesta (si se ha seguido el blog), pero la respuesta es que si quiero que la montura se oriente automáticamente hacia el objeto que quiero observar, necesitaré decirle al controlador a donde debe ir.

¿Dónde se puede localizar esta librería? Los desarrolladores han utilizado Sourceforge para almacenar el proyecto, os pongo 3 enlaces interesantes:

Instalación

Bueno, vamos con los pasos de instalación. He de decir que aunque sea una entrada corta... prepararla, instalar la librería, compilar los fuentes y demás ha sido un trabajo muy tedioso ya que prácticamente no hay información, para resolver los errores he tenido que recurrir a la solución de errores similares con otras librerías, distribuciones, etc.

El primer paso es descargarnos la versión más estable, y lo pongo en cursiva porque aunque (en el momento de realización de esta entrada) está disponible la versión 0.16.0 (está en el GIT), tanto esta como la 0.15.0 me han dado problemas y por eso he descargado la 0.14.0. Mi consejo es que vayáis probando con las versiones estables (no betas) y vayáis bajando de versión si os encontráis con fallos, mensajes o cosas ilógicas.

Una vez descargada la librería (en formato .tar.gz), debemos proceder a descomprimirla, he usado este comando:
tar -xzf libnova-0.14.0.tar.gz

A continuación, he movido la carpeta descomprimida al directorio opt (esto es una elección personal que no tiene grandes argumentos que la respalden, sencillamente quiero tener las aplicaciones comunes allí), para realizarlo he utilizado este comando:
sudo mv libnova-0.14.0 /opt

El siguiente paso es ir al directorio en cuestión y ejecutar un comando que configurará los fuentes antes de compilarlos, he usado estos comandos:
cd /opt/libnova-0.14.0  &&  ./configure

La ejecución de todos estos comandos os los muestro en la siguiente captura (no son al 100% exactos pero son equivalentes):

Una vez configurado, habrá generado el archivo Makefile con el que podremos lanzar la compilación automática y así evitarnos un paso amargo. Para ello vamos a ejecutar el siguiente comando:
make

Os muestro una captura de ello:

Una vez ejecutado, ya tengo la instalación que necesito. En el archivo INSTALL dentro de cada paquete encontrarás que hay algunos pasos más que se pueden dar. A mi, estos pasos no me han servido de nada por lo que no voy a seguirlos (entre ellos hay alguno de limpieza que lo que harían es dar pasos atrás que tampoco los quiero).


Uso de la librería

Una vez hecha la compilación (último paso de la instalación) podemos ir a los ejemplos de la propia librería y ejecutarlos, para ello os propongo que ejecutéis los siguientes comandos uno a uno:
/opt/libnova-0.14.0/examples/asteroid

/opt/libnova-0.14.0/examples/comet

/opt/libnova-0.14.0/examples/lunar

/opt/libnova-0.14.0/examples/mars

/opt/libnova-0.14.0/examples/sun

/opt/libnova-0.14.0/examples/transforms


Además de esto, en mi Github he subido algunos ejemplos creados por mi, para ejecutarlos se utiliza el siguiente comando:
gcc miLibnova.c /opt/libnova-0.14.0/src/*.o -lm -o miLibnova

¿Qué significa cada trozo?
  • gcc: el compilador, si queréis usar g++, cc u otro no importa.
  • miLibnova.c: el fuente a ejecutar.
  • /opt/libnova-0.14.0/src/*.o: con el fuente se necesitan muchos archivos de apoyo, todo el paso previo de instalación es para poner este argumento... agregamos a la compilación todos los archivos previamente compilados de la librería.
  • -lm: para que incluya la librería math, hay muchos cálculos matemáticos en este tema.
  • -o miLibnova: es el archivo de salida, si no se pone el resultado será a.out recomiendo usar el mismo nombre que el nombre del archivo, pero eso depende de cada uno.
Os pongo una captura de su ejecución:

Y hasta aquí todo, con el tiempo iré subiendo algún ejemplo más al repositorio, especialmente utilizando la base de datos de MPC para objetos pequeños del Sistema Solar (planetas enanos, cometas, asteroides naturales o artificiales, etc.) aunque esto puede ser tedioso y puede que con poco éxito.

No hay comentarios:

Publicar un comentario