Essai GPS Fusion

Dependencies:   BME280 BNO055 Eigen ds3231 mbed

Committer:
RCMISbed
Date:
Mon Oct 22 17:33:33 2018 +0000
Revision:
1:03547f392fb7
Parent:
0:07e03c88e90b
gps fusion;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RCMISbed 0:07e03c88e90b 1
RCMISbed 0:07e03c88e90b 2 #include <string>
RCMISbed 0:07e03c88e90b 3
RCMISbed 0:07e03c88e90b 4 //1- Definition/ Constantes
RCMISbed 0:07e03c88e90b 5 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RCMISbed 0:07e03c88e90b 6
RCMISbed 0:07e03c88e90b 7 #define wBUFFER 300 // Processus principal/ Trame/ Profondeur MAX du buffer de donnees (exprimé en caracteres)
RCMISbed 0:07e03c88e90b 8 #define wDTRAME 6 // Processus principal/ Trame/ Nombre de donnees MAX par trame
RCMISbed 0:07e03c88e90b 9
RCMISbed 0:07e03c88e90b 10
RCMISbed 0:07e03c88e90b 11 // Definition/ Constante/ Process General/ Nombre d'objet Event MAX
RCMISbed 0:07e03c88e90b 12 #define nbEVENTMAX 15
RCMISbed 0:07e03c88e90b 13
RCMISbed 0:07e03c88e90b 14 // Definition/ Constante/ Nombre de LED intégrées MAX
RCMISbed 0:07e03c88e90b 15 #define nbLEDMAX 4 // Carte/ nombre Max LED
RCMISbed 0:07e03c88e90b 16
RCMISbed 0:07e03c88e90b 17 // Definition/ Constante/ Nombre de Moteurs MAX
RCMISbed 0:07e03c88e90b 18 #define nbMOTORMAX 2
RCMISbed 0:07e03c88e90b 19
RCMISbed 0:07e03c88e90b 20 // Definition/ Constante/ Nombre de SERVO MAX
RCMISbed 0:07e03c88e90b 21 #define nbSERVOMAX 2
RCMISbed 0:07e03c88e90b 22
RCMISbed 0:07e03c88e90b 23 //Definition/ Parametrage/ GPS/ Parcours/ Nombre maximal de WP
RCMISbed 0:07e03c88e90b 24 #define nbWPMAX 100 // Parcours GPS/ Nombre de Way Point Maximum enregistrés
RCMISbed 0:07e03c88e90b 25
RCMISbed 0:07e03c88e90b 26 //Definition/ Constante/ Nombre d'objet PID MAX
RCMISbed 0:07e03c88e90b 27 #define nbPIDMAX 2
RCMISbed 0:07e03c88e90b 28
RCMISbed 0:07e03c88e90b 29 //Definition/ Constante/ Nombre d'objet commande.axe
RCMISbed 0:07e03c88e90b 30 #define nbAXEMAX 2
RCMISbed 0:07e03c88e90b 31
RCMISbed 0:07e03c88e90b 32 //Definition/ Constante/ ojet PAD/ nb axe MAX et nb SW MAX
RCMISbed 0:07e03c88e90b 33 #define padNBAXEMAX 2
RCMISbed 0:07e03c88e90b 34 #define padNBSWMAX 4
RCMISbed 0:07e03c88e90b 35
RCMISbed 0:07e03c88e90b 36 //Definition/ Constante/ Nombre Parametres MAX
RCMISbed 0:07e03c88e90b 37 #define nbPARAMAX 11
RCMISbed 0:07e03c88e90b 38
RCMISbed 0:07e03c88e90b 39
RCMISbed 0:07e03c88e90b 40 // Definition/ Protocole/ Constantes/ Mode
RCMISbed 0:07e03c88e90b 41 #define mSTB 0 // Mode/ STANDBY
RCMISbed 0:07e03c88e90b 42 #define mSTP 1 // Mode/ STOP
RCMISbed 0:07e03c88e90b 43 #define mMAN 2 // Mode/ MANUAL
RCMISbed 0:07e03c88e90b 44 #define mPA 4 // Mode/ Pilote Automatique
RCMISbed 0:07e03c88e90b 45 #define mWP 8 // Mode/ Enregistrement WP
RCMISbed 0:07e03c88e90b 46 #define mRAZ 64 // Mode/ Remise à 0 des commandes
RCMISbed 0:07e03c88e90b 47 #define mCHG 128 // Mode/ recharge Accumulateurs
RCMISbed 0:07e03c88e90b 48
RCMISbed 0:07e03c88e90b 49
RCMISbed 0:07e03c88e90b 50 //2- Definition/ Type de donnees
RCMISbed 0:07e03c88e90b 51 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RCMISbed 0:07e03c88e90b 52
RCMISbed 0:07e03c88e90b 53 //2.1- Definition/ Type/ global/ data/ objet GLOBAL
RCMISbed 0:07e03c88e90b 54 typedef struct{
RCMISbed 0:07e03c88e90b 55 bool fValid; // Validation module
RCMISbed 0:07e03c88e90b 56 string designation; // Identification produit
RCMISbed 0:07e03c88e90b 57 string version; // Version produit (v.xx/yy , xx: annee, yy: semaine dans l'annee)
RCMISbed 0:07e03c88e90b 58 bool debug; // Activation du mode DEBUG
RCMISbed 0:07e03c88e90b 59 int nbLED; // Nombre LED integrées
RCMISbed 0:07e03c88e90b 60 int tBATT; // Batterie/ Structure Chimique
RCMISbed 0:07e03c88e90b 61 int NbElement; // Batterie/ Nombre Elements
RCMISbed 0:07e03c88e90b 62 int Dynmin; // Variables/ dynamique minimum
RCMISbed 0:07e03c88e90b 63 int DynMAX; // Variables/ dynamique MAXIMUM
RCMISbed 0:07e03c88e90b 64 float TSample; // Periode d'echantillonnage du processus (exprimée en secondes)
RCMISbed 0:07e03c88e90b 65 int TPWM; // periode PWM (exprimée en micro secondes)
RCMISbed 0:07e03c88e90b 66 int USBBaud; // UART sur USB BaudRate
RCMISbed 0:07e03c88e90b 67 int UART1Baud; // UART 1 BaudRate
RCMISbed 0:07e03c88e90b 68 int UART2Baud; // UART 2 BaudRate
RCMISbed 0:07e03c88e90b 69 int I2CBaud; // Frequence bus I2C
RCMISbed 0:07e03c88e90b 70 int CANBaud; // Frequence bus CAN
RCMISbed 0:07e03c88e90b 71 struct{ // Event
RCMISbed 0:07e03c88e90b 72 bool fValid; // Event/ Validité
RCMISbed 0:07e03c88e90b 73 bool fPeriode; // Event/ Periodicité
RCMISbed 0:07e03c88e90b 74 int wdt; // Event/ WatchDog
RCMISbed 0:07e03c88e90b 75 int wdtMAX; // Event/ WatchDog MAX
RCMISbed 0:07e03c88e90b 76 }event[nbEVENTMAX];
RCMISbed 0:07e03c88e90b 77 } GLOBAL_t;
RCMISbed 0:07e03c88e90b 78
RCMISbed 0:07e03c88e90b 79
RCMISbed 0:07e03c88e90b 80 //2.2- Definition/ Type/ objet TRAME
RCMISbed 0:07e03c88e90b 81 typedef struct{
RCMISbed 0:07e03c88e90b 82 bool fValid; // Validation module
RCMISbed 0:07e03c88e90b 83 int wdtTX; // WatchDog Emission
RCMISbed 0:07e03c88e90b 84 int wdtRX; // WatchDog Reception
RCMISbed 0:07e03c88e90b 85 int pcar; // Pointeur de caracteres
RCMISbed 0:07e03c88e90b 86 char sb; // Protocole communication/ Start Beacon:
RCMISbed 0:07e03c88e90b 87 char dlb; // Protocole communication/ Delimiter Beacon
RCMISbed 0:07e03c88e90b 88 char eb; // Protocole communication/ End Beacon
RCMISbed 0:07e03c88e90b 89 int id; // Mot identificateur de trame
RCMISbed 0:07e03c88e90b 90 char rx[wBUFFER]; // tableau des caracteres recus
RCMISbed 0:07e03c88e90b 91 char tx[wBUFFER]; // tableau des caracteres envoyés
RCMISbed 0:07e03c88e90b 92 bool fSB, fEB; // status startB et endB
RCMISbed 0:07e03c88e90b 93 int c[wDTRAME]; // Data Consigne
RCMISbed 0:07e03c88e90b 94 int r[wDTRAME]; // Data Reponse
RCMISbed 0:07e03c88e90b 95 int nbdata; // Nombre de Data sur la Trame
RCMISbed 0:07e03c88e90b 96 } TRAME_t;
RCMISbed 0:07e03c88e90b 97
RCMISbed 0:07e03c88e90b 98
RCMISbed 0:07e03c88e90b 99
RCMISbed 0:07e03c88e90b 100 //2.3- Definition/ Type/ objet COMMANDE
RCMISbed 0:07e03c88e90b 101 typedef struct{
RCMISbed 0:07e03c88e90b 102 struct{
RCMISbed 0:07e03c88e90b 103 bool fValid; // Validation Module
RCMISbed 0:07e03c88e90b 104 float in; // Variable Entree
RCMISbed 0:07e03c88e90b 105 float out; // Variable Sortie
RCMISbed 0:07e03c88e90b 106 float dzm; // Valeur Dead Zone inferieure (0..1)
RCMISbed 0:07e03c88e90b 107 float dzM; // Valeur Dead Zone supérieure (0..1)
RCMISbed 0:07e03c88e90b 108 float cti; // Valeur Constante de temps Integrale (0..1)
RCMISbed 0:07e03c88e90b 109 float ctf; // Valeur Constante de temps Proportionnelle (0..1)
RCMISbed 0:07e03c88e90b 110 float ctg; // Valeur Constante de Temps Filtre de sortie
RCMISbed 0:07e03c88e90b 111 float cgg; // Valeur Gain Filtre de sortie
RCMISbed 0:07e03c88e90b 112 float l; // Valeur calcul loi non lineaire
RCMISbed 0:07e03c88e90b 113 float i, i0; // Valeur calcul integral
RCMISbed 0:07e03c88e90b 114 float p; // Valeur calcul proportionnelle
RCMISbed 0:07e03c88e90b 115 float c; // Valeur calcul proportionnelle - integrale
RCMISbed 0:07e03c88e90b 116 float x, dx; // Valeur filtre passe bas
RCMISbed 0:07e03c88e90b 117 }axe[nbAXEMAX];
RCMISbed 0:07e03c88e90b 118 } COMMANDE_t;
RCMISbed 0:07e03c88e90b 119
RCMISbed 0:07e03c88e90b 120
RCMISbed 0:07e03c88e90b 121
RCMISbed 0:07e03c88e90b 122
RCMISbed 0:07e03c88e90b 123
RCMISbed 0:07e03c88e90b 124 //2.4- Definition/ Type/ objet MUX (multiplexeur)
RCMISbed 0:07e03c88e90b 125 typedef struct{
RCMISbed 0:07e03c88e90b 126 bool fValid; // Validation Module
RCMISbed 0:07e03c88e90b 127 float in0x, in0y, in1x, in1y, in2x, in2y, // Variables d'état d'entree du module: variables d'entree
RCMISbed 0:07e03c88e90b 128 outx, outy; // Variables d'état de sortie du module: variables de sortie
RCMISbed 0:07e03c88e90b 129 unsigned char sel; // Variables d'état d'entree du module: selection de la variable d'entrée
RCMISbed 0:07e03c88e90b 130 unsigned char Status; // Variables Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
RCMISbed 0:07e03c88e90b 131 }MUX_t;
RCMISbed 0:07e03c88e90b 132
RCMISbed 0:07e03c88e90b 133
RCMISbed 0:07e03c88e90b 134
RCMISbed 0:07e03c88e90b 135 //2.5- Definition/ Type/ objet ENERGIE
RCMISbed 0:07e03c88e90b 136 typedef struct{
RCMISbed 0:07e03c88e90b 137 bool fValid, fCHARGE, fVhigh, fVlow, fIhigh, fIlow, fFailed;
RCMISbed 0:07e03c88e90b 138 unsigned char tBATT; // Type de batterie (1: LEAD, 2: NIMH, 2: LION, 3: LIPO) // Definition/ Parametres/ Type de batterie
RCMISbed 0:07e03c88e90b 139 unsigned char NbElement; // Nombre Element en Serie
RCMISbed 0:07e03c88e90b 140 int seqPointer; // Sequenceur du processus de charge
RCMISbed 0:07e03c88e90b 141 float tension, courant; // Variables differentielles Energie, Tension, Courant Acquisition
RCMISbed 0:07e03c88e90b 142 float dE,dV,dI; // Variables differentielles Energie, Tension, Courant Filtrage
RCMISbed 0:07e03c88e90b 143 float E, E0, V, I; // Variables Energie, Tension, Courant
RCMISbed 0:07e03c88e90b 144 float VMax, Vmin, IMax, Imin; // Parametres internes
RCMISbed 0:07e03c88e90b 145 int wPWM, pPWM; // Largeur Impulsion, Periode PWM (chargeur)
RCMISbed 0:07e03c88e90b 146 unsigned char Status; // Variables Status du module s0: fValid, s1: fCharge, s2:fVlow, s3:fVhigh, s4:fIlow, s5:fIhigh, s6: NA, s7: fFailed
RCMISbed 0:07e03c88e90b 147 } ENERGY_t;
RCMISbed 0:07e03c88e90b 148
RCMISbed 0:07e03c88e90b 149
RCMISbed 0:07e03c88e90b 150 //2.6- Definition/ Type/ objet GPS
RCMISbed 0:07e03c88e90b 151 typedef struct{
RCMISbed 0:07e03c88e90b 152 int wdtRX; // WatchDog reception
RCMISbed 0:07e03c88e90b 153 bool fValid; // Validité Module GPS
RCMISbed 0:07e03c88e90b 154 int baud; // BaudRate
RCMISbed 0:07e03c88e90b 155 int TSample; // Periode rafraichissement des trames
RCMISbed 0:07e03c88e90b 156 double utc; // Temps universel
RCMISbed 0:07e03c88e90b 157 float vground; // Vitesse Sol
RCMISbed 0:07e03c88e90b 158 float heading; // Cap vrai
RCMISbed 0:07e03c88e90b 159 int fix; // Fix qualification : (0 = non valide, 1 = Fix GPS, 2 = Fix DGPS)
RCMISbed 0:07e03c88e90b 160 int nbsat; // Nombre de Sattelites
RCMISbed 0:07e03c88e90b 161 float dop; // Dilution horizontale
RCMISbed 0:07e03c88e90b 162 double latitude, longitude, altitude; // Coordonnées NED/ Latitude, Longitude, Altitude
RCMISbed 0:07e03c88e90b 163 double x, y, z; // Coordonnées ECEF/ x, y, z
RCMISbed 0:07e03c88e90b 164 int speedmin;
RCMISbed 0:07e03c88e90b 165 unsigned char Status; //Variables Status du module s0:fValid, s1:fLocked, s2:na, s3:na, s4:na, s5:na, s6:na, s7:fFailed
RCMISbed 0:07e03c88e90b 166 } GPS_t;
RCMISbed 0:07e03c88e90b 167
RCMISbed 0:07e03c88e90b 168
RCMISbed 0:07e03c88e90b 169 //2.7- Definition/ Type/ objet IMU
RCMISbed 0:07e03c88e90b 170 typedef struct{
RCMISbed 0:07e03c88e90b 171 bool fValid, fFailed; // Validation module
RCMISbed 0:07e03c88e90b 172 float roll, pitch, yaw; // Variables attitude; Roulis, Tangage, Lacet
RCMISbed 0:07e03c88e90b 173 float q0, q1, q2, q3; // Variables attitude/ Quarternions
RCMISbed 0:07e03c88e90b 174 float liax, liay, liaz; // Variables acceleration lineaire x, y, z
RCMISbed 0:07e03c88e90b 175 float grvx, grvy, grvz; // Variables gravité
RCMISbed 0:07e03c88e90b 176 float gyrox, gyroy, gyroz; // Variables gyroscopiques x, y, z
RCMISbed 0:07e03c88e90b 177 float magx, magy, magz; // Variables magnetometriques x, y, z
RCMISbed 0:07e03c88e90b 178 float pressure; // Variable pression atmospherique
RCMISbed 0:07e03c88e90b 179 float temperature; // Variable temperature atmosphérique
RCMISbed 0:07e03c88e90b 180 float altitude; // Variables altimétrique (capteur pression atmosphérique)
RCMISbed 0:07e03c88e90b 181 float humidity; // Variable taux humidite atmosphérique (capteur pression atmosphérique)
RCMISbed 0:07e03c88e90b 182 unsigned char Status; // Variables Status module. s0:fValid, s1:fLocked, s2:na, s3:na, s4:na, s5:na, s6:na, s7:fFailed
RCMISbed 0:07e03c88e90b 183 } IMU_t;
RCMISbed 0:07e03c88e90b 184
RCMISbed 0:07e03c88e90b 185
RCMISbed 0:07e03c88e90b 186 //2.8- Definition/ Type/ objet PA (pilote automatique)
RCMISbed 0:07e03c88e90b 187 typedef struct{
RCMISbed 0:07e03c88e90b 188 bool fValid, fGPSLocked, fWPLocked, fDmin, fDMax, fFailed;
RCMISbed 0:07e03c88e90b 189 double wLNG, wLAT, // Variables d'état d'entree du module: Coordonnnees Consigne (WayPoint à rejoindre)
RCMISbed 0:07e03c88e90b 190 mLNG, mLAT; // Variables d'état d'entree du module: Coordonnees reponse (mesure GPS)
RCMISbed 0:07e03c88e90b 191 float mSPD, // Variables d'état d'entree du module: Vitesse (km/h) (mesure GPS)
RCMISbed 0:07e03c88e90b 192 mHDG, // Variables d'état d'entree du module: Cap (deg) (mesure GPS)
RCMISbed 0:07e03c88e90b 193 CtG, // Cap à suivre au WP (calculé)
RCMISbed 0:07e03c88e90b 194 DtG, // Distance à parcourir au WP (calculée)
RCMISbed 0:07e03c88e90b 195 cPowerMax, // Niveau de puissance Max (0 .. 1)
RCMISbed 0:07e03c88e90b 196 Dmin, DMax, // Distance Max et minau WP
RCMISbed 0:07e03c88e90b 197 Kp, // Correction/ Gain Proportionnel (exprimé en % 0..300)
RCMISbed 0:07e03c88e90b 198 outx, outy; // Variables d'état de sortie du module
RCMISbed 0:07e03c88e90b 199 unsigned char Status; // Variables Status du module s0: fValid, s1: fGPSLocked, s2: fWPLocked, s3:fDmin, s4:fDMax, s5: NA, s6: NA,s7: fFailed
RCMISbed 0:07e03c88e90b 200 } PA_t;
RCMISbed 0:07e03c88e90b 201
RCMISbed 0:07e03c88e90b 202 /*
RCMISbed 0:07e03c88e90b 203
RCMISbed 0:07e03c88e90b 204 //2.9- Definition/ Type/ objet DIGITAL (Accessoire)
RCMISbed 0:07e03c88e90b 205 typedef struct{
RCMISbed 0:07e03c88e90b 206 bool fValid; // Validation Module
RCMISbed 0:07e03c88e90b 207 unsigned int cDigital; // Variables d'état d'entree du module (c0: Klaxon, c1: Phare)
RCMISbed 0:07e03c88e90b 208 unsigned int rDigital; // Variables d'état de sortie du module (c0: Klaxon, c1: Phare)
RCMISbed 0:07e03c88e90b 209 unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
RCMISbed 0:07e03c88e90b 210 }DIGITAL_t;
RCMISbed 0:07e03c88e90b 211
RCMISbed 0:07e03c88e90b 212
RCMISbed 0:07e03c88e90b 213 //2.10- Definition/ Type/ objet SERVO
RCMISbed 0:07e03c88e90b 214 typedef struct{
RCMISbed 0:07e03c88e90b 215 bool fValid; // Validation Module
RCMISbed 0:07e03c88e90b 216 int c; // Variables d'état d'entree du module/ Variable (0 .. 1)
RCMISbed 0:07e03c88e90b 217 float x, dx, tSERVO; // Variables d'état Filtre x, dx/ constante de temps du filtre
RCMISbed 0:07e03c88e90b 218 int r; // Variables d'état de sortie du module/ Variable (0 .. 1)
RCMISbed 0:07e03c88e90b 219 int pmin; // Constante/ valeur position minimum
RCMISbed 0:07e03c88e90b 220 int pmax; // Constante/ valeur position maximum
RCMISbed 0:07e03c88e90b 221 unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
RCMISbed 0:07e03c88e90b 222 } SERVO_t;
RCMISbed 0:07e03c88e90b 223 */
RCMISbed 0:07e03c88e90b 224
RCMISbed 0:07e03c88e90b 225 //2.11- Definition/ Type/ objet LOI
RCMISbed 0:07e03c88e90b 226 typedef struct{
RCMISbed 0:07e03c88e90b 227 bool fValid; // Validation Module
RCMISbed 0:07e03c88e90b 228 float inx; // Variable/ Entree/ Power
RCMISbed 0:07e03c88e90b 229 float iny; // Variable/ Entree/ Teta
RCMISbed 0:07e03c88e90b 230 float outx; // Variable/ Sortie/ Gauche
RCMISbed 0:07e03c88e90b 231 float outy; // Variable/ Sortie/ Droit
RCMISbed 0:07e03c88e90b 232 unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
RCMISbed 0:07e03c88e90b 233 } LAW_t;
RCMISbed 0:07e03c88e90b 234
RCMISbed 0:07e03c88e90b 235
RCMISbed 0:07e03c88e90b 236
RCMISbed 0:07e03c88e90b 237 //2.12- Definition/ Type/ objet filtre PID
RCMISbed 0:07e03c88e90b 238 typedef struct{
RCMISbed 0:07e03c88e90b 239 bool fValid; // Filtre PID/ Validite
RCMISbed 0:07e03c88e90b 240 float inc; // Filtre PID/ Variable/ Consigne
RCMISbed 0:07e03c88e90b 241 float inr; // Filtre PID/ Variable/ FeedBack
RCMISbed 0:07e03c88e90b 242 float eM; // Filtre PID/ Variable/ Erreur (Consigne- Feedback)
RCMISbed 0:07e03c88e90b 243 float eMp;
RCMISbed 0:07e03c88e90b 244 float eMd;
RCMISbed 0:07e03c88e90b 245 float eMd0;
RCMISbed 0:07e03c88e90b 246 float uMi;
RCMISbed 0:07e03c88e90b 247 float uMi0;
RCMISbed 0:07e03c88e90b 248 float uMd;
RCMISbed 0:07e03c88e90b 249 float uMd0;
RCMISbed 0:07e03c88e90b 250 float out; // Filtre PID/ Variable/ Sortie
RCMISbed 0:07e03c88e90b 251 float cPID1; // Filtre PID/ Constante/1/
RCMISbed 0:07e03c88e90b 252 float cPID2; // Filtre PID/ Constante/2/
RCMISbed 0:07e03c88e90b 253 float cPID3; // Filtre PID/ Constante/3/
RCMISbed 0:07e03c88e90b 254 float cPID4; // Filtre PID/ Constante/4/
RCMISbed 0:07e03c88e90b 255 float cPID5; // Filtre PID/ Constante/5/
RCMISbed 0:07e03c88e90b 256 float cPID6; // Filtre PID/ Constante/6/
RCMISbed 0:07e03c88e90b 257 unsigned char Status; // Filtre PID/ Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
RCMISbed 0:07e03c88e90b 258 } PID_t;
RCMISbed 0:07e03c88e90b 259
RCMISbed 0:07e03c88e90b 260
RCMISbed 0:07e03c88e90b 261 //2.13- Definition/ Type/ objet MOTEUR
RCMISbed 0:07e03c88e90b 262 typedef struct{
RCMISbed 0:07e03c88e90b 263 bool fValid; // Validite Module
RCMISbed 0:07e03c88e90b 264 float in; // Variable d'état/ entrée/ puissance (0..1)
RCMISbed 0:07e03c88e90b 265 float dx, x; // Variables d'etat/ interne / Filtre Passe Bas
RCMISbed 0:07e03c88e90b 266 float out; // Variables d'état/ sortie / puissance (0.. 1)
RCMISbed 0:07e03c88e90b 267 float tMOTOR; // Constante de temps/ Filtre Passe Bas
RCMISbed 0:07e03c88e90b 268 float gMOTOR; // Constante/ Gain/ Filtre Passe Bas
RCMISbed 0:07e03c88e90b 269 int pmin; // Constante/ valeur minimum
RCMISbed 0:07e03c88e90b 270 int pmax; // Constante/ valeur maximum
RCMISbed 0:07e03c88e90b 271 unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
RCMISbed 0:07e03c88e90b 272 } MOTOR_t;
RCMISbed 0:07e03c88e90b 273
RCMISbed 0:07e03c88e90b 274 //2.14- Definition/ Type/ objet DIGITAL
RCMISbed 0:07e03c88e90b 275 typedef struct{
RCMISbed 0:07e03c88e90b 276 bool fValid; // Validite Module
RCMISbed 0:07e03c88e90b 277 int in; // Variable d'état/ entrée
RCMISbed 0:07e03c88e90b 278 int out; // Variables d'état/ sortie
RCMISbed 0:07e03c88e90b 279 unsigned char Status; // Variable Status du module s0:, s1:, s2:, s3:, s4:, s5:, s6:, s7:
RCMISbed 0:07e03c88e90b 280 } DIGITAL_t;
RCMISbed 0:07e03c88e90b 281
RCMISbed 0:07e03c88e90b 282 //2.14- Definition/ Type/ objet TRACK
RCMISbed 0:07e03c88e90b 283 typedef struct{
RCMISbed 0:07e03c88e90b 284 bool fValid; // TRACK/ validite/ module
RCMISbed 0:07e03c88e90b 285 bool fRecord; // TRACK/ Acquisition/ En cours
RCMISbed 0:07e03c88e90b 286 int nbWP; // TRACK/ nombre WP
RCMISbed 0:07e03c88e90b 287 int pWP; // TRACK/ pointeur WP
RCMISbed 0:07e03c88e90b 288 struct{ // TRACK/ structure WP
RCMISbed 0:07e03c88e90b 289 bool fValid; // wp/ valide
RCMISbed 0:07e03c88e90b 290 double lat, lng; // wp/ Coordonnees Geographiques
RCMISbed 0:07e03c88e90b 291 }wp[nbWPMAX];
RCMISbed 0:07e03c88e90b 292 int Status; // wp/ status
RCMISbed 0:07e03c88e90b 293 } TRACK_t;
RCMISbed 0:07e03c88e90b 294
RCMISbed 0:07e03c88e90b 295
RCMISbed 0:07e03c88e90b 296
RCMISbed 0:07e03c88e90b 297 //2.15- Definition/ Type/ objet MOBILE
RCMISbed 0:07e03c88e90b 298 typedef struct{
RCMISbed 0:07e03c88e90b 299 bool fValid; // Mobile/ Validite
RCMISbed 0:07e03c88e90b 300 int cWDTRX; // Mobile/ Contante/ WatchDog RX
RCMISbed 0:07e03c88e90b 301 float inx, iny, outx, outy; // Mobile/ Commande: Niveau de puissance vectorielle: Amplidude/ Phase exprimé de 0 à 100%
RCMISbed 0:07e03c88e90b 302 int cMODE, rMODE; // Mobile/ Mode de Fonctionnement
RCMISbed 0:07e03c88e90b 303
RCMISbed 0:07e03c88e90b 304 // double lng, lat, speed, head; // Mobile/ Variables localisation (GPS)
RCMISbed 0:07e03c88e90b 305
RCMISbed 0:07e03c88e90b 306 float A[6][6];
RCMISbed 0:07e03c88e90b 307
RCMISbed 0:07e03c88e90b 308 float Px, Py, Pz; // Mobile/ Variables / Position Spatiale
RCMISbed 0:07e03c88e90b 309 float Vx, Vy, Vz; // Mobile/ Variables / Vitesse Spatiale
RCMISbed 0:07e03c88e90b 310 float Ax, Ay, Az; // Mobile/ Variables / Acceleration Spatiale
RCMISbed 0:07e03c88e90b 311 float Heading; // Mobile/ Variable / Cap
RCMISbed 0:07e03c88e90b 312 float roll, pitch, yaw; // Mobile/ Variables attitude (IMU)
RCMISbed 0:07e03c88e90b 313 float temperature; // Mobile/ Variable temperature atmosphérique
RCMISbed 0:07e03c88e90b 314 float pressure; // Mobile/ Variable pression atmosphérique
RCMISbed 0:07e03c88e90b 315 float humidity; // Mobile/ Variable humidite atmosphérique
RCMISbed 0:07e03c88e90b 316 float altitude; // Mobile/ Variable altimétrique
RCMISbed 0:07e03c88e90b 317 int Status; // Mobile/ Status Module
RCMISbed 0:07e03c88e90b 318 } MOBILE_t;
RCMISbed 0:07e03c88e90b 319
RCMISbed 0:07e03c88e90b 320
RCMISbed 0:07e03c88e90b 321 //2.16- Definition/ objet PAD
RCMISbed 0:07e03c88e90b 322 typedef struct{
RCMISbed 0:07e03c88e90b 323 bool fValid;
RCMISbed 0:07e03c88e90b 324 struct{
RCMISbed 0:07e03c88e90b 325 float in; // Variable Entree
RCMISbed 0:07e03c88e90b 326 float out; // Variable Sortie
RCMISbed 0:07e03c88e90b 327 int scB; // Pourcentage Proportionnal- Integral (0..100) sc=0: Commande Integrale pure .... sc= 100: Commande Proportionnelle pure
RCMISbed 0:07e03c88e90b 328 int dzB; // Pourcentage Dead Zone (0..100)
RCMISbed 0:07e03c88e90b 329 int znlB; // Pourcentage Zone Non Lineaire (0..100)
RCMISbed 0:07e03c88e90b 330 float ctiB; // Pourcentage Constante de temps loi integrale (0..100)
RCMISbed 0:07e03c88e90b 331 float gainI; // Gain Integrale deuxieme zone lineaire
RCMISbed 0:07e03c88e90b 332 float ctfB; // Pourcentage Constante de temps loi proportionnelle (0..100)
RCMISbed 0:07e03c88e90b 333 float sc; // Valeur Proportionnel Integral
RCMISbed 0:07e03c88e90b 334 float dzm; // Valeur Dead Zone inferieure
RCMISbed 0:07e03c88e90b 335 float dzM; // Valeur Dead Zone supérieure
RCMISbed 0:07e03c88e90b 336 float znlm; // Valeur Non Linearite inferieure
RCMISbed 0:07e03c88e90b 337 float znlM; // Valeur Non Linearite supérieure
RCMISbed 0:07e03c88e90b 338 float cti; // Valeur Constante de temps Integrale
RCMISbed 0:07e03c88e90b 339 float ctf; // Valeur Constante de temps Proportionnelle
RCMISbed 0:07e03c88e90b 340 float l; // Valeur calcul loi non lineaire
RCMISbed 0:07e03c88e90b 341 float i, i0; // Valeur calcul integral
RCMISbed 0:07e03c88e90b 342 float p; // Valeur calcul proportionnelle
RCMISbed 0:07e03c88e90b 343 // float fm[5]; // Valeur filtre moyenneur
RCMISbed 0:07e03c88e90b 344 float x, dX, X; // Valeur filtre passe bas
RCMISbed 0:07e03c88e90b 345 }axe[padNBAXEMAX];
RCMISbed 0:07e03c88e90b 346 struct{
RCMISbed 0:07e03c88e90b 347 bool value;
RCMISbed 0:07e03c88e90b 348 }sw[padNBSWMAX];
RCMISbed 0:07e03c88e90b 349
RCMISbed 0:07e03c88e90b 350 // float roulis, tangage;
RCMISbed 0:07e03c88e90b 351 } PAD_t;
RCMISbed 0:07e03c88e90b 352
RCMISbed 0:07e03c88e90b 353
RCMISbed 0:07e03c88e90b 354 //2.17- Definition/ Type/ objet CALENDRIER
RCMISbed 0:07e03c88e90b 355 typedef struct{
RCMISbed 0:07e03c88e90b 356 bool fValid; // Validation module
RCMISbed 0:07e03c88e90b 357 int wdtTX; // WatchDog Emission
RCMISbed 0:07e03c88e90b 358 long int epoque; // Nombre de secondes depuis le 01/ 01/ 1970 (UNIX Time)
RCMISbed 0:07e03c88e90b 359 int seconde; // Seconde
RCMISbed 0:07e03c88e90b 360 int minute; // Minute
RCMISbed 0:07e03c88e90b 361 int heure; // Heure
RCMISbed 0:07e03c88e90b 362 int jour; // Jour
RCMISbed 0:07e03c88e90b 363 int mois; // Mois
RCMISbed 0:07e03c88e90b 364 int annee; // Annee
RCMISbed 0:07e03c88e90b 365 } CALENDAR_t;
RCMISbed 0:07e03c88e90b 366
RCMISbed 0:07e03c88e90b 367
RCMISbed 0:07e03c88e90b 368
RCMISbed 0:07e03c88e90b 369 //2.18- Definition/ Type/ Coordonnées géographiques NED (North - East - Down)/ Référentiel WGS-84
RCMISbed 0:07e03c88e90b 370 typedef struct{
RCMISbed 0:07e03c88e90b 371 double Lat; // Latitude radians, + = North
RCMISbed 0:07e03c88e90b 372 double Lon; // Longitude radians, + = East
RCMISbed 0:07e03c88e90b 373 double Alt; // Altitude métres au dessus de l'elipsoide de référence
RCMISbed 0:07e03c88e90b 374 } NED_t;
RCMISbed 0:07e03c88e90b 375
RCMISbed 0:07e03c88e90b 376
RCMISbed 0:07e03c88e90b 377
RCMISbed 0:07e03c88e90b 378 //2.19- Definition/ Type/ Coordonnées géographiques ECEF (Earth-Centered, Earth-Fixed)/ Référentiel WGS-84
RCMISbed 0:07e03c88e90b 379 typedef struct{
RCMISbed 0:07e03c88e90b 380 double X; // Valeur em mètre
RCMISbed 0:07e03c88e90b 381 double Y; // Valeur em mètre
RCMISbed 0:07e03c88e90b 382 double Z; // Valeur em mètre
RCMISbed 0:07e03c88e90b 383 } ECEF_t;
RCMISbed 0:07e03c88e90b 384
RCMISbed 0:07e03c88e90b 385
RCMISbed 0:07e03c88e90b 386
RCMISbed 0:07e03c88e90b 387
RCMISbed 0:07e03c88e90b 388
RCMISbed 0:07e03c88e90b 389
RCMISbed 0:07e03c88e90b 390
RCMISbed 0:07e03c88e90b 391
RCMISbed 0:07e03c88e90b 392
RCMISbed 0:07e03c88e90b 393