Servicio de flight tracking SACTA
Transcripción
Servicio de flight tracking SACTA
Diseño Y Aplicaciones de Sistemas Distribuidos Servicio de flight tracking SACTA (Simulador Automático de Control de Tráfico Aéreo) Joan Vila, Enrique Hernández, José Simó DISCA / UPV Departament d’Informàtica de Sistemes i Computadors Universitat Politècnica de València SACTA Índice – Definición del problema – Estructura de la aplicación – Ampliaciones DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Introducción 2 Control de Tráfico Aéreo Objetivo – Asegurar el tráfico comercial y aéreo. mantener las distancias de seguridad guiarlos para el despegue o aterrizaje Gestionar incidencias (mal tiempo, cierre aeropuertos, etc.) – y todo esto sin producir retrasos… División – Todas este control se realiza por zonas. DYA Diseño Y Aplicaciones de Sistemas Distribuidos Coordinar los movimientos de miles de aviones 3 Control de Tráfico Aéreo División (ver animación aena.swf arrastrando el fichero al navegador) – En España el tráfico se divide por zonas. – Cada zona esta enlazada con el resto por redes informáticas. DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Cada zona gestiona un área geográfica con un radar 4 Control de Tráfico Aéreo DYA Diseño Y Aplicaciones de Sistemas Distribuidos Centro de control de tránsito aéreo (ACC) – Controla el tráfico aéreo en la zona correspondiente. Están situados en Madrid, Barcelona, Las Palmas de Gran Canaria y Sevilla, y el centro de control de área terminal (TACC) de Palma de Mallorca. – Éstos se complementan con los TACC de Valencia y Santiago, que proporcionan también distintos servicios de tránsito aéreo. – Cada uno de estos centros dispone de un radar primario y secundario. Primario: sólo permite determinar la posición de la aeronave en dos dimensiones Secundario ; ofrece datos tales como identificación y nivel de vuelo (altura barométrica), utilizando un transponder. 5 Control de Tráfico Aéreo Transponder (ver animación transponder.swf) DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Responde a la señal del radar devolviendo información de altura, etc. 6 Control de Tráfico Aéreo Plan de vuelo. DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Antes de iniciar un vuelo el piloto proporciona al controlador de tráfico aéreo: Nombre de la aerolínea y número de vuelo. Tipo de avión y equipamiento. Velocidad y altitud de vuelo prevista. Ruta de vuelo (aeropuerto origen y destino; centros por donde va a pasar). – Este plan de vuelo es validado y se introduce en el ordenador, que genera una ficha de progreso de vuelo. Esta ficha se pasa de controlador a controlador cuando va pasando de zona. Esta ficha es constantemente actualizada con la información en tiempo real del vuelo. 7 Control de Tráfico Aéreo Navegación aérea. DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Navegación instrumental: Se realiza con el apoyo de instrumentos. Tienen un plan de vuelo y sigue una rutas establecidas. – Cartas de navegación Definen las “carreteras aéreas”. Hay dos espacios aéreos: Inferior : < 24000 ft (7320m). Superior: >= 24000 ft. – Separación de seguridad. Altitud: Espacio (305m) Espacio (610m) aéreo Inferior 1000ft aéreo Superior 2000ft Misma altitud: 5 millas (8km). 8 Control de Tráfico Aéreo Curiosidades I… SAGE: Precursor de los Sistemas de control de tráfico aéreo DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Whirlwind (1951). Primer ordenador para aplicaciones en tiempo real con una interfaz gráfica. 9 Control de Tráfico Aéreo Curiosidades II… DYA Diseño Y Aplicaciones de Sistemas Distribuidos – SAGE 1955: Evolución de la terminal gráfica. 10 Coordenadas geográficas Cualquier lugar de la Tierra se determina con dos números, su latitud y su longitud. – La longitud mide el ángulo a lo largo del ecuador desde cualquier punto de la Tierra. Se acepta que Greenwich en Londres es la longitud 0. DYA Diseño Y Aplicaciones de Sistemas Distribuidos – La latitud mide el ángulo entre cualquier punto y el ecuador. 11 Coordenadas geográficas Notación utilizada: – Hay varias notaciones para representar las coordenadas; nosotros vamos a utilizar número reales con signo. Madrid (-3,41 40,24) O:Oeste Palma de Mallorca (2,39 39,35) Longitud - Longitud + E:Este Latitud `- DYA N:Norte Latitud + Diseño Y Aplicaciones de Sistemas Distribuidos – 1º es aproximadamente 110km. (pero varia dependiendo la latitud y la longitud) Santiago de Chile (-70,11 -20,32) S:Sur Sydney (151,18 -33,90) 12 SACTA Índice – Definición del problema – Estructura de la aplicación – Ampliaciones DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Introducción 13 Definición del problema DYA Diseño Y Aplicaciones de Sistemas Distribuidos El sistema físico – Se dispone de un radar que proporciona información de las señales emitidas por los transponders de los aviones en un radio de 150 millas náuticas alrededor de Manises (0.28, 39.29) y se desea realizar una aplicación distribuida en Java que permita visualizar gráficamente la pantalla del radar en cualquier computador conectado a la red. Servicio CORBA de monitorización de vuelos (flight tracking) – La aplicación se estructura como un servicio CORBA con una entrada en un Servicio de Nombres que se denominará “SACTA”. – La aplicación consta de dos tipos de componentes (objetos distribuidos): radar: existe una única instancia instancia en ejecución en el sistema. Toma los datos del radar y los redistribuye a los objetos de tipo monitor vía alguno de los siguientes protocolos: difusión IP, TCP/IP, CORBA (activa y reactiva). El radar actúa como gestor de grupo por suscripción de los objetos de tipo monitor. monitor: se pueden crear tantas instancias como se deseen en diferentes máquinas. Constituyen un grupo dinámico donde el objeto radar actúa de gestor de grupo. Visualizan de forma gráfica la información que suministra el objeto radar. Las cámaras han de suscribirse previamente en el radar para tener acceso a la información. Esta suscripción requerirá algún tipo de autentificación como, por ejemplo, usuario y contraseña. 14 Definición del problema Monitorización de vuelos (flight tracking) monitor radar monitor DYA Diseño Y Aplicaciones de Sistemas Distribuidos monitor 15 La interfaz IDL module corba { module monitor{ struct aeroNau { struct instantania { DYA Diseño Y Aplicaciones de Sistemas Distribuidos double lon; double lat; sequence<aeroNau> avions; }; double alt; double vel; boolean ident; unsigned long estat; unsigned long color; string nom; string desti; interface monitorInt{ inst); void notificarInstantania(in instantania boolean funciona(); }; }; long long timestamp; }; 16 La interfaz IDL module radar { struct subscripcioInfo { string ip; DYA Diseño Y Aplicaciones de Sistemas Distribuidos unsigned long port; }; struct llistaSubscripcio { sequence<string> IORmonitors; }; enum modeCom {difusio, callback, tcpip, cap}; interface radarInt { subscripcioInfo subscriure(in string ior, in modeCom m); llistaSubscripcio obtenirLlista(); void baixa(in string ior); boolean funciona(); corba::monitor::instantania obtenirInstantania(); }; }; }; 17 Definición del problema DYA Diseño Y Aplicaciones de Sistemas Distribuidos Comunicación – La comunicación entre los objetos radar y monitor se realizará, fundamentalmente, vía invocaciones CORBA, excepto la notificación de la información del radar que deberá poder adoptar las siguientes formas: Difusión: se establecerá una dirección IP y un port para el canal de difusión. Estos parámetros podrán especificarse como argumentos de ejecución del radar y serán comunicados al cliente al suscribirse. TCP/IP: el radar establecerá una conexión TCP con cada cliente para suministrarle los datos. El port para solicitar la conexión podrá especificarse como argumento de ejecución del radar y será comunicado al cliente al suscribirse. CORBA reactiva (callback): el monitor indicará esta forma de comunicación al suscribirse y el radar invocará un método del cliente (notificarInstantania) cada vez que deba actualizar la información del radar. CORBA activa: el monitor indicará esta forma de comunicación al suscribirse y será su responsabilidad invocar un método del radar (obtenirInstantania) cada vez que quiera obtener información del radar. 18 Definición del problema Estructura de datos con la información del radar corba::monitor::instantania – Esta estructura de datos es una secuencia de datos cuya estructura responde a los datos de una aeronave, definidos como: corba::monitor::aeroNau – Cuando se utiliza comunicación CORBA, bien sea activa o reactiva, esta estructura de datos se especifica como parámetro de los métodos correspondientes. – Cuando se utiliza comunicación por difusión o TCP/IP, esta estructura de datos debe serializarse y enviarse por el canal de comunicación correspondiente. DYA Diseño Y Aplicaciones de Sistemas Distribuidos – La estructura de datos para el intercambio de la información que proporciona el radar se especifica en IDL: 19 Definición del problema Estructura de datos con la información del radar DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Las bibliotecas de acceso a la antena física (sacta_radar.jar) contienen métodos que devuelven estructuras de datos de tipo corba::monitor::aeroNau o arrays de estas estructuras. corba.monitor.aeroNau[] getAeronaus(); corba.monitor.aeroNau getAeronau(String nom); – Estas bibliotecas rellenan algunos campos de la estructura aeroNau: double lon: longitud geográfica en grados double lat: longitud geográfica en grados double alt: altitud en pies double vel: velocidad en mph string nom: código de transponder. Es un identificador único de cada aeronave. long long timestamp: Valor del tiempo del sistema (según System.currentTimeMillis).Útil para decidir cuando una aeronave ha quedado fuera del alcance. – El resto de campos los deja en blanco y pueden establecidos libremente por el monitor para establecer algunos atributos de visualización. 20 Definición del problema Seguridad – El método de autentificación puede ser el básico de usuario/contraseña o de certificados digitales y se realizará al realizar una suscripción. – El servidor de radar no admitirá la suscripción, ni proporcionará ninguna información a través de métodos CORBA, ni establecerá conexiones TCP/IP con ningún cliente que no se encuentre autentificado. Agujero permitido: la difusión si podrá se escuchada por clientes no suscritos ni autentificados que hayan conseguido averiguar el canal de difusión. – Los requerimientos de seguridad podrán ser motivo de modificar la especificación IDL del sistema, previa aprobación por el profesor. DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Se habilitará un gestor de seguridad Java que permita la autentificación de un cliente monitor ante un servidor de radar. 21 SACTA Índice – Definición del problema – Estructura de la aplicación – Ampliaciones DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Introducción 22 Estructura de la aplicación Objetos remotos – La aplicación consta de dos objetos remotos cuya especificación IDL se ha proporcionado y cuya funcionalidad es la siguiente: DYA Diseño Y Aplicaciones de Sistemas Distribuidos radar Actuar como gestor de un grupo dinámico de monitores que funciona por suscripción Obtener la información de la antena del radar Distribuir la información del radar a todos los monitores del grupo suscritos monitor Gestionar alta y baja en un grupo dinámico por suscripción Visualizar de forma gráfica la información que suministra el objeto radar. – Cada objeto remoto se estructurará como un proyecto diferente y cada proyecto debe dar lugar a un fichero JAR ejecutable desde fuera del entorno de desarrollo. Bibliotecas proporcionadas – sacta_monitor.jar: biblioteca que facilita la representación gráfica de aviones. – sacta_radar.jar: biblioteca que facilita el acceso a la antena física del radar. – sacta_emulador_radar.jar: biblioteca que simula una antena de radar para poder realizar pruebas cuando no se tiene acceso a la antena real 23 Estructura de la aplicación monitor Gestor grupo sacta_radar.jar Biblioteca de acceso a la antena Fuente datos Obtención datos sacta_monitor.jar Biblioteca de acceso a los gráficos Actualizar monitor sacta_emulador_radar.jar Biblioteca de simulación del radar DYA Diseño Y Aplicaciones de Sistemas Distribuidos radar 24 El objeto radar Interfaz IDL – Los métodos que exporta este objeto se encuentran en la interface CORBA-IDL: DYA Diseño Y Aplicaciones de Sistemas Distribuidos corba::radar::radarInt – Define los métodos clásicos de un gestor de grupos dinámicos: subscripcioInfo subscriure(in string ior, in modeCom m) Suscribe un objeto CORBA cuyo IOR se proporciona. También se indica el método modecom deseado para obtener la información del radar: difusio, callback, tcpip o cap. Retorna una estructura con los datos de la suscripción: canal de difusión o port TCP/IP para establecer conexiones. llistaSubscripcio obtenirLlista(); Retorna la lista de IORs con los monitores suscritos. void baixa(in string ior); Da de baja una suscripción. – Y algún método adicional: boolean funciona(); Heartbeat para saber si se encuentar vivo. corba::monitor::instantania obtenirInstantania(); Método para obtener una instantánea. Útil cuando se especifica como modo de comunicación “cap”. 25 El objeto radar Biblioteca sacta_radar.jar – Contiene la Clase radar.ComunicacioRadar – Constructor: ComunicacioRadar(radar.Radar_Int clase_callback); – Métodos de la clase: interfaz radar.ComunicacioRadar_Int void arranca(String host, int port); void para(); corba.monitor.aeroNau[] getAeronaus(); corba.monitor.aeroNau getAeronau(String nom); DYA Diseño Y Aplicaciones de Sistemas Distribuidos Facilita obtener información desde la antena física del radar 26 El objeto radar Biblioteca sacta_radar.jar DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Callbacks: cada vez que existe información nueva procedente de la antena se invoca el método: void informa_canvi(String nom) con el nom de la aeronave que ha cambiado de posición. – Este método ha de estar incluido en la clase declarada como clase_callback en el constructor de ComunicacioRadar y ha de implementar la siguiente interfaz: package radar; public interface Radar_Int { public void informa_canvi(String nom); } 27 El objeto radar Estructura de un servidor simple package radar; public class Radar extends java.lang.Thread implements Radar_Int{ /* Creacio dels canals de comunicacio */ Diseño Y Aplicaciones de Sistemas Distribuidos private comunicacio_radar.ComunicacioRadar antena = null; private String host_radar = "localhost"; /*”servantena.etsid.upv.es”*/ private int port_radar = 30003; public Radar(){ super(); /*TODO: Si no te interficie grafica, s’hauran de posar en marxa aci els sistemes * de comunicacio: (antena, tcp, difussio, corba, rmi, etc...) * this.antena = new comunicacio_radar.ComunicacioRadar(this.host_radar, * this.port_radar, this);*/ } /* Metode que es invocat quan hi ha algun canvi en les aeronaus a l'alcanç. */ public void informa_canvi(String nom){ DYA /* Avisar als canals de comunicacio que ha canviat l'objecte a enviar */ } public static void main(String[] args){ Radar r = new Radar(); } } 28 El objeto radar El problema de los aviones que quedan fuera del alcance – Cuando un avión queda fuera del alcance hay que eliminarlo de la instantánea. long long timestamp: Valor del tiempo del sistema según System.currentTimeMillis Biblioteca sacta_emulador_radar.jar – Ejecutando la clase principal de este fichero se obtiene por el port 30003 de localhost una fuente de datos semejante a la antena del radar. – De hecho reproduce una traza contenida en un fichero. – En fase de mejora… DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Se puede utilizar un timeout y el siguiente campo de la estructura aeroNau: 29 El objeto monitor Interfaz gráfica – Presenta la información del tráfico aéreo. DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Información estática Malla: latitud y longitudes de referencia. Mapa : mapa vectorial de la zona. Rutas : rutas de vuelo – Información dinámica Posición del haz (ángulo) Tiempo. Objetos. Presenta la información: siguiente Nombre, destino Longitud, Latitud Altitud (ft), Velocidad (NM/h). – Se puede presentar información. u ocultar esta – Ventana con la información de los aviones 30 El objeto monitor Interfaz IDL – Los métodos que exporta este objeto se encuentran en la interface CORBA-IDL: – Define los métodos: void notificarInstantania(in instantania inst); Método callback utilizado por el objeto CORBA radar para comunicar la instantánea cuando se utiliza el método de comunicación CORBA reactivo. boolean funciona(); Heartbeat para saber si se encuentar vivo. DYA Diseño Y Aplicaciones de Sistemas Distribuidos corba::monitor::monitorInt 31 El objeto monitor Biblioteca sacta_monitor.jar – Contiene la Clase monitor.VisualitzadorGrafic DYA Diseño Y Aplicaciones de Sistemas Distribuidos Permite la visualización gráfica de la información proveniente del radar – Constructor VisualitzadorGrafic() – Métodos de clase: interfaz monitor.Monitor_Int Integer afegirAeronau(corba.monitor.aeroNau avio); void esborrarAeronau(Integer clau); void netejarPantalla(); – Descripción: En el momento en que se añade un avión con afegirAeronau este aparece en la pantalla. El valor retornado es un código hash que luego se utiliza para borrarlo. Si se añade un avión ya insertado (con el mismo nombre), este se actualizará en vez de representarse dos veces. El método netejarPantalla borra todas las aeronaves representadas. Útil para no tener que borrar cada aeronave cuando se recibe una nueva instantánea. 32 El objeto monitor Demo de las bibliotecas sacta_radar.jar y sacta_monitor.com (i) DYA Diseño Y Aplicaciones de Sistemas Distribuidos public class demo extends java.lang.Thread implements radar.Radar_Int{ /* Creacio dels canals de comunicacio */ private comunicacio_radar.ComunicacioRadar_Int antena = null; private monitor.Monitor_Int monitor = null; private String host_radar = "localhost"; private int port_radar = 30003; /************************************************** * Constructor: * 1er Creem el visualitzador * 2om Arranquem la comunicacio amb l'antena **************************************************/ public demo(){ super(); this.monitor = new monitor.VisualitzadorGrafic(); this.antena = new comunicacio_radar.ComunicacioRadar(this); this.antena.arranca(this.host_radar, this.port_radar); } 33 El objeto monitor Demo de las bibliotecas sacta_radar.jar y sacta_monitor.com (ii) /************************************************** * Metode que es invocat quan hi ha algun canvi en DYA Diseño Y Aplicaciones de Sistemas Distribuidos * les aeronaus a l'alcanç. * Informa als distints servidors que ha hagut canvis * en l'objecte que han de servir. **************************************************/ public void informa_canvi(String nom){ /* Avisar als canals de comunicacio que ha canviat l'objecte a enviar */ corba.monitor.aeroNau nau = antena.getAeronau(nom); this.monitor.afegirAeronau(nau); } public static void main(String[] args){ demo d = new demo(); } } 34 SACTA Índice – Definición del problema – Estructura de la aplicación – Ampliaciones DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Introducción 35 Ampliaciones – Realizar una interfaz gráfica (GUI) para el servidor de radar, realizando un diseño que separe claramente, el código de aplicación del código CORBA y el código de la interfaz gráfica. – El diseño gráfico del servidor será completamente libre. DYA Diseño Y Aplicaciones de Sistemas Distribuidos Interfaz gráfica para el servidor de radar 36 Ampliaciones Tolerancia a fallos DYA Diseño Y Aplicaciones de Sistemas Distribuidos – Realizar un radar de repuesto en caliente que pase a estado activo automáticamente cuando falle el servidor primario. – Al entrar en servicio un radar de repuesto, automáticamente se pondrá en ejecución un nuevo radar de repuesto. – Al entrar en servicio un radar de repuesto lo hará “en caliente”: con toda la información de estado que mantenía el servidor primario y, en particular, las suscripciones. Servicios web – Utilizar un servicio web de un registro de aviación civil que proporcione información adicional sobre una aeronave, como por ejemplo el número de vuelo, a partir de su número de transponder. – Caso de no encontrar dicho servicio web, realice un servicio web emulado que proporcione dicha información. 37