dpm76 / eaglebone

[Still unstable] Open-source modular flight controller for quadcopters based on BeagleBone
ISC License
1 stars 2 forks source link

Cerrar servidor cuando se recibe el comando "fin" #1

Open dpm76 opened 8 years ago

dpm76 commented 8 years ago

Cuando se recibe el comando para apagar el sistema: { "key": "close", "data": null} se cierra la conexión actual, pero el servidor permanece activo. El servidor debería cerrarse para permitir que la aplicación finalice.

(probando los "issues" de Github)

hisie commented 8 years ago

Esta incidencia viene de como funcionan los hilos en python. Un hilo, una vez lanzado puede ser "absorbido" (join), o terminado. La misma instancia de hilo terminado no puede volver a lanzarse, es necesario inicializar uno nuevo. https://github.com/hisie/eaglebone/blob/end_procces/drone/flight/stabilization/pid.py#L164. Falta hacer eso mismo en la parte "Remote control".

dpm76 commented 8 years ago

El tema del Thread que comentas, está más bien relacionado con el asunto de que cuando se para el dron, no se puede volver a iniciar. Es decir, una vez que se quita el check del control "on" del control remoto, no se puede volver a hacer check, ya que falla por lo que comentas. Este problema se me ha pasado añadirlo a la lista de "issues", aunque lo acabo de crear: https://github.com/dpm76/eaglebone/issues/11

Aunque está relacionado, el problema aquí es otro. Cuando cierro el control remoto, se envía un comando al dron: {"key":"close", "data":null} Esto debería terminar la aplicación del dron, pero sólo termina el método "handle" del servidor de la clase "Dispatcher" que hereda de "StreamRequestHandler". (drone/remote_control/dispatching.py:línea 55)

Pensaba que se ejecutaría el método "finish" de Dispatcher que pararía el dron, en caso de estar todavía funcionando. Ahora sólo se ejecuta si se pulsa CTRL+C en la consola de la BeagleBone (o del emulador). Pero en el futuro no debería hacer ninguna consola abierta en la BeagleBone y cuando termine el ejecutable del dron, se podría ejecutar un shutdown para apagarlo.

Esto es importante porque también es una medida de seguridad. En caso de que se pierda la conexión por algún motivo, es mejor que el dron se pare y caiga, que siga volando y se pierda. En realidad, habría que implementar algún protocolo de recuperación de conexión, por si la pérdida es sólo momentánea. Pero de momento, este sería el primer paso.

Saludos, David

El 12.04.2016 a las 11:59, Diego Cebrián escribió:

Esta incidencia viene de como funcionan los hilos en python. Un hilo, una vez lanzado puede ser "absorbido" (join), o terminado. La misma instancia de hilo terminado no puede volver a lanzarse, es necesario inicializar uno nuevo. https://github.com/hisie/eaglebone/blob/end_procces/drone/flight/stabilization/pid.py#L164. Falta hacer eso mismo en la parte "Remote control".

— You are receiving this because you authored the thread. Reply to this email directly or view it on GitHub https://github.com/dpm76/eaglebone/issues/1#issuecomment-208827078

dpm76 commented 8 years ago

En la descripción me he equivocado :P
El mensaje correcto el key:"close" y no key:"is-started".