miércoles, 11 de diciembre de 2013

Servidor empotrado Linux/Android de control de monturas astronómicas.(II)

Estructura

Fonera 2.0 OpenWrt
La idea original de este mini proyecto parte de la posibilidad programar un servicio ligero  para  ejecutar en pequeños dispositivos de control , que sin saberlo , muchos tenemos en casa, olvidados en un cajón y que en el mejor de los casos terminan en un punto limpio o mas frecuentemente directamente en el cubo de la basura.

Me refiero al típico  punto de acceso  o router ADSL WIFI que nos "regala" el operador  de turno.

La mayoría de de estos dispositivos  funcionan  o es posible hacerlos funcionar bajo alguna versión de sistema  operativo GNU/Linux y disponen en la placa base de un conector serie o USB  que puede usarse para comunicación con un microcontrolador.


Colateralmente ,ya que la base  de funcionamiento de los dispositivos Android ,  es también Linux, este mismo servicio se pude reutilizar compilar y ejecutar en tablets y telefonos  inteligentes,sin utilizar el framework Android ni la Dalvik como máquina Java virtual si no como código compilado nativo de procesador, en la mayor parte de los casos un procesador con arquitectura ARM.

En esta aplicación el control de excitación ,velocidad  y posición los motores se confía al uso de microcontroladores PIC.

El calculo de coordenadas,aceleración desplazamientos y sincronización así como las comunicaciones (serie,bluetooth y TCP/IP ) y el procesamiento de protocolo de comunicación LX200 de los clientes  ,es tarea del servidor.
El servidor implementa:
  • Servidor TCP/IP multi hebra clásico.
  • Interprete de protocolo LX200 ( implementado con  FSMC RAGEL.)
  • Control de protocolo de bajo nivel comunicación serie <->PicGoto.
  • Control nivel intermedio velocidad aceleración, posición motores
  • Control básico de tracking, sincronización y desplazamientos (Go To).

Arrancando el servicio

El servidor como tal carece de interfaz gráfico .Se ejecuta  como un servicio del  sistema en segundo plano.
No obstante estoy programando una app para Android que posibilita  el arranque, parada y la configuración de los parámetros sin tener que iniciar un shell (terminal o interprete de comandos).

En la siguiente captura de terminal  Android iniciamos el servidor bautizado  andtelescope como una aplicación nativa a efectos de para capturar y mostrar el tráfico que se genera.

Se inicia con éxito el puerto serie /dev/telescope  que es un enlace simbólico a /dev/rfcomm0  físicamente en este caso un dongle Bluetooth ,también podría ser un conversor usb-serie en ese caso /dev/ttyUSB0.



A continuación se inicia una primera hebra que sera la  encargada calcular los parámetros  del control de velocidad y aceleración de los motores (20ms).

El segundo hilo de ejecución solicita a los microcontroladores  cada 200ms la posición de los motores y ejecuta un algoritmo de control posición/velocidad proporcional que gestiona el tracking y los desplazamientos.

El procedimiento  principal es el servidor de conexiones.Lanza una hebra independiente por cada conexión entrante y le asocia un interprete de comandos LX200, esto permite que distinta aplicaciones( Sky Safari ,Cartes du ciel ,Skymap..) desde distintos dispositivo (tablet, telefono,PC..) puedan acceder simultáneamente la posición y controles del telescopio.

Conectando con Sky Safari

Para Sky Safari que no trabaja un conexión persistente , sino que abre y cierra un socket  por cada petición la programación como servicio  multihebra es casi  obligada.
Como el servicio corre en el mismo Tablet configuramos Sky Safari  para que escuche en la dirección local  y el puerto 8888.
Elegimos el sistema Losmandy Gemini, que implementa una versión simplificada  de LX200.

Sky Safari ,Menú Configuración Telescopio

En esta captura vemos que la conexión entre la aplicación Sky Safari y el servidor  ha tenido éxito y podemos alinear el telescopio que apunta a una estrella conocida.

Ponemos el  tablet en visión nocturna  y empezamos la sesión de observación.



(continuará)




