AlvaroB-PFC-Drone02

From robotica.unileon.es
Revision as of 14:55, 10 July 2011 by Anonymous (talk)

Jump to: navigation, search
  • Project Name: Seguimiento de Color para el AR-Drone
  • Authors: Álvaro Botas Muñoz
  • Email Addres: infabm01@estudiantes.unileon.es
  • Academic Year: 2010-2011
  • Degree: PFC
  • Tags:
  • Technology: c, gtk, Api Ar.drone:sdk 1.5
  • State: Developing
  • Source License:
  • Document License:


Parte 1


Configurando la api de ArDrone (sdk 1.5) con el mando de la ps3 en Linux

Obtención del sdk

     tar zxvf archivo.tar.gz

Configuración de los ejemplos para Linux

sdk_demo

Se trata del ejemplo más sencillo, no dispone de interfaz gráfico pero contiene lo suficiente para controlar el ArDrone con un joystick y la creación de tuberías para la recepción de video asi como diferentes hilos Debemos modificar dos archivos para el correcto funcionamiento de nuestro mando de la ps3:

a) En primer lugar :

En el archivo ardrone_testing_tool.c (/’tu directorio’/ARDrone_SDK_1_5_V ersion_20101004/Examples/Linux/sdk_demo/Sources/ardrone_t esting_tool.c) , añadiéndole esta línea para añadir el mando:

     ardrone_tool_input_add( &ps3pad );

Téngase en cuenta que este archivo es el que contiene el main de la aplicación, aquella que pone en funcionamiento todo.

b) En segundo lugar :

A continuación modificaremos el archivo gamepad.h (/’tu directorio’/ARDrone_SDK_1_5_V ersion_20101004/Examples/Linux/sdk_demo/Sources/UI), donde le asignaremos valores a los botones del mando:

    #define GAMEPAD_PLAYSTATION3_ID 0x054C0268
        typedef enum
        {
           PS3BTN_SELECT=0,
           PS3BTN_L3=1,
           PS3BTN_R3=2,
           PS3BTN_START=3,
           PS3BTN_UP ARROW=4,
           PS3BTN_RIGHTARROW=5,
           PS3BTN_DOWNARROW=6,
           PS3BTN_LEFTARROW=7,
           PS3BTN_L2=8,
           PS3BTN_R2=9,
           PS3BTN_L1=10,
           PS3BTN_R1=11,
           PS3BTN_TRIANGLE=12,
           PS3BTN_CIRCLE=13,
           PS3BTN_CROSS=14,
           PS3BTN_SQUARE=15,
           PS3BTN_PS3=16,
        }PS3P AD_BUTTONS;

Navigation

Se trata de un ejemplo mas completo, en el que se puede observar un interfaz gráfico, con la inserción de las imágenes del video, entre muchas otras opciones adicionales.

Cómo compilar y ejecutar estos ejemplos

  • En primer lugar vamos a obtener algunas de las librerías necesarias para la compilación y posterios ejecución.
    $sudo apt-get install libsdl-dev libgtk2.0-dev libiw-dev
  • Debemos crear la biblioteca ArDroneLib usando el makefile dado.
    $cd SDK /ARDroneLib/Soft/Build
    $make
  • Compilar el ejemplo sdk_demo
    $cd SDK /Examples/Linux/sdk_demo/Build
    $make
  • Compilar el ejemplo Navigation
    $cd SDK /Examples/Linux/Navigation/Build
    $make 

Ejecutar el ejemplo

Tras haber realizado estos pasos, deberíamos de tener 2 ejecutables en : /’tu directorio’/ARDrone_SDK_1_5_V ersion_20101004/Examples/Linux/Build/Release /. Conecta tu mando de la PS3 y ahora serás capaz de hacer volar tu ArDrone.

  • Para el ejemplo sdk_demo:
    ./linux_sdk_demo
  • Para el ejemplo Navigation:
    ./ardrone_navigation

Parte 2

Creación de nuestra propia aplicación: Un tele-operador para el control del ArDrone

Se trata de crear un pequeño interfaz gráfico con las opciones básicas para el manejo del ArDrone, con la visualización del vídeo de la cámara del ArDrone. Está realizada en gtk y como base el ejemplo sdk_demo sobre el cual eliminaremos todo lo que necesitamos y ampliaremos las funciones necesarias.

Primeros pasos con GTK

Gtk es un conjunto de librerías cuya función es la de pintar ventanas Para su utilización debemos tener en cuenta que debemos incluir en nuestro proyecto las siguientes librerías:

     #include <gtk/gtk.h>

Aquí tenemos un pequeño ejemplo de una ventana muy básica:

    int main (int argc, char *argv[]){
       GtkWidget *window;
       gtk_init (&argc, &argv);
       window = create_window ();
       gtk_widget_show_all (window);
       gtk_main ();
       return 0;
    }

Podemos observar un pequeño tutorial aquí con algunas de las funciones básicas que nos ofrece gtk: http://www.linuxlots.com/~barreiro/spanish/gtk/tutorial/gtk_tut.es.html

Y la api: http://developer.gnome.org/gtk/2.24/

Se ha desarrollado con la version de GTK 2 ya que en el momento del comienzo del proyecto aun no había salido la version oficial de GTK 3.

Funciones de mi aplicación

