nd2.h

00001 
00002 /*****************************************************************************/
00003 /*                                                                           */
00004 /*  Fichero:     nd2.h                                                       */
00005 /*  Autor:       Javier Minguez                                              */
00006 /*  Creado:      28/05/2003                                                  */
00007 /*  Modificado:  21/06/2003                                                  */
00008 /*                                                                           */
00009 /*****************************************************************************/
00010 
00011 #ifndef nd2_h
00012 #define nd2_h
00013 
00014 #include "geometria.h"
00015 
00016 // ----------------------------------------------------------------------------
00017 // CONSTANTES.
00018 // ----------------------------------------------------------------------------
00019 
00020 // Número de sectores: múltiplo de 4.
00021 #define SECTORES 180
00022 
00023 #define VERDADERO 1
00024 #define FALSO 0
00025 #define NO_SIGNIFICATIVO -1
00026 
00027 // ----------------------------------------------------------------------------
00028 // TIPOS.
00029 // ----------------------------------------------------------------------------
00030 
00031 // Información acerca del robot.
00032 
00033 // Dimensiones del robot.
00034 //   Consideramos el robot definido por un rectángulo. Numeramos sus
00035 //   dimensiones, medidas a partir de su centro en las direcciones principales,
00036 //   siguiendo la misma convención que para los sectores:
00037 //     Dimension[0]: distancia desde el centro a la trasera del robot.
00038 //     Dimension[1]: distancia desde el centro a la izquierda del robot.
00039 //     Dimension[2]: distancia desde el centro al frontal del robot.
00040 //     Dimension[3]: distancia desde el centro a la derecha del robot.
00041 typedef float TDimensiones[4];
00042 
00043 typedef float TMatriz2x2[2][2];
00044 
00045 typedef struct {
00046 
00047   TDimensiones Dimensiones;
00048   float enlarge;
00049 
00050   short int geometriaRect; // Si es cuadrado o no
00051 
00052   float R; // radio del robot por si es circular
00053 
00054   short int holonomo;
00055 
00056   float E[SECTORES]; // Distancia desde el origen de SR2 al perímetro del robot.
00057   float ds[SECTORES];  // Distancia de seguridad: desde el perímetro del robot al perímetro de seguridad.
00058 
00059   float velocidad_lineal_maxima;
00060   float velocidad_angular_maxima;
00061 
00062   float aceleracion_lineal_maxima;
00063   float aceleracion_angular_maxima;
00064 
00065   float discontinuidad; // Espacio mínimo por el que cabe el robot.
00066 
00067   float T; // Período.
00068 
00069   TMatriz2x2 H; // Generador de movimientos: "Inercia" del robot.
00070   TMatriz2x2 G; // Generador de movimientos: "Fuerza" aplicada sobre el robot.
00071 
00072 } TInfoRobot;
00073 
00074 // Información acerca del objetivo.
00075 
00076 typedef struct {
00077   TCoordenadas c0;
00078   TCoordenadas c1;
00079   TCoordenadasPolares p1;
00080   int s; // Sector.
00081 } TObjetivo;
00082 
00083 // Información acerca de la región escogida.
00084 
00085 #define DIRECCION_OBJETIVO                0
00086 #define DIRECCION_DISCONTINUIDAD_INICIAL  1
00087 #define DIRECCION_DISCONTINUIDAD_FINAL    2
00088 
00089 typedef struct {
00090   int principio;
00091   int final;
00092 
00093   int principio_ascendente;
00094   int final_ascendente;
00095 
00096   int descartada;
00097 
00098   int direccion_tipo;
00099   int direccion_sector;
00100   float direccion_angulo;
00101 } TRegion;
00102 
00103 typedef struct {
00104   int longitud;
00105   TRegion vector[SECTORES];
00106 } TVRegiones;
00107 
00108 // Información interna del método de navegación.
00109 
00110 typedef struct {
00111 
00112   TObjetivo objetivo;
00113 
00114   TSR SR1;                  // Estado actual del robot: posición y orientación.
00115   TVelocities velocidades; // Estado actual del robot: velocidades lineal y angular.
00116 
00117   TCoordenadasPolares d[SECTORES]; // Distancia desde el centro del robot al obstáculo más próximo en cada sector (con ángulos).
00118   float dr[SECTORES]; // Distancia desde el perímetro del robot al obstáculo más próximo en cada sector.
00119 
00120   TVRegiones regiones; // Sólo como información de cara al exterior: Lista de todas las regiones encontradas en el proceso de selección.
00121   int region;          // Como almacenamos más de una región debemos indicar cuál es la escogida.
00122 
00123   int obstaculo_izquierda,obstaculo_derecha;
00124 
00125   float angulosin;    // Sólo como información de cara al exterior: Ángulo antes de tener en cuenta los obstáculos más próximos.
00126   float angulocon;    // Sólo como información de cara al exterior: Ángulo después de tener en cuenta los obstáculos más próximos.
00127   char situacion[20]; // Sólo como información de cara al exterior: Situación en la que se encuentra el robot.
00128   char cutting[20];   // Sólo como información de cara al exterior: Cutting aplicado al movimiento del robot.
00129 
00130   float angulo;    // Salida del algoritmo de navegación y entrada al generador de movimientos: dirección de movimiento deseada.
00131   float velocidad; // Salida del algoritmo de navegación y entrada al generador de movimientos: velocidad lineal deseada.
00132 
00133 } TInfoND;
00134 
00135 // ----------------------------------------------------------------------------
00136 // VARIABLES.
00137 // ----------------------------------------------------------------------------
00138 
00139 extern TInfoRobot robot;
00140 
00141 // ----------------------------------------------------------------------------
00142 // FUNCIONES.
00143 // ----------------------------------------------------------------------------
00144 
00145 extern float sector2angulo(int sector);
00146 
00147 extern int angulo2sector(float angulo);
00148 
00149 
00150 #endif 

Last updated 12 September 2005 21:38:45