martes, 3 de diciembre de 2013

Servidor empotrado Linux/Android de control de monturas astronomicas.(I)

En esta entrada se describe  el sistema PicGoTo++  en actual estado  , tal  y como lo están empleando un  par de centenares  usuarios, que se lo han autoconstruido por  todo el mundo.

El siguiente paso es  habilitar de un sistema de control de  montura  ultra portable utilizando el veterano PicGoTo++  como controlador  electrónico motores y dispositivos Linux de bajo coste como tablets( Android) o routers wifi(OpenWRT,dd-wrt) como controlador de "alto nivel" (por calificarlo de alguna manera).

PicGoTo++ en su  configuración clásica ,es adecuado para un observatorio fijo,astrofotografía o salir al observar al campo si se dispone de un pequeño Netbook con Windows.

Sin embargo para la observación ocasional ,  quizás seas mas sencillo prescindir del ordenador y usar un Tablet normalito , incluso un smartphone.Esta segunda opción se  mostrará en la siguiente entrada.Como adelanto ya funciona en conexión con Sky Safari en mi Tablet  chino de combate   cutre y viejuno.
El servidor está escrito en C,aunque la primera aproximación fue  en C++,que facilita mucho la programación ,el tener que usar  librerías adicionales en algunos de routers pequeñitos era una limitación importante.

Sky Safari y Linux Android  Picgoto++ server

ANTECEDENTES

Circuito


Tanto  PicGoTo estándar como  PicGoTo++ son circuitos basados en el  microcontrolador PIC16F628A,  por si mismos no son suficientes  para el completocontrol automatizado de una  montura astronómica.
En principio solo acepta ordenes  para fijar la velocidades de giro y potencia en cada eje y devolver la posición registrada  en contador virtual de  cada motor  calculada en función la dirección y del numero de micropasos que los motores hayan completado En total acepta un juego de unas veinte ordenes, que permiten fijar distintos parámetros de la montura y preferencias, así como alterar y almacenar la tablas de micropasos en almacenados en EEPROM.

PicGoTo++  permite controlar hasta cuatro motores de pasos, dos para mover los ejes de la montura y otro  para el control automatizado del enfocador y un tercero que se puede usar para controlar una rueda de filtros o un rotador/desrotador de campo.


Picgoto Server :Servidor ASCOM/Windows.
La parte complementaria del proyecto es un servidor empotrado en una aplicación gráfica que se ejecuta en un PC con S.O. Windows,en el PC se realizan todos los cálculos necesarios para encontrar y mantener el seguimiento de los objetos celestes que se  indiquen. En la versión mas reciente permite el control de monturas ecuatoriales (aquellas cuyo eje vertical  es paralelo al eje de rotación terrestre) y monturas horizontales ó alt-azimutales cuyo eje vertical apunta a cénit).
En ambos tipos de montura son necesarios cálculos trigonométricos y/o matriciales que sobrepasan a la capacidades de un microcontrolador de 2Kb .

Sin embargo el microcontrolador es capaz de generar las señales de control y excitación de los motores con mayor precision  que un PC,ya que dispone dispositivosy temporizadores dedicados, con estas funciones y a diferencia de PC no ejecuta un sistema operativo que puede requerir y sustraer recursos y ciclos de programa para otras tareas.


Para poder interactuar con las aplicaciones de  software astrónomico mas populares,Cartas estelares/planetario,autoguiado captura de imágenes , ,implementa varios drivers ASCOM que es el estándar de facto para aplicaciones astronómicas que se ejecutan sobre  Windows.

El sistema en funcionamiento
Para ilustrar el funcionamiento de sistema clásico  ,de vez en cuando subo algún vídeo para que sirva de ejemplo a los compañeros que  usan el sistema. En este caso se muestra el sistema conectado al popular software astronómico Stellarium. El sistema se esta ejecutando en modo ecuatorial configurado para un par de motores de 400 pasos 1,2 Amperio que se van instalar en una montura de un telescopio de 600mm de apertura.


Yo también lo uso (a ver..)Mi Telescopio.
(continuará)