Aquí se muestran las funciones que utilizo para la creación del entorno gráfico de la aplicación:

   void delete_event (GtkWidget *widget, GdkEvent *event, gpointer data) 
   void escribeCuadro (char* data) void cbdespegar (GtkWidget *widget, gpointer data) 
   void cbaterrizar (GtkWidget *widget, gpointer data)
   void cbTurnLeft (GtkWidget *widget, gpointer data) 
   void cbForward (GtkWidget *widget, gpointer data) 
   void cbTurnRight (GtkWidget *widget, gpointer data) 
   void cbLeft (GtkWidget *widget, gpointer data)
   void cbBackward (GtkWidget *widget, gpointer data) 
   void cbRight (GtkWidget *widget, gpointer data) 
   void cbUp (GtkWidget *widget, gpointer data) 
   void cbDown (GtkWidget *widget, gpointer data) 
   void cbcontrol(GtkWidget *widget, gpointer data) 
   void cbShowControl(GtkWidget *widget, gpointer data) 
   void cbSave (GtkWidget *widget, gpointer data)
   void cbSaveStop (GtkWidget *widget, gpointer data) 
   void cbDetails (GtkWidget *widget, gpointer data) 
   void cbReset (GtkWidget *widget, gpointer data) 
   void cbChangCam (GtkWidget *widget, gpointer data) 
   GtkWidget *new_windowControl()
   GtkWidget *new_window () 
   gboolean update_display(gpointer pData) 
   int crea_ventana() GtkWidget *new_zoneVideo() 
   GtkWidget *new_zoneStadistics(GtkWidget *data) 
   GtkWidget *new_zoneButton() 
   GtkWidget *new_TextZone() 
   void create_tags (GtkTextBuffer * buffer)

Comandos que se envían al ArDrone

Aquí se listan los comandos que enviamos al ardrone para la realización de las diferentes funciones o movimientos que deseamos que realice:

a) Despegar

   ardrone_tool_set_ui_pad_start(1);

b) Aterrizar:

  ardrone_tool_set_ui_pad_start(1);

c) Mover hacia adelante:

   ardrone_at_set_progress_cmd(1,0,-0.3,0,0);

d) Mover hacia atrás:

   ardrone_at_set_progress_cmd(1, 0, 0.3, 0, 0);

e) Mover hacia arriba:

   ardrone_at_set_progress_cmd(1, 0.3, 0, 0.5, 0);

f) Mover hacia abajo:

   ardrone_at_set_progress_cmd(1, 0.3, 0, 0.5, 0);

d) Mover hacia la derecha:

   ardrone_at_set_progress_cmd (1, 0.3, 0, 0,0);    

e) Mover hacia la izquierda:

   ardrone_at_set_progress_cmd (1, -0.3, 0, 0,0);

f) Girar hacia la derecha:

   ardrone_at_set_progress_cmd(1, 0.3, 0, 0,0);

g) Girar hacia la izquierda:

   ardrone_at_set_progress_cmd(1, 0, 0, 0, -0.3);

h) Enviar un reset:

   ardrone_tool_set_ui_pad_select(1);

i) Cambiar la camara que estamos viendo:

   ardrone_at_zap //Revisar

j) Señal de que el ardrone esta en una superficie horizontal para un vuelo estable:

   ardrone_at_set_flat_trim   

Creación de ficheros de log

En “directorio”/Version1.0/basico/File disponemos de 2 ficheros que se encargan de la gestion de guardar en un fichero de log (en “directorio”/Version1.0/Build/Debug) con el instante y el mensaje de la acción realizada. En el fichero save_file.h se declaran las funciones y en save_file.c se implementan. En la función InsertaDatos se usa la funcion fopen(ruta, “a”) siendo ruta el directorio donde lo guardamos y “a” el mensaje y se encarga de crear un fichero si este no existe o añadir mensajes si ya existia.

Uso de Subversion

Se trata de un sistema de control de versiones que viene a sustituir al antiguo cvs. Alguna de las operaciones realizadas para subir archivos y gestionarlos:

  • Creación de una nueva rama para nuestro proyecto:
   $ svn copy http://robotica.unileon.es/svn/Projects/PFC/ardrone \
   http://robotica.unileon.es/svn/Projects/PFC/ardrone/branches/Version1_albo_08062011 \
   -m "Creating a new branch Version1_albo_08062011."
  • Subida de nuestro proyecto
   $svn import /(YOUR PROJECT DIR)
   http://robotica.unileon.es/svn/Projects/PFC/ardrone/branches/Version1_albo_08062011 -m
   "Version1 import"
  • Descarga de nuestro proyecto
   $svn checkout
   http://robotica.unileon.es/svn/Projects/PFC/ardrone/branches/Version1_albo_08062011
  • Eliminación de un directorio de svn
   $svn delete http://(URL DIRECTORY) -m "DIRECTORY DELETED"

Creación del Makefile para la compilación de nuestro proyecto

Vamos a partir del Makefile que viene por defecto con el ejemplo en el sdk_demo pero modificandolo para nuestro proyecto. Debemos añadir los fuentes de nuestro proyecto de esta forma :

   GENERIC_BINARIES_COMMON_SOURCE_FILES+=	\ 
   Navdata/navdata.c \
   Ihm/Principal.c \
   Ihm/Principal_o_gtk.c \
   File/save_file.c

Debemos añadir las librerías que necesitemos, en este caso las de gtk de esta manera:

   GENERIC_LIBS=-lpc_ardrone -lgtk-x11-2.0 -lrt

Parte 3