Essai GPS Fusion

Dependencies:   BME280 BNO055 Eigen ds3231 mbed

objet.h

Committer:
RCMISbed
Date:
2018-10-22
Revision:
1:03547f392fb7
Parent:
0:07e03c88e90b

File content as of revision 1:03547f392fb7:


#include <string>

//1- Definition/ Constantes 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#define   wBUFFER        300                                                    // Processus principal/ Trame/ Profondeur MAX du buffer de donnees  (exprimé en caracteres)
#define   wDTRAME          6                                                    // Processus principal/ Trame/ Nombre de donnees MAX par trame


// Definition/ Constante/ Process General/ Nombre d'objet Event MAX
#define nbEVENTMAX        15

// Definition/ Constante/ Nombre de LED  intégrées MAX
#define nbLEDMAX          4                                                     // Carte/ nombre Max LED

// Definition/ Constante/ Nombre de Moteurs MAX
#define nbMOTORMAX        2 

// Definition/ Constante/ Nombre de SERVO MAX
#define nbSERVOMAX        2

//Definition/ Parametrage/ GPS/ Parcours/ Nombre maximal de WP
#define nbWPMAX         100                                                     // Parcours GPS/ Nombre de Way Point Maximum enregistrés

//Definition/ Constante/ Nombre d'objet PID MAX
#define nbPIDMAX          2        
                                             
//Definition/ Constante/ Nombre d'objet commande.axe
#define nbAXEMAX          2         

//Definition/ Constante/ ojet PAD/ nb axe MAX et nb SW MAX
#define padNBAXEMAX       2
#define padNBSWMAX        4
                                            
//Definition/ Constante/ Nombre Parametres MAX
#define nbPARAMAX        11         


// Definition/ Protocole/  Constantes/ Mode
#define mSTB              0                                                     // Mode/ STANDBY
#define mSTP              1                                                     // Mode/ STOP
#define mMAN              2                                                     // Mode/ MANUAL
#define mPA               4                                                     // Mode/ Pilote Automatique
#define mWP               8                                                     // Mode/ Enregistrement WP
#define mRAZ             64                                                     // Mode/ Remise à 0 des commandes   
#define mCHG            128                                                     // Mode/ recharge Accumulateurs


//2- Definition/ Type de donnees
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//2.1- Definition/ Type/ global/ data/ objet GLOBAL
typedef struct{
               bool fValid;                                                     // Validation module
               string designation;                                              // Identification produit
               string version;                                                  // Version produit (v.xx/yy , xx: annee, yy: semaine dans l'annee)
               bool   debug;                                                    // Activation du mode DEBUG
               int    nbLED;                                                    // Nombre LED integrées
               int    tBATT;                                                    // Batterie/ Structure Chimique 
               int    NbElement;                                                // Batterie/ Nombre Elements
               int    Dynmin;                                                   // Variables/ dynamique minimum
               int    DynMAX;                                                   // Variables/ dynamique MAXIMUM
               float  TSample;                                                  // Periode d'echantillonnage du processus (exprimée en secondes)
               int    TPWM;                                                     // periode PWM (exprimée en micro secondes)
               int    USBBaud;                                                  // UART sur USB BaudRate
               int    UART1Baud;                                                // UART 1 BaudRate
               int    UART2Baud;                                                // UART 2 BaudRate
               int    I2CBaud;                                                  // Frequence bus I2C
               int    CANBaud;                                                  // Frequence bus CAN
               struct{                                                          // Event
                     bool fValid;                                              // Event/ Validité
                     bool fPeriode;                                             // Event/ Periodicité
                     int wdt;                                                   // Event/ WatchDog
                     int wdtMAX;                                                // Event/ WatchDog MAX
                     }event[nbEVENTMAX];                                                  
              } GLOBAL_t;


