2. MDP 2 puntos - alvvazort/AIDrone GitHub Wiki

Preconfiguración

Para que el comportamiento de este modelo sea el previsto, se deberá configurar previamente en el programa QGroundControl algunos parámetros para que podamos simular las baterías del dron. Para acceder a esta configuración, deberemos primero iniciar gazebo con uno o más drones, ya que sin esto, no aparecerán los parámetros que vamos a cambiar. Una vez hecho esto, iremos a opciones del vehículo:

Luego, se deberán establecer los valores tal como aparecen en la imagen:

Aunque hayamos determinado que el minímo de la batería sea 0%, QGroundControl le suma a ese mínimo un 16%, por lo que 16% lo tomaremos como 0 en nuestros casos.

Por último deberemos establecer los valores mínimos de seguridad de la batería:

Ejecución

Para la ejecución, deberemos tener una terminal apuntando a la carpeta Firmware y deberémos ejecutar el siguiente código: ./Tools/simulation/gazebo/sitl_multiple_run.sh -n 1 -w baylands Esto abrirá Gazebo con un dron en un mapa de un parque, además, si abrimos QGroundControl podremos ver que estamos en las coordenadas de ese parque. Accederemos a la carpeta wildfire de nuestro repositorio y ejecutaremos wildfire.py.

wildfire

Como podremos observar, el dron viajará desde PC (punto de carga) hasta A (punto a vigilar) y se pondrá a vigilar la zona. Para que vigile de forma más efectiva hemos programado que orbite la zona para una mayor amplitud de visión. Una vez que la batería llega a niveles medio-bajos, el dron aplica la política de su modelo y regresa a PC, en el que, realizará la accion de cargar la batería. Una vez cargada empezará de nuevo.

Funcionamiento

Para la resolución de este problema se ha utilizado un modelo de planificación bajo incertidumbre. Hemos definido que hay 2 puntos, uno PC (punto de carga) y otro A (punto a vigilar) y un dron, que será recompensado si vigila el punto A, pero deberá intentar evitar que se le acabe la batería. Para plantear un problema de planificación bajo incertidumbre necesitamos definir:

  • Unos estados, que determinan en que situación está el dron.
  • Unas acciones, que cambian al dron de estado, con cierta incertidumbre (una acción no tiene por qué llevarte siempre al mismo estado)
  • Una matriz de transacción por cada acción. Permite conocer que posibilidades tiene de pasar a otros estados al ejecutar una acción dependiendo de en que estado estemos inicialmente.
  • Una función de recompensa, que motive llegar a ciertos estados al dron.
  • Una función de coste, penaliza realizar una acción dependiendo del estado en el que se esté.

Estados

Los estados dependen del punto en el que se encuentre y el nivel de batería. El nivel de batería se ha discretizado para la simplificación del problema, de manera que el 1 sería 0% y 5 el 100%. De esta manera, podríamos decir que el estado A5 sería que el dron está en el punto A con el máximo nivel de batería. Además, si el nivel de batería llega a 1, en vez de pasar al estado A1 o PC1 (dependiendo del punto en el que se encuentre), pasará al estado M, ya que habríamos perdido el dron. Por último se ha añadido el estado F, que sería el estado fin, es al estado al que pasa el dron después de estar en M, ya que si el dron permaneciese una vez que se le acabe la batería en M, sería penalizado permanentemente y esto afectaría a los algoritmos de obtención de políticas.

Estos serían los estados: ['F','M','A2','A3','A4','A5','PC2', 'PC3', 'PC4', 'PC5']

Acciones

Se ha simplificado el número de acciones a 2, las cuales supondrán actuar de una forma u otra dependiendo del estado en el que se encuentren.

  • Viajar: El dron viaja de un punto a otro, es decir, si está situado en PC, se moverá a A y viceversa.
  • Actuar: El dron actuará en consecuencia del punto en el que se encuentre, si el dron está en A, vigilará la zona. Si el dron está en PC, aterrizará y recargará.

Matriz de transición

Las filas serían el estado en el que se encuentra actualmente y las columnas corresponderían al estado próximo después de ejecutar la acción.

  • Matriz transición de actuar:

transición_actua

En esta matriz, al actuar, siempre se permanece en el mismo estado pero podemos pasar a un estado en el que el nivel de batería sea el mismo o menor al actual.

  • Matriz transición de viajar:

transición_viaja

Esta matriz funciona de la misma manera que la anterior, tiene en cuenta que en el siguiente estado puede haber bajado la batería y además alternará el punto en el que se encontrará.

Ambas acciones, si se aplican al estado M, harán que el dron pase al estado F (fin).

Función de recompensa

En la función de recompensa, se determinan puntos por llegar a estar en un estado. Hemos decidido no recompensar llegar a un estado, si no más bien, realizar la acción de vigilar, por ello, en la función de recompensa simplemente hemos penalizado el llegar al estado M.

['F','M','A2','A3','A4','A5','PC2', 'PC3', 'PC4', 'PC5']

[0, -5000, 0, 0, 0, 0, 0, 0, 0, 0 ]

Función de costes

La función de coste determina la penalización de realizar una acción en un estado. Es aquí donde tenemos en cuenta poniendo un coste negativo, la recompensa por vigilar en un punto.

  • Coste de actuar:

['F','M','A2','A3','A4','A5','PC2','PC3','PC4','PC5']

[0, 0, -400,-400,-400,-400, 0, 0, 0, 1000 ]

Se ha añadido un coste alto por cargar la batería cuando ya está cargada (coste en PC5)

  • Coste de viajar:

['F','M','A2','A3','A4','A5','PC2','PC3','PC4','PC5']

[ ∞, ∞, 20, 200, 200, 200, 20, 20, 20, 20 ]

Aqui se ha añadido un coste por viajar y en los casos de no tener batería se ha puesto coste infinito para imposibilitar la acción en esos estados.