Essai GPS Fusion
Dependencies: BME280 BNO055 Eigen ds3231 mbed
objet.h@1:03547f392fb7, 2018-10-22 (annotated)
- 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?
User | Revision | Line number | New 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 |