//2.2- Definition/ Type/ objet TRAME 
typedef struct{
               bool fValid;                                                     // Validation module
               int  wdtTX;                                                      // WatchDog Emission 
               int  wdtRX;                                                      // WatchDog Reception
               int  pcar;                                                       // Pointeur de caracteres
               char sb;                                                         // Protocole communication/ Start Beacon: 
               char dlb;                                                        // Protocole communication/ Delimiter Beacon
               char eb;                                                         // Protocole communication/ End Beacon
               int  id;                                                         // Mot identificateur de trame 
               char rx[wBUFFER];                                                // tableau des caracteres recus
               char tx[wBUFFER];                                                // tableau des caracteres envoyés
               bool fSB, fEB;                                                   // status startB et endB  
               int  c[wDTRAME];                                                 // Data Consigne
               int  r[wDTRAME];                                                 // Data Reponse
               int nbdata;                                                      // Nombre de Data sur la Trame
              } TRAME_t;



//2.3- Definition/ Type/ objet COMMANDE
typedef struct{
               struct{
                      bool    fValid;                                           // Validation Module
                      float   in;                                               // Variable Entree
                      float   out;                                              // Variable Sortie
                      float   dzm;                                              // Valeur Dead Zone inferieure (0..1)
                      float   dzM;                                              // Valeur Dead Zone supérieure (0..1)
                      float   cti;                                              // Valeur Constante de temps Integrale (0..1)
                      float   ctf;                                              // Valeur Constante de temps Proportionnelle  (0..1)
                      float   ctg;                                              // Valeur Constante de Temps Filtre de sortie
                      float   cgg;                                              // Valeur Gain Filtre de sortie
                      float     l;                                              // Valeur calcul loi non lineaire
                      float i, i0;                                              // Valeur calcul integral
                      float     p;                                              // Valeur calcul proportionnelle  
                      float     c;                                              // Valeur calcul proportionnelle - integrale   
                      float x, dx;                                              // Valeur filtre passe bas 
                     }axe[nbAXEMAX]; 
              } COMMANDE_t;





//2.4- Definition/ Type/ objet MUX (multiplexeur)
typedef struct{
               bool  fValid;                                                    // Validation Module
               float in0x, in0y, in1x, in1y, in2x, in2y,                              // Variables d'état d'entree  du module: variables d'entree
                     outx, outy;                                                    // Variables d'état de sortie du module: variables de sortie
               unsigned char sel;                                               // Variables d'état d'entree  du module: selection de la variable d'entrée
               unsigned char Status;                                            //  Variables Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7: 
              }MUX_t; 


         
//2.5- Definition/ Type/ objet ENERGIE
typedef struct{ 
               bool fValid, fCHARGE, fVhigh, fVlow, fIhigh, fIlow, fFailed;
               unsigned char tBATT;                                             // Type de batterie (1: LEAD, 2: NIMH, 2: LION, 3: LIPO)   // Definition/ Parametres/ Type de batterie
               unsigned char NbElement;                                         // Nombre Element en Serie
               int seqPointer;                                                  // Sequenceur du processus de charge
               float tension, courant;                                          // Variables differentielles Energie, Tension, Courant Acquisition     
               float dE,dV,dI;                                                  // Variables differentielles Energie, Tension, Courant Filtrage
               float  E, E0, V, I;                                              // Variables Energie, Tension, Courant              
               float VMax, Vmin, IMax, Imin;                                    // Parametres internes   
               int wPWM, pPWM;                                                  // Largeur Impulsion, Periode PWM (chargeur)
               unsigned char     Status;                                        // Variables Status du module s0: fValid, s1: fCharge, s2:fVlow, s3:fVhigh, s4:fIlow, s5:fIhigh, s6: NA, s7: fFailed
              } ENERGY_t; 
       
       
