Professional Documents
Culture Documents
SISTEMAS
INFORMTICOS
2005 - 2006
Aplicacin de mtodos de
Inteligencia Artificial para la toma de
decisiones en simulacin de
mviles.
Facultad de Informtica
Universidad Complutense de Madrid
-1-
Proyecto SSII
-2-
Proyecto SSII
SISTEMAS
INFORMTICOS
-3-
Proyecto SSII
NDICE DE CONTENIDOS
RESUMEN ...................................................................................................................................6
ABSTRACT..................................................................................................................................6
PALABRAS CLAVES.....................................................................................................................6
AUTORIZACIN .................................................................................................. 7
INTRODUCCIN .................................................................................................. 8
2.1
PRESENTACIN ..........................................................................................................................8
2.2
DESCRIPCIN DEL PROYECTO .....................................................................................................8
2.3
ORGANIZACIN DE LA MEMORIA................................................................................................9
2.4
OBJETIVOS PROPUESTOS ..........................................................................................................10
2.5
EMPRESA EADS-CASA...........................................................................................................10
2.6
PROYECTO................................................................................................................................11
2.7
ALGORITMO A* .......................................................................................................................12
2.8
ESTADO DEL ARTE ....................................................................................................................13
2.8.1
Punto de partida .................................................................................................................13
2.8.2 Conocimientos previos....................................................................................................13
ESPECIFICACIN ............................................................................................. 14
3.1
ORGANIZACIN DEL TERRENO .................................................................................................14
3.2
OBSTCULOS ...........................................................................................................................15
3.3
ESCENARIOS DE SIMULACIN ..................................................................................................17
3.3.1
Por caminos geomtricos ...................................................................................................18
3.3.2
Por lgica de decisin ........................................................................................................20
3.3.3
Por enfrentamiento de casos ..............................................................................................20
3.4
PLATAFORMA DE DESARROLLO ................................................................................................22
3.4.1
Orgenes de Java ................................................................................................................22
3.4.2
Principales caractersticas de Java....................................................................................23
3.4.3 Descripcin de Matlab.....................................................................................................26
3.4.4 Historia de Matlab ............................................................................................................27
-4-
Proyecto SSII
6
RESULTADOS ..................................................................................................... 79
7.1
7.2
INTEGRACIN......................................................................................................................78
AGRADECIMIENTOS ....................................................................................... 86
10
BIBLIOGRAFA .................................................................................................. 87
-5-
Proyecto SSII
0.1 Resumen
Este proyecto, realizado en la Universidad Complutense de Madrid para
la asignatura de Sistemas Informticos a peticin de la empresa Eads-Casa,
consiste en la simulacin mediante tcnicas de inteligencia artificial del
comportamiento de un UAV (Vehculo Areo no Tripulado), capaz de tomar
decisiones sobre su trayectoria y encontrar un camino ptimo entre dos puntos
frente a un conjunto de obstculos y teniendo en cuenta diversos factores
limitantes. El algoritmo principal est implementado en java con una interfaz
grfica en 3-D en Matlab.
0.2 Abstract
This project, carried out in the Universidad Complutense de Madrid for
the subject of Computers Systems at request of the EADS-CASA company,
consists in the simulation by means of techniques of artificial intelligence of the
behaviour of an UAV (Unmanned Air Vehicle), capable of taking decisions
about his path and find an optimum way between two points facing a group of
obstacles and taking into account different restricted factors. The principal
algorithm is implemented in java, with a graphical interface in 3-D in Matlab.
-6-
Proyecto SSII
1 AUTORIZACIN
Se autoriza a la Universidad Complutense a difundir y utilizar con fines
acadmicos, no comerciales, y mencionando expresamente a sus autores,
tanto la memoria, como el cdigo, la documentacin y/o el prototipo
desarrollado.
-7-
Proyecto SSII
2 INTRODUCCIN
2.1 Presentacin
Este proyecto naci tras diversas reuniones realizadas con el profesor
Gonzalo Pajares de la Universidad Complutense de Madrid, desde Junio de 2005
para asignar, durante el curso 2005-2006, un trabajo para la asignatura de
Sistemas Informticos.
Se nos present un proyecto, en colaboracin con la empresa EADSCASA y tras la decisin de aceptarlo en Octubre comenzamos a desarrollar.
Cuando ech a andar otro grupo de tres personas tambin colaborara
para el mismo departamento y proyecto con lo cual nos pusimos de acuerdo para
desarollarlo en paralelo.
Durante el desarrollo del proyecto se han usado tcnicas de Ingeniera del
Software, tanto para especificaciones, gestiones y planificacin como para el
diseo haciendo uso de patrones.
Las tcnicas primordiales en nuestro proyecto fueron tcnicas de
Inteligencia Artificial y tras tratarse de algoritmos las asignatura Metodologa y
Tecnologa de la Programacin era imprescindible su conocimiento.
-8-
Proyecto SSII
- El cuarto perodo se caracteriz por la integracin de las dos partes hechas por
los distintos grupos y su posterior optimizacin. En cuanto a coordinacin fue la
etapa ms difcil de llevar a cabo debido al nmero elevado de componentes para
desarrollar la aplicacin pedida.
-9-
Proyecto SSII
- 10 -
Proyecto SSII
EADS cuenta con una plantilla de unos 113.000 empleados repartidos
entre ms de 70 centros de produccin, mayormente en Francia, Alemania, Gran
Bretaa y Espaa, as como en Estados Unidos y Australia. Una red global de 29
Oficinas de Representacin mantiene el contacto con los clientes.
EADS tiene, en su sede de Pars, una central integrada con las funciones
de Estrategia, Marketing y Asuntos Jurdicos, y en la de Munich, las de Finanzas,
Adquisiciones
y
Comunicacin.
La Direccin operativa de EADS es responsabilidad de los Chief Executive
Officers Tom Enders y Nol Forgeard. Estn al frente del Executive Committee
(Comit Ejecutivo), que es el rgano central de direccin en el mbito operativo.
Como Chief Operating Officers (COO), Jean-Paul Gut y Hans Peter Ring son
responsables del desarrollo estratgico y financiero respectivamente.
Proyecto
Nuestra colaboracin con EADS se ha reducido a realizar en el sector de
inteligencia artificial el desarrollo de posibles algoritmos iniciales para la
investigacin del proyecto sobre el cual estn trabajando ellos.
2.6 Proyecto
Es un demostrador tecnolgico de un avin no tripulado de combate que
tiene previsto su primer vuelo en 2010. El programa est liderado por Dassault
Aviation y en l participan importantes industrias aeronuticas de varios pases
europeos.
EADS CASA y Dassault Aviation firmaron el 19 de mayo, en las
instalaciones de Getafe, el contrato que establece la participacin de la parte
espaola de EADS en el programa. Con este contrato EADS CASA contina
progresando en su estrategia de ser en Espaa la empresa de referencia en los
programas nacionales e internacionales de vehculos areos no tripulados,
apoyndose para ello en las considerables capacidades tecnolgicas que ha
desarrollado con la integracin de sistemas, comunicaciones y enlace de datos,
estructuras complejas en fibra de carbono, sistemas de misin y estaciones de
tierra, entre otras. Algunas de estas capacidades son las que EADS CASA
aportar
en
los
paquetes
de
trabajo
de
su
responsabilidad.
Las negociaciones de este contrato han sido llevadas a cabo en estrecha
coordinacin con el Ministerio de Defensa Espaol. La divisin Defence and
Security Systems de EADS ofrece soluciones de sistemas integrados para las
nuevas misiones a desempear por las fuerzas armadas y las fuerzas de
seguridad nacionales. Sus actividades se extienden a las reas de aviones
militares, sistemas de misiles, inteligencia, sistemas de vigilancia y
reconocimiento (ISR) con vehculos areos tripulados y no tripulados (UAVs),
- 11 -
Proyecto SSII
sistemas de gestin de combate, electrnica de defensa, sensores, avinica y
servicios relacionados.
El futuro sistema UAV de tipo
MALE (Medium Altitude Long
Endurance) con gran
autonoma para todas las
misiones ISTAR (Intelligence,
Surveillance, Target
Acquisition, Reconnaissance).
Figura 1 - UAV Eagle 1
2.7 Algoritmo A*
Realizamos una pequea introduccin al algoritmo A* ya que nuestro
trabajo se ha centrado en este algoritmo.
El algoritmo A* es un mtodo de bsqueda en el cual se garantiza que
siempre que haya al menos una solucin, va a encontrar la mejor de ellas posible.
El algoritmo en si no garantiza que la bsqueda sea mnima, pero siempre
encontrar la solucin ptima al problema propuesto.
La bsqueda que realiza este algoritmo se realiza a travs de un espacio
de estados en el que slo se visitan posibles estados en los cuales se puede
alcanzar una solucin mejor que la ltima encontrada (en caso de ser la primera,
valdra que pudiera llegar a ser solucin).
Esto no quiere decir que se visiten todos ellos, sino, que se va
seleccionando el nodo que parece mejor de cara a encontrar una solucin ptima
(basndonos en una heurstica que nos determine cunto de prometedor es un
nodo) y as hasta que no haya un nodo no expandido que pueda mejorar la
solucin encontrada hasta el momento. sta es la principal diferencia con
respecto a otros algoritmos de bsqueda que no tienen heursticas, los nodos
expandidos, sern en general, menos que en otros tipos de bsqueda.
- 12 -
Proyecto SSII
- 13 -
Proyecto SSII
3 Especificacin
3.1 Organizacin del terreno
El terreno sobre el que se va a ejecutar el algoritmo se organiza
diferenciando una parte esttica, que son los obstculos infranqueables que
determinan el terreno fijo y que es constante durante toda la ejecucin
(montaas, edificios, suelo raso), y obstculos variables, que se aaden al
anterior, y que influyen en la toma de decisiones del algoritmo. Estos ltimos
influyen de forma que la decisin tomada pueda ser ms o menos ptima,
decidiendo si se expanden los nodos a travs de ellos dependiendo de los
diferentes pesos que puedan tener, mientras que los primero limitan la expansin
de nodos hacindose infranqueables.
En esta imagen se muestra una parte del terreno esttico, formado por
diferentes relieves los cuales el objeto mvil no puede traspasar.
Figura 2 Terreno 3D
- 14 -
Proyecto SSII
3.2 Obstculos
Como obstculos definimos cualquier elemento de nuestro entorno que
influya en el camino que decida tomar el avin para dirigirse a su destino u
objetivo.
Hemos definido distintos tipos de obstculos:
Obstculos con distintos pesos:
Cada obstculo, dependiendo de su riesgo, tendr mayor o menor coste
asociado. Por ejemplo, un obstculo infranqueable, como puede ser una
montaa, tendr un coste mayor que cualquier otro tipo de obstculo ya que no
puede ser atravesado; el algoritmo A* implementado lo que har es meterlo
directamente en la lista de cerrados para no expandir este tipo de nodos. Sin
embargo, una zona alejada de un radar tendr un coste proporcional al riesgo de
- 15 -
Proyecto SSII
* Bajo = (0,0.25)
* Medio = [0.25,0.5)
* Alto = [0.5,0.75)
* Infranqueable = [0.75,1]
* Libre de obstculo = 0
Peligrosidad baja
Peligrosidad media
Peligrosidad alta
- 16 -
Proyecto SSII
- 17 -
Proyecto SSII
Representan el radio de alcance del misil. Teniendo en cuenta este
radio el vehculo deber estimar (en el caso de conocer la
composicin del ADU), los radios, alturas y ngulos relativos a l,
para poder realizar sus clculos de estrategia de ruta tenindolos en
cuenta. Un cdigo de colores indica el grado de riesgo por
comparacin entre unas y otras amenazas, de tal forma que los
tonos claros indican bajo riesgo relativo a los tonos oscuros que
indican alto riesgo.
Representa el mismo radio que en el caso anterior slo que para un
ADU que funciona en pop-up.
Representan zonas de aparicin de posibles ADUs de forma
aleatoria y desconocida a priori.
Ejemplo de ruta del vehculo que cumple la resolucin del escenario.
X
- 18 -
Proyecto SSII
El dispositivo mvil sortea los obstculos, comprometiendo factores como
el combustible, por ejemplo, a favor de encontrar un camino por la mejor ruta
posible. Las figuras siguientes muestran como el avin sortea los obstculos; si
puede no los atravesar ya que es posible que alcance el objetivo por un camino
alternativo, bien con coste mayor o menor pero sin arriesgar su pilotaje.
- 19 -
Proyecto SSII
x
x
- 20 -
Proyecto SSII
En un primer momento el mvil elegira pasar por el pasillo libre que le
conduce a su objetivo, pero tras introducir un obstculo de mayor peso justo por
ese camino, la toma de decisin cambiara y rodeara este nuevo obstculo por la
zona que menos peligro representase (en este caso por su izquierda).
x
x
En este caso, al incluir un obstculo justo antes del nodo objetivo, obliga al
mvil a realizar un rodeo que alarga su camino hacia el destino.
- 21 -
Proyecto SSII
- 22 -
Proyecto SSII
- 23 -
Proyecto SSII
no existe la definicin de macros (#define)
no existe la necesidad de liberar memoria (free)
- 24 -
Proyecto SSII
El Cargador de Clases tambin ayuda a Java a mantener su seguridad,
separando el espacio de nombres del sistema de ficheros local del de los
recursos procedentes de la red. Esto limita cualquier aplicacin del tipo Caballo
de Troya, ya que las clases se buscan primero entre las locales y luego entre las
procedentes del exterior. Las clases importadas de la red se almacenan en un
espacio de nombres privado, asociado con el origen. Cuando una clase del
espacio de nombres privado accede a otra clase, primero se busca en las clases
predefinidas (del sistema local) y luego en el espacio de nombres de la clase que
hace la referencia. Esto imposibilita que una clase suplante a una predefinida. En
resumen, las aplicaciones de Java resultan extremadamente seguras.
Arquitectura neutral: El compilador Java compila su cdigo a un fichero objeto
de formato independiente de la arquitectura de la mquina en que se ejecutar
(este fichero con tiene los bytecodes). Cualquier mquina que tenga el sistema de
ejecucin (run-time, que s es dependiente de la mquina) puede ejecutar ese
cdigo objeto, sin importar en modo alguno la mquina en que ha sido generado.
Portable: Ms all de la portabilidad bsica por ser de arquitectura
independiente, Java implementa otros estndares de portabilidad para facilitar el
desarrollo. Los enteros son siempre enteros de 32 bits en complemento a 2 y las
cadenas de caracteres utilizan Unicote (no ASCII). Adems, Java construye sus
interfaces de usuario a travs de un sistema abstracto de ventanas de forma que
las ventanas puedan ser implantadas en entornos diferentes (Unix, Pc, Mac, etc.).
Altas prestaciones: Para los casos en que la velocidad del intrprete Java no
resulte suficiente, existen mecanismos como los compiladores JIT (Just In Time),
que se encargan de traducir, a medida que va siendo necesario, los bytecodes a
instrucciones de cdigo mquina. Tambin existen otros mecanismos como los
compiladores incrementales y sistemas dedicados para tiempo real.
Multitarea: Java permite muchas actividades simultneas en un programa. Los
threads son pequeos procesos o piezas independientes de un gran proceso. Al
estar los threads construidos en el lenguaje, son ms fciles de usar y ms
robustos que sus homlogos en otros lenguajes que no los soportan de manera
nativa. Esta caracterstica permite mejorar el rendimiento interactivo y el
comportamiento en tiempo real.
Dinmico: Java se beneficia todo lo posible de la tecnologa orientada a
objetos. Java no intenta conectar todos los mdulos que comprenden una
aplicacin hasta el tiempo de ejecucin. Las libreras nuevas o actualizadas no
paralizarn las aplicaciones actuales (siempre que mantengan el API anterior).
Esto permite actualizar el cdigo en caliente y facilita el mantenimiento del
software. Por otro lado, Java proporciona mecanismos para cargar
dinmicamente clases desde la red, de manera que nuevos contenidos de
informacin podrn ser tratados por manejadores especficos.
- 25 -
Proyecto SSII
Anlisis numrico
Clculo matricial
Procesamiento de seales
Grficos
Procesamiento de seales
Diseo de sistemas de control
Simulacin de sistemas dinmicos
Identificacin de sistemas
Redes neuronales y otros.
Proyecto SSII
- 27 -
Proyecto SSII
- 28 -
Proyecto SSII
compatibles y se facilita mucho en este sentido el proceso de integracin de una
a la otra, dando como resultado el cerebro final de la aplicacin.
- 29 -
Proyecto SSII
(estructuras de datos) y sus accesos. El desglose de la implementacin se
realizar en el apartado siguiente 3.4 de funcionalidades.
Implementacin
El algoritmo se puede dividir en cuatro partes bien diferenciadas:
Inicializacin.
Expandir nodos.
Eleccin de nodos.
Construccin del camino.
Inicializacin:
Hablaremos principalmente de cmo se inicializa la parte del modelo de
nuestra aplicacin(estructura de datos usadas).
Nuestra aplicacin necesita almacenar un grupo de datos en un slo objeto.
Los arrays sirven bien para este propsito, pero algunas veces
necesitamos
incrementar o reducir dinmicamente el nmero de elementos del array, o hacer
que contenga distintos tipos de datos.
Para esta clase de grupos de datos crecientes y menguantes, podemos
usar la clase Vector, o la reciente clase ArrayList del paquete java.util. Nosotros
elegimos ArrayList.
Un ArrayList contiene tantos objetos como necesitemos. ArrayList tiene
varios constructores, dependiendo de cmo necesitemos construir el ArrayList.
Un objeto ArrayList slo contiene referencias a objetos. Para almacenar tipos
primitivos como double, long, o float, usamos una clase envoltura.
Si necesitamos circular a travs de los elementos del ArrayList, usamos la
clase Iterator y sus mtodos hasNext y next.
ArrayList es una de las muchas clases del Collection Framework, que
proporciona un conjunto de interfaces y clases bien-diseados para almacenar y
manipular grupos de datos como una sola unidad, una coleccion.
La estrutura de paquetes:
java.util
Class ArrayList
java.lang.Object
java.util.AbstractCollection
java.util.AbstractList
java.util.ArrayList
- 30 -
Proyecto SSII
Implementacin 2D
- 31 -
Proyecto SSII
Implemetacin 3D
Expandir nodos:
Se realiza a travs de la funcin expandArray de la que se tratar posteriormente.
Lo fundamental en esta funcin es el clculo de la heurstica: el valor
heurstico resulta de calcular la distancia entre el punto donde se encuentra
actualmente y el punto destino.
Existen tres tipos de distancias entre dos puntos A(x1, y1) y B(x2, y2) que
consideramos:
a) Eucldea = [ (x2 x1) 2 + (y2 y1)2 ]1/2 Es la distancia que elegimos.
b) Manhattan = abs(x-xpunto)+abs(y-ypunto)
c) Cuadrada o ajedrez = max(abs(x-xpunto),abs(y-ypunto))
Como cada nodo del entorno tiene un peso asociado correspondiente a su
tipo (a mayor peligrosidad el peso ser mayor) la distancia vendr influida por un
compromiso entre menor distancia y una seguridad mxima o la que le
indiquemos.
Tambin nos hemos preocupado que cumpla otras propiedades como la de
consistencia. La consistencia nos dice que para todo nodo n y su sucesor m, el
coste estimado de alcanzar el objetivo desde n, no es mayor que el coste de
alcanzar m ms el coste de alcanzar el objetivo desde m.
Destacar que en el algoritmo final 3D los recorridos tanto en esta funcin
como en todas se modificaron para tener en cuenta esta tercera coordenada.
- 32 -
Proyecto SSII
Eleccin de nodos
Esta eleccin se hace a travs de la funcin implementada minFn. Lo que
hace es elegir aquel nodo de los existentes en la lista de nodos abiertos, opened,
el cual tenga menor coste desde el nodo padre.
Construccin del camino
Una vez terminado el bucle principal del A*, si existe camino posible,
tenemos en la lista de closed todos los nodos expandidos y que formarn el
camino ptimo (a excepcin de los obstculos infranqueables). Se trata pues de
construir este camino a travs de enlaces de padres a hijos en la lista de closed.
Se recorre esta lista hasta alcanzar las coordenadas del nodo origen empezando
a con el nodo objetivo que fue el ltimo insertado en la lista de cerrados.
El enlace se hace a travs de los atributos del objeto closedNode (parentX,
parentY, parentZ) que nos guardan el enlace al nodo padre.
4.4 Funcionalidad
En esta apartado desglosaremos la aplicacin a nivel ms bajo, es decir, a
nivel de programacin: funcionalidades.
La implementacin de la parte algortmica se divide en cuatro paquetes
correspondientes a los distintos niveles que podemos encontrar en un modelo
estructural vista controlador:
DOCUMENTACIN
Paquetes
Algorithm
Control
Gui
Model
En la aplicacin final, los paquetes gui y control dejan de existir puesto que
las funcionalidades de estos paquetes se harn desde la implementacin y
enlace con Matlab. Se desarrollaron para depuraciones y desarrollo de interfaz
2D en un primer incremento de la aplicacin.
A continuacin pasamos a explicar cada paquete:
- 33 -
Proyecto SSII
ALGORITHM
Constructor
Algorithm()
Mtodos utilizados
(package private) static float
(package private)
expandArray(int xn,int yn,int zn,float pathCost,
static java.util.ArrayList
int xt,int yt,int zt,java.util.ArrayList closedList
,int mx, int my, int mz, Espacio map)
static float
min(float a, float b)
static int
minFn(java.util.ArrayList opened,
int openedCount, int xTarget, int yTarget,
int zTarget)
static int
java.util.ArrayList
runAlgorithm(Espacio map,
float combustibleTotal,
float gastoCombustibleMedio)
Proyecto SSII
public Algorithm()
Detalles de los mtodos
Distance : calcula la distancia Eucldea entre (xt,yt,zt) y (xn,yn,zn)
static float distance(int xt,int yt,int zt,int xn,int yn, int zn)
expandArray: funcin que haya los sucesores del nodo (xn,yn,zn)
staticjava.util.ArrayList
expandArray(int xn,int yn,int zn,float pathCost,int xt,int yt,int zt,
java.util.ArrayList closedList,int mx,int my,int mz, Espacio map)
Throws: lanza excepcin si no encuentra nodos sucesores posibles
ControlError
Min: halla el mnimo entre dos valores a y b
public static float min(float a,float b)
minFn: funcin para elegir que nodo va ser el siguiente a expandir de entre todos
lo nodos en la lista de abiertos,opened.
public static int minFn(java.util.ArrayList opened,int openedCount,
int xTarget,int yTarget,int zTarget)
nodeIndex
public static int nodeIndex(java.util.ArrayList closed, int xVal,
int yVal,int zVal)
runAlgorithm: implementa el A*
public java.util.ArrayList runAlgorithm(Espacio map,
float combustibleTotal,
float gastoCombustibleMedio)
throws ControlError
Throws: lanaza excepcin si no hay camino posible
ControlError
Se le pasa el mapa del terreno en forma objeto del tipo Espacio que es
quien contiene el array con los nodos de nuestro mapa. Adems para el
manejo de la variable interna del avin condicionante combustible se le
pasa las dos variables combustibleTotal que, como su nombre indica, es
el combustible que inicialmente lleva el avin autodirigido, y la otra
variable que mide lo que consume el avin por nodo recorrido.
El bucle principal de la funcin es el del A*, recorrer los nodos para
hallar el camino a travs de ver si estaban o no ya expandidos y si
estaban en abierta o no para reconsiderar costes.
- 35 -
Proyecto SSII
CONTROL
PAQUETE CONTROL: contiene dos clases para el control de la aplicacin
ControlError
Main
serialVersionUID
Constructor
ControlError(java.lang.String error)
Proyecto SSII
queremos visualizar
public ControlError(java.lang.String error)
Veamos ahora la clase Main:
Control
Class Main
java.lang.Object
Control.Main
public class Main
extends java.lang.Object
Atributo
(package
private)
static Mundo
mundo
Constructor
Main()
Mtodo
static void
main(java.lang.String[] args)
Inicializa el entorno en el que trabajamos, tamao del mapa, a
la vez que las variables de gestin del combustible. Inicializa el
atributo mundo que es la interfaz con la que trabajamos para
depuraciones.
- 37 -
Proyecto SSII
GUI: Interfaz Grfica de Usuario
Este paquete recordamos que se explica a modo referencial en el apartado
4 de Interfaz ya que la aplicacin final no contiene este paquete ya que la interfaz
de usuario que se usa est desarrollada en Matlab. Debido al desarrollo en
paralelo con el otro grupo se tuvo que manterner esta interfaz inicial y sus
posteriores versiones mejoradas para poder depurar y controlar el desarrollo
continuo del algoritmo.
MODEL
Clases
ClosedNode
Espacio
EspacioNode
ExpandedNode
Node
OpenedNode
Clase ClosedNode
java.lang.Object
Model.Node
Model.ClosedNode
public class ClosedNode
extends Node
Constructor
ClosedNode(int fila, int columna, int altura, java.lang.String tipo, int padreFila,
int padreColumna,int padreAltura)
Mtodos
int
getPadreAltura()
- 38 -
Proyecto SSII
int
getPadreColumna()
int
getPadreFila()
Clase Espacio
java.lang.Object
Model.Espacio
public class Espacio
extends java.lang.Object
Constructor
Espacio(int maximoF,int maximoC,int maximoA)
Mtodos
void
borraCamino()
int
- 39 -
Proyecto SSII
java.util.ArrayList getCubo()
int
getMaxA()
int
getMaxC()
int
getMaxF()
int
getObjetivo()
int
getOrigen()
void
setCubo(java.util.ArrayList cubo)
void
setMaxA(int maxA)
void
setMaxC(int maxC)
void
setMaxF(int maxF)
void
setObjetivo(int objetivo)
void
setOrigen(int origen)
Clase EspacioNode
java.lang.Object
Model.EspacioNode
public class EspacioNode
extends java.lang.Object
Constructor
EspacioNode()
EspacioNode(int fila,int columna,int altura,float peso)
Mtodos
int
getAltura()
- 40 -
Proyecto SSII
int
getColumna()
int
getFila()
float getPeso()
void setAltura(int altura)
void setColumna(int columna)
void setFila(int fila)
void setPeso(float peso)
Clase ExpandedNode
java.lang.Object
Model.Node
Model.ExpandedNode
public class ExpandedNode
extends Node
Constructor
ExpandedNode(int fila,
ExpandedNode(int fil,
float gheur,
int columna,
int colum,
int altura,
Mtodos
float getF()
float getG()
float getH()
void setF(int nuevoF)
void setG(int nuevoG)
- 41 -
int altura,
java.lang.String tipo)
java.lang.String tip,
float hheur,
float fheur)
Proyecto SSII
void setH(int nuevoH)
Clase Node
java.lang.Object
Model.Node
Direct Known Subclasses:
ClosedNode, ExpandedNode, OpenedNode
public class Node
extends java.lang.Object
Constructor
Node()
Node(int fila,int columna,int altura, java.lang.String tipo)
Mtodos
int
getAltura()
int
getColumna()
int
getFila()
java.lang.String getTipo()
void
setAltura(int altura)
void
setColumna(int columna)
void
setFila(int fila)
void
setTipo(java.lang.String tipo)
Clase OpenedNode
java.lang.Object
Model.Node
Model.OpenedNode
- 42 -
Proyecto SSII
public class OpenedNode
extends Node
Constructor
OpenedNode(int fila, int columna, int altura, java.lang.String tipo,
int padreFila, int padreColumna, int padreAltura, float h, float g,
float f)
Mtodos
float getF()
float getG()
float getH()
int
getPadreAltura()
int
getPadreColumna()
int
getPadreFila()
void setF(float f)
void setG(float g)
void setH(float h)
void setPadreAltura(int padreAltura)
void setPadreColumna(int padreColumna)
void setPadreFila(int padreFila)
- 43 -
Proyecto SSII
- 44 -
Proyecto SSII
Paquete Control
Throwable
ControlError
Operations
ControlError
Main
Attributes
mundo
Operations
Main
main
Paquete Model
- 45 -
Proyecto SSII
Paquete Gui
- 46 -
Proyecto SSII
Elegir terreno
Aadir objetivo
Usuario
Aadir destino
Insertar radares
Aadir obstculos
- 47 -
Proyecto SSII
Ficheros de Matlab:
InicializaTerreno.m
PintaCamino.m
Main.m
Fichero de ejecucin
de la interfaz grfica:
carga.m
Interfaz
:Espacio
new Espacio()
:EspacioNode
:Algorithm
:ExpandedNode
expandArray()
runAlgorithm()
:ClosedNode
runAlgorithm()
:OpenedNode
- 48 -
Cubo [ ]
runAlgorithm()
return optimalPath
Proyecto SSII
OyenteCombustibleM
OyenteCombustibleT
OyenteInsertaMontania
OyenteInsertaObjetivo
OyenteInsertaObstaculos1
OyenteInsertaObstaculos2
- 49 -
Proyecto SSII
OyenteInsertaObstaculos3
OyenteInsertaObstaculos4
OyenteInsertaOrigen
OyenteMundo
OyenteRun
PanelMundo
Clase Mundo
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
Gui.Mundo
- 50 -
Proyecto SSII
Clases inherentes de la clase java.awt.Component
java.awt.Component.AccessibleAWTComponent,
java.awt.Component.BltBufferStrategy,
java.awt.Component.FlipBufferStrategy
Atributos
(package private)
javax.swing.JMenu
algoritmo
(package private)
javax.swing.JMenuBar
barraMenu
(package private)
javax.swing.JButton
bInicio
(package private)
java.awt.BorderLayout
borderLayout1
(package private)
javax.swing.JButton
bPaso
(package private)
javax.swing.JMenu
Combustible
(package private)
combustibleM
javax.swing.JMenuItem
(package private)
combustibleT
javax.swing.JMenuItem
(package private) float
combustibleTotal
(package private)
javax.swing.JPanel
contentPane
(package private)
Espacio
entorno
gastoCombustibleMedio
(package private)
insertaMontania
javax.swing.JMenuItem
(package private)
insertaObjetivo
javax.swing.JMenuItem
(package private)
insertaObstaculos1
javax.swing.JMenuItem
(package private)
insertaObstaculos2
javax.swing.JMenuItem
(package private)
insertaObstaculos3
- 51 -
Proyecto SSII
javax.swing.JMenuItem
(package private)
insertaObstaculos4
javax.swing.JMenuItem
(package private)
insertaOrigen
javax.swing.JMenuItem
(package private)
javax.swing.JPanel
jPanel2
(package private)
javax.swing.JMenu
menuInsertar
(package private)
javax.swing.JMenu
menuObstaculos
(package private)
boolean
noTocar
(package private)
PanelMundo
panelMundo
peso
(package private)
run
javax.swing.JMenuItem
private static long
serialVersionUID
Esta interfaz es a modo de pruebas depuraciones del
algoritmo, la interfaz final est implementada en
Matlab
- 52 -
Proyecto SSII
Atributos inhererentes de la interfaz javax.swing.WindowConstants
DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE
Atributos inhererentes de la interfaz java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS,
WIDTH
Constructor
Mundo(Espacio entorno, float combustibleTotal, float gastoCombustibleMedio)
Mtodos
(package private) bInicio_actionPerformed(java.awt.event.ActionEvent e)
void
(package private) bPaso_actionPerformed(java.awt.event.ActionEvent e)
void
boolean
getNoTocar()
float
getPeso()
private void
jbInit()
protected void
processWindowEvent(java.awt.event.WindowEvent e)
void
setNoTocar(boolean tocar)
Detalles de atributos
serialVersionUID
private static final long serialVersionUID
Esta interfaz es a modo de pruebas depuraciones del algoritmo, la interfaz final
est implementada en Matlab
contentPane
javax.swing.JPanel contentPane
borderLayout1
java.awt.BorderLayout borderLayout1
panelMundo
PanelMundo panelMundo
- 53 -
Proyecto SSII
jPanel2
javax.swing.JPanel jPanel2
bPaso
javax.swing.JButton bPaso
bInicio
javax.swing.JButton bInicio
entorno
Espacio entorno
barraMenu
javax.swing.JMenuBar barraMenu
menuInsertar
javax.swing.JMenu menuInsertar
menuObstaculos
javax.swing.JMenu menuObstaculos
Combustible
javax.swing.JMenu Combustible
insertaObjetivo
javax.swing.JMenuItem insertaObjetivo
insertaOrigen
javax.swing.JMenuItem insertaOrigen
insertaObstaculos1
javax.swing.JMenuItem insertaObstaculos1
insertaObstaculos2
javax.swing.JMenuItem insertaObstaculos2
insertaObstaculos3
javax.swing.JMenuItem insertaObstaculos3
insertaObstaculos4
javax.swing.JMenuItem insertaObstaculos4
insertaMontania
javax.swing.JMenuItem insertaMontania
combustibleT
javax.swing.JMenuItem combustibleT
combustibleM
javax.swing.JMenuItem combustibleM
- 54 -
Proyecto SSII
algoritmo
javax.swing.JMenu algoritmo
run
javax.swing.JMenuItem run
peso
float peso
noTocar
boolean noTocar
combustibleTotal
float combustibleTotal
gastoCombustibleMedio
float gastoCombustibleMedio
Detalles del Constructor
Mundo
public Mundo(Espacio entorno,
float combustibleTotal,
float gastoCombustibleMedio)
Detalles de los Mtodos
jbInit
private void jbInit()
throws java.lang.Exception
Throws:
java.lang.Exception
processWindowEvent
protected void processWindowEvent(java.awt.event.WindowEvent e)
bPaso_actionPerformed
void bPaso_actionPerformed(java.awt.event.ActionEvent e)
bInicio_actionPerformed
void bInicio_actionPerformed(java.awt.event.ActionEvent e)
setPeso
public void setPeso(float tipoEntrada)
getPeso
public float getPeso()
setNoTocar
public void setNoTocar(boolean tocar)
- 55 -
Proyecto SSII
getNoTocar
public boolean getNoTocar()
Clase PanelMundo
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
Gui.PanelMundo
Clases
Clases inherentes a la clase javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
Atributos
private entorno
Espacio
private serialVersionUID
static long
- 56 -
Proyecto SSII
TOP_ALIGNMENT
Constructor
PanelMundo(Espacio entorno)
Mtodos
Espacio getEntorno()
void paintComponent(java.awt.Graphics g)
void setEntorno(Espacio entorno)
Class OyenteInsertaOrigen
java.lang.Object
Gui.OyenteInsertaOrigen
Mtodo
void actionPerformed(java.awt.event.ActionEvent ev)
- 57 -
Proyecto SSII
Class OyenteInsertaObjetivo
java.lang.Object
Gui.OyenteInsertaObjetivo
Mtodo
void actionPerformed(java.awt.event.ActionEvent ev)
Class OyenteInsertaObstaculos1
java.lang.Object
Gui.OyenteInsertaObstaculos1
All Implemented Interfaces:
java.awt.event.ActionListener, java.util.EventListener
class OyenteInsertaObstaculos1
extends java.lang.Object
implements java.awt.event.ActionListener
- 58 -
Proyecto SSII
Atributos
private mundo
Mundo
Constructor
OyenteInsertaObstaculos1(Mundo mundoMarco)
Mtodos
void actionPerformed(java.awt.event.ActionEvent ev)
- 59 -
Proyecto SSII
O en otra resolucin:
- 60 -
Proyecto SSII
Origen
Destino
- Infranqueable: aade un
nodo donde le indiquemos
con el ratn el cual no pueda
ser atravesado el avin.
Corresponde a un nivel de
peligrosidad o peso de
[0.5,0.75]
- Nivel alto: corresponde a un
nivel de peligrosidad o peso
de [0.5, 0.75)
- Nivel medio: corresponde a
un nivel de peligrosidad o
peso de [0.25, 0.5)
- Nivel bajo: corresponde a un
nivel de peligrosidad o peso
de [0,0.25)
- Montaa: en 3D
correspondera a una altura
determinada rellena de nodos
infranqueables.
Figura 23 Obstculos
- 61 -
Proyecto SSII
- 62 -
Proyecto SSII
2. Con obstculos de distintos niveles de dificultad:
Proyecto SSII
3. Si construimos una barrera infranqueable:
- 64 -
Proyecto SSII
4. Si no diera el combustible:
Figura 32 Camino
- 65 -
Proyecto SSII
Destacar que los ejemplos anteriores simulan una interfaz 2D de tamao
5. Ejemplo de camino infranqueable en 3D:
Figura 34 Camino en 3D
- 66 -
Proyecto SSII
A mediados del proyecto, la interfaz adquiri una mayor relevancia y se
destinaron mayores recursos a su implementacin en tres dimensiones en
Matlab, con relieves y obstculos, que se pasaran posteriormente al algoritmo, el
cual decidira un camino a seguir y se representara en una vista amigable e
intuitiva.
- 67 -
Proyecto SSII
2. Un segundo paso consiste en elegir los obstculos:
Origen
Obstculo
Mvil en
camino del
objetivo.
Figura 37 Recorrido
Llegada
- 68 -
Proyecto SSII
5.3.1 Estructura
La estructura de la interfaz grfica de usuario puede englobarse en tres
sectores:
Carpeta Images: conjunto de imgenes usadas por la aplicacin para la
simulacin de distintos terrenos (planos, altos, bajos, montaosos) por
los que puede ir el avin. Todas son formato .jpeg.
Carpeta Classes: carpeta donde se alberga todos aquellos archivos
.java y .class que forman la aplicacin desarrollada en java y que sern
utilizados por Matlab para ejecutar la aplicacin.
Archivos Matlab: conjunto de archivos .m donde se implementa la
interfaz grfica de usuario. Recordar que la aplicacin se lanza desde
matlab, y es sta quien se encarga de llamar al algoritmo desarrollado
en java.
A continuacin, explicaremos las funcionalidades de los archivos que componen
la interfaz:
Proyecto SSII
- 70 -
Proyecto SSII
2D
3D
- 71 -
Proyecto SSII
Map es el men para elegir los puntos clave: origen (Source), destino (Target) y
obstculos (Obstacle), que puede ser bien un radar o un nodo infranqueable
(Impassable):
- 72 -
Proyecto SSII
Run: para ejecutar la simulacin una vez configurado el terreno. Podemos
ejecutarla bien en modo normal o con waitpoints (puntos obligatorios por donde
tiene que pasar el avin).
- 73 -
Proyecto SSII
5.4 Complicaciones
Las principales complicaciones a la hora de crear una interfaz final
vlida para el algoritmo o cerebro de la aplicacin han sido el modo de
desarrollar en paralelo ambas partes, con especial cuidado para hacer
posible una posterior integracin, con numerosas reuniones, siguiendo
diversas pautas y estndares, y rehaciendo trabajo a causa de
restricciones impuestas tanto por parte de la interfaz como por parte del
algoritmo.
- 74 -
Proyecto SSII
6 DESARROLLO SOFTWARE
Para la aplicacin del proyecto, hemos llevado un enfoque sistemtico,
disciplinado y cuantificable al desarrollo para el funcionamiento del software.
Para tal efecto se han utilizado tcnicas de Ingeniera del Software para llevar a la
prctica el conocimiento cientfico en el diseo y construccin de programas de
computadora y asociando la documentacin requerida para dicho fin.
Informacin a procesar.
Funcin y rendimiento deseados.
Comportamiento del sistema
Interfaces establecidas
Restricciones del diseo
Proyecto SSII
Correccin de errores
Adaptaciones requeridas por la evolucin del entorno
software
Cambios en los requisitos
Modelo de proceso:
Se eligi el modelo de proceso basndonos en las siguientes caractersticas:
o
o
o
o
o
o
o
o
Entendibilidad
Visibilidad
Soportabilidad
Aceptabilidad
Fiabilidad
Robustez
Mantenibilidad
Rapidez
- 76 -
Proyecto SSII
En nuestro caso se trata de las reuniones realizadas con el director de proyecto
Gonzalo Pajares.
Planificacin
Anlisis de riesgos
Ingeniera
Construccin y adaptacin.
Evaluacin por el cliente.
- 77 -
Proyecto SSII
6.1 INTEGRACIN
Durante el desarrollo del proyecto hemos usado un modelo-vistacontrolador (MVC) separando en capas el modelo de la vista y de la lgica de
negocio, haciendo lo mximo posible modulable cada una de dichas partes.
Gracias a este proceso de desarrollo software, se ha realizado de una manera
ms sencilla y en menos tiempo la integracin de los mdulos de la interfaz
grfica con el ncleo de la aplicacin, lo cual ha sido una de las partes cruciales
del desarrollo del proyecto.
Para poder realizar la unin con los menos recursos posibles de personas
y en un periodo de tiempo razonable, se decidi crear dos clase java cuyos
objetos optimizaran los recursos que nos proporciona la plataforma matlab.
Exponemos estas clases a continuacin:
EspacioNode: Esta clase identifica los nodos que configuran el espacio de
simulacin siendo accesible a cada uno de ellos las tres coordenadas del espacio
en el que esta situado, y el peso (o riesgo) que tiene cada uno para la simulacin.
Espacio: Esta clase representa el espacio 3D de simulacin. En ella se
configuran las dimensiones del mapa del terreno, el origen y el destino que ha de
recorrer el UAV, y un atributo cubo, el cual guarda todas las posiciones posibles
de nodos EspacioNode, que contiene la clase Espacio.
El motivo por el cual se ha implementado de esta forma es para sacar el
mximo rendimiento a la potencia de matlab, respecto al clculo con matrices.
Exponemos a continuacin los principales ficheros *.m en los que se han
creado objetos java de las clases anteriormente descritas:
PintaCamino: Este fichero es fundamental ya que es donde se realiza la
importacin de las clases java anteriores. Para este cometido, hay que aadir
manualmente mediante la intruccin javaaddpath (dir) incluyendo la direccin
completa del directorio donde se encuentran las clases EspacioNode y Espacio.
Para crear objetos de estas clases, utilizaremos la instruccin javaObject
(paquete_clase, parmetros de entrada) donde indicamos el pequete donde se
encuentra la clase a la que pertenece el objeto que vamos a crear, seguido de los
parmetros de entrada. Tambin hemos utilizado libreras java que posee ya
Matlab como las que hemos accedido mediante la instruccin import java.util.*
para la creacin de ArrayList necesarias para la implementacin.
IncializaTerreno: En este fichero se minimiza el espacio de accin del UAV para
optimizar y mejorar el coste espacial y temporal de la aplicacin. En l tambin se
especifican todas las variables necesarias en la simulacin.
- 78 -
Proyecto SSII
7 Resultados
7.1 Testing y Capturas Finales
Una vez seleccionado el terreno vamos aadiendo el origen y destino.
Figura 46 Origen
ORIGEN
- 79 -
Proyecto SSII
OBJETIVO
Figura 47 Objetivo
Camino resultante:
Figura 48 Camino
- 80 -
Proyecto SSII
FASE 1:
-
FASE 2:
-
FASE 3:
-
FASE 4:
-
- 81 -
Proyecto SSII
8 Trabajo Futuro
La complejidad de los escenarios y de las soluciones obtenidas deber ir
aumentando hasta la finalizacin del programa.
Consideraciones generales:
-
- 82 -
Proyecto SSII
- 83 -
Proyecto SSII
El estudio sistemtico de la toma de decisiones proporciona el marco para
escoger cursos de accin en situaciones complejas, inciertas o dominadas por
conflictos. La eleccin entre acciones posibles y la prediccin de resultados
esperados resultan del anlisis lgico que se haga de la situacin de decisin.
Las continuas decisiones que el UAV debe tomar para conseguir el camino
ptimo y ms seguro hasta el objetivo lleva consigo un riesgo lgico debido a
la concepcin militar del proyecto. Este riesgo implica cierto grado de
incertidumbre y la habilidad para controlar plenamente los resultados o
consecuencias de dichas acciones. Sin embrago, en algunos casos la
eliminacin de cierto riesgo podra incrementar riesgos de otra ndole. El
manejo efectivo del riesgo requiere la evaluacin y el anlisis del impacto
subsiguiente del proceso de decisin. Este proceso permite al UAV evaluar las
estrategias alternativas antes de tomar cualquier decisin.
El proceso de decisin se describe a continuacin:
1. El problema esta definido y todas las alternativas confiables han sido
consideradas. Los resultados posibles para cada alternativa son evaluados.
2. Los resultados son discutidos de acuerdo al riesgo que se toma y las
restricciones de vuelo.
3. Varios valores inciertos son cuantificados en trminos de probabilidad.
4. La calidad de la estrategia ptima depende de la calidad con que se juzgue. El
UAV deber examinar e identificar la sensitividad de la estrategia ptima con
respecto a los factores cruciales.
Ahora el algoritmo escoger un nodo u otro dependiendo de la amenaza
que exista en un determinado punto sino de la probabilidad que existe de
pasar por ese punto y el UAV ser derribado. La heurstica se calcular
mediante ecuaciones de probabilidad y teniendo en cuenta las variables
cambiantes del sistema como el combustible, tiempo de vuelo o contramedidas
que tenga el avin en ese momento.
- 84 -
Proyecto SSII
Vista satlite.
UAV:
-
- 85 -
Proyecto SSII
9 AGRADECIMIENTOS
- 86 -
Proyecto SSII
10 Bibliografa
Para la documentacin sobre este proyecto nos hemos basado
principalmente en libros de Inteligencia Artificial, fuentes de Internet y tutoriales.
Sobre Eads-Casa.
Para la documentacin se ha hecho referencia en la siguiente web oficial:
http://www.eads.com
Sobre eclipse:
http://www.eclipse.org/
http://www.emagister.com/ (tutorial de eclipse)
Sobre Matlab:
http://www.mathworks.com
Sobre A*:
http://club2.telepolis.com/ohcop/aasteris.html
[1] Gonzalo Pajares y Matilde Santos; Inteligencia Artificial e ingeniera del
Conocimiento; RA-MA, 2005 (Primera Edicin en espaol) ISBN: 847897-676-0;
[2] Russell, S. y Norvig, P. ; Artificial Intelligence: A Modern Approach ;
Prentice Hall, New Jersey, Edicin del 2004 en espaol;
- 87 -
Proyecto SSII
- 88 -