Essai GPS Fusion

Dependencies:   BME280 BNO055 Eigen ds3231 mbed

Revision:
0:07e03c88e90b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/objet.h	Wed Oct 17 11:39:38 2018 +0000
@@ -0,0 +1,393 @@
+
+#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; 
+              
+              
+              
+              
+              
+              
+              
+              
+              
+