//2.6- Definition/ Type/ objet GPS
typedef struct{
                int   wdtRX;                                                    // WatchDog reception
                bool   fValid;                                                  // Validité Module GPS
                int    baud;                                                    // BaudRate
                int    TSample;                                                 // Periode rafraichissement des trames
                double utc;                                                     // Temps universel
                float  vground;                                                  // Vitesse Sol
                float  heading;                                                  // Cap vrai
                int    fix;                                                     // Fix qualification : (0 = non valide, 1 = Fix GPS, 2 = Fix DGPS)
                int    nbsat;                                                   // Nombre de Sattelites
                float  dop;                                                     // Dilution horizontale
                double latitude, longitude, altitude;                           // Coordonnées NED/ Latitude, Longitude, Altitude
                double x, y, z;                                                 // Coordonnées ECEF/ x, y, z
                int    speedmin;
                unsigned char Status;                                           //Variables Status du module s0:fValid, s1:fLocked, s2:na, s3:na, s4:na, s5:na, s6:na, s7:fFailed
              } GPS_t; 
   
   
//2.7- Definition/ Type/ objet IMU
typedef struct{ 
               bool  fValid, fFailed;                                           // Validation module
               float roll, pitch, yaw;                                          // Variables attitude; Roulis, Tangage, Lacet
               float q0, q1, q2, q3;                                            // Variables attitude/ Quarternions
               float liax, liay, liaz;                                          // Variables acceleration lineaire x, y, z 
               float grvx, grvy, grvz;                                          // Variables gravité
               float gyrox, gyroy, gyroz;                                       // Variables gyroscopiques x, y, z
               float magx, magy, magz;                                          // Variables magnetometriques x, y, z
               float pressure;                                                  // Variable pression atmospherique
               float temperature;                                               // Variable temperature atmosphérique
               float altitude;                                                  // Variables altimétrique (capteur pression atmosphérique) 
               float humidity;                                                  // Variable taux humidite atmosphérique (capteur pression atmosphérique)
               unsigned char Status;                                            // Variables Status module.  s0:fValid, s1:fLocked, s2:na, s3:na, s4:na, s5:na, s6:na, s7:fFailed
              } IMU_t; 
    
                   
//2.8- Definition/ Type/ objet PA (pilote automatique)
typedef struct{ 
               bool fValid, fGPSLocked, fWPLocked, fDmin, fDMax, fFailed;
               double wLNG, wLAT,                                               // Variables d'état d'entree du module: Coordonnnees Consigne (WayPoint à rejoindre)
                      mLNG, mLAT;                                               // Variables d'état d'entree du module: Coordonnees reponse   (mesure GPS)
               float  mSPD,                                                     // Variables d'état d'entree du module: Vitesse (km/h)   (mesure GPS) 
                      mHDG,                                                     // Variables d'état d'entree du module: Cap     (deg)    (mesure GPS)
                      CtG,                                                      // Cap à suivre au WP  (calculé)
                      DtG,                                                      // Distance à parcourir au WP (calculée)
                      cPowerMax,                                                // Niveau de puissance Max (0 .. 1)
                      Dmin, DMax,                                               // Distance Max et minau WP 
                      Kp,                                                       // Correction/ Gain Proportionnel (exprimé en % 0..300)
                      outx, outy;                                               // Variables d'état de sortie du module
               unsigned char  Status;                                           // Variables Status du module s0: fValid, s1: fGPSLocked, s2: fWPLocked, s3:fDmin, s4:fDMax, s5: NA, s6: NA,s7: fFailed                    
              } PA_t; 

/*
       
//2.9- Definition/ Type/ objet DIGITAL (Accessoire)       
typedef struct{ 
               bool fValid;                                                     // Validation Module
               unsigned int cDigital;                                           // Variables d'état d'entree du module  (c0: Klaxon, c1: Phare)
               unsigned int rDigital;                                           // Variables d'état de sortie du module (c0: Klaxon, c1: Phare)        
               unsigned char Status;                                            // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
              }DIGITAL_t; 


//2.10- Definition/ Type/ objet SERVO      
typedef struct{ 
               bool fValid;                                                     // Validation Module
               int c;                                                           // Variables d'état d'entree  du module/ Variable (0 .. 1)
               float x, dx, tSERVO;                                             // Variables d'état Filtre  x, dx/ constante de temps du filtre
               int r;                                                           // Variables d'état de sortie du module/ Variable (0 .. 1)
               int pmin;                                                        // Constante/ valeur position minimum
               int pmax;                                                        // Constante/ valeur position maximum
               unsigned char Status;                                            // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
              } SERVO_t; 
*/
 
//2.11- Definition/ Type/ objet LOI
 typedef struct{ 
               bool  fValid;                                                    // Validation Module
               float inx;                                                       // Variable/ Entree/ Power
               float iny;                                                       // Variable/ Entree/ Teta
               float outx;                                                      // Variable/ Sortie/ Gauche
               float outy;                                                      // Variable/ Sortie/ Droit
               unsigned char Status;                                            // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
              } LAW_t; 

                     
       
//2.12- Definition/ Type/ objet filtre PID
typedef struct{  
               bool   fValid;                                                   // Filtre PID/ Validite
                float inc;                                                      // Filtre PID/ Variable/ Consigne
                float inr;                                                      // Filtre PID/ Variable/ FeedBack
                float eM;                                                       // Filtre PID/ Variable/ Erreur (Consigne- Feedback)
                float eMp;
                float eMd; 
                float eMd0;
                float uMi;
                float uMi0;
                float uMd;
                float uMd0;
                float out;                                                      // Filtre PID/ Variable/ Sortie
                float cPID1;                                                    // Filtre PID/ Constante/1/       
                float cPID2;                                                    // Filtre PID/ Constante/2/       
                float cPID3;                                                    // Filtre PID/ Constante/3/       
                float cPID4;                                                    // Filtre PID/ Constante/4/       
                float cPID5;                                                    // Filtre PID/ Constante/5/        
                float cPID6;                                                    // Filtre PID/ Constante/6/
                unsigned char Status;                                           // Filtre PID/ Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
              } PID_t;
 
                   
//2.13- Definition/ Type/ objet MOTEUR
typedef struct{
                bool fValid;                                                    // Validite Module 
                float in;                                                       // Variable d'état/ entrée/ puissance (0..1)
                float dx, x;                                                    // Variables d'etat/ interne / Filtre Passe Bas
                float out;                                                      // Variables d'état/ sortie / puissance (0.. 1)
                float tMOTOR;                                                   // Constante de temps/ Filtre Passe Bas
                float gMOTOR;                                                   // Constante/ Gain/ Filtre Passe Bas
                int pmin;                                                       // Constante/ valeur minimum
                int pmax;                                                       // Constante/ valeur maximum
                unsigned char Status;                                           // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
                } MOTOR_t;

//2.14- Definition/ Type/ objet DIGITAL
typedef struct{
                bool fValid;                                                    // Validite Module 
                int in;                                                         // Variable d'état/ entrée
                int out;                                                        // Variables d'état/ sortie 
                unsigned char Status;                                           // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
                } DIGITAL_t;
       
//2.14- Definition/ Type/ objet TRACK
typedef struct{ 
               bool fValid;                                                     // TRACK/ validite/ module
               bool fRecord;                                                    // TRACK/ Acquisition/ En cours
               int  nbWP;                                                       // TRACK/ nombre WP
               int  pWP;                                                        // TRACK/ pointeur WP
               struct{                                                          // TRACK/ structure WP
                      bool fValid;                                              // wp/ valide
                      double lat, lng;                                          // wp/ Coordonnees Geographiques 
                     }wp[nbWPMAX];
               int Status;                                                      // wp/ status
               } TRACK_t; 
    
    
    
//2.15- Definition/ Type/ objet MOBILE             
typedef struct{
               bool   fValid;                                                   // Mobile/ Validite 
               int    cWDTRX;                                                   // Mobile/ Contante/ WatchDog RX
               float  inx, iny, outx, outy;                                     // Mobile/ Commande: Niveau de puissance vectorielle: Amplidude/ Phase exprimé de 0 à 100%
               int    cMODE, rMODE;                                             // Mobile/ Mode de Fonctionnement
               
 //              double lng, lat, speed, head;                                    // Mobile/ Variables localisation (GPS)
               
               float A[6][6];
                
               float  Px, Py, Pz;                                               // Mobile/ Variables / Position Spatiale
               float  Vx, Vy, Vz;                                               // Mobile/ Variables / Vitesse  Spatiale
               float  Ax, Ay, Az;                                               // Mobile/ Variables / Acceleration Spatiale
               float  Heading;                                                  // Mobile/ Variable / Cap            
               float  roll, pitch, yaw;                                         // Mobile/ Variables attitude (IMU)
               float  temperature;                                              // Mobile/ Variable temperature atmosphérique
               float  pressure;                                                 // Mobile/ Variable pression atmosphérique
               float  humidity;                                                 // Mobile/ Variable humidite atmosphérique
               float  altitude;                                                 // Mobile/ Variable altimétrique
               int    Status;                                                   // Mobile/ Status Module 
              } MOBILE_t; 
 
 
//2.16- Definition/ objet PAD
typedef struct{
               bool  fValid;
               struct{
                      float   in;   // Variable Entree
                      float   out;  // Variable Sortie
                      int     scB;  // Pourcentage Proportionnal- Integral (0..100) sc=0: Commande Integrale pure .... sc= 100: Commande Proportionnelle pure   
                      int     dzB;  // Pourcentage Dead Zone (0..100)
                      int    znlB; // Pourcentage Zone Non Lineaire (0..100)
                      float  ctiB;  // Pourcentage Constante de temps loi integrale (0..100)
                      float  gainI; // Gain Integrale deuxieme zone lineaire 
                      float  ctfB;  // Pourcentage Constante de temps loi proportionnelle (0..100)
                      float    sc;  // Valeur Proportionnel Integral
                      float     dzm;  // Valeur Dead Zone inferieure
                      float     dzM;  // Valeur Dead Zone supérieure
                      float    znlm;  // Valeur Non Linearite inferieure
                      float    znlM;  // Valeur Non Linearite supérieure
                      float   cti;   // Valeur Constante de temps Integrale
                      float   ctf;  // Valeur Constante de temps Proportionnelle  
                      float     l;  // Valeur calcul loi non lineaire
                      float i, i0;  // Valeur calcul integral
                      float     p;  // Valeur calcul proportionnelle     
//                     float fm[5];  // Valeur filtre moyenneur
                      float x, dX, X; // Valeur filtre passe bas          
                     }axe[padNBAXEMAX]; 
               struct{
                     bool   value; 
                     }sw[padNBSWMAX];
                     
//               float roulis, tangage;      
} PAD_t;


//2.17- Definition/ Type/ objet CALENDRIER 
typedef struct{
               bool fValid;                                                     // Validation module
               int  wdtTX;                                                      // WatchDog Emission 
               long int epoque;                                                 // Nombre de secondes depuis le 01/ 01/ 1970 (UNIX Time)             
               int  seconde;                                                    // Seconde
               int  minute;                                                     // Minute
               int  heure;                                                      // Heure
               int  jour;                                                       // Jour
               int  mois;                                                       // Mois
               int  annee;                                                      // Annee
              } CALENDAR_t;
              
              
                           
//2.18- Definition/ Type/ Coordonnées géographiques NED (North - East - Down)/ Référentiel WGS-84              
typedef struct{ 
              double  Lat;                                                      // Latitude  radians, + = North 
              double  Lon;                                                      // Longitude radians, + = East 
              double  Alt;                                                      // Altitude  métres  au dessus de l'elipsoide de référence
              } NED_t; 
              
              
                           
//2.19- Definition/ Type/ Coordonnées géographiques ECEF (Earth-Centered, Earth-Fixed)/ Référentiel WGS-84                            
typedef struct{  
              double  X;                                                        // Valeur em mètre
              double  Y;                                                        // Valeur em mètre
              double  Z;                                                        // Valeur em mètre
              } ECEF_t;