Hlimi Omar
/
biniou
TRR2018 omar
Fork of biniou by
stateMachines.h@32:a9af3b4d2eab, 2018-09-18 (annotated)
- Committer:
- ohlimi2
- Date:
- Tue Sep 18 20:00:38 2018 +0000
- Revision:
- 32:a9af3b4d2eab
- Parent:
- 31:9a3f7bbd32dd
remplacement dans les logs des , par des ; pour la prise en charge par excel
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GaspardD | 29:fc984fe08ca7 | 1 | #ifndef STATE_MACHINES_H |
GaspardD | 29:fc984fe08ca7 | 2 | #define STATE_MACHINES_H |
GaspardD | 29:fc984fe08ca7 | 3 | |
GaspardD | 12:51b1b40cc017 | 4 | #include "mbed.h" |
GaspardD | 8:1d8c3ca5e508 | 5 | #include <stdint.h> |
GaspardD | 8:1d8c3ca5e508 | 6 | |
GaspardD | 19:771bf61be276 | 7 | //#define DLVV |
GaspardD | 19:771bf61be276 | 8 | #define SAMPLING//commenter pour désactiver |
GaspardD | 23:04d393220daa | 9 | #define DUMP_SAMPLIG_PERIOD 10000 |
ohlimi2 | 32:a9af3b4d2eab | 10 | #define DEBUG 1//-1 pour avoir uniquement la gestion de l'interruption bouton |
GaspardD | 17:8c465656eea4 | 11 | |
GaspardD | 21:de7a0a47f8a3 | 12 | #define NB_INTEGRAL_SAMPLES 5 |
GaspardD | 21:de7a0a47f8a3 | 13 | |
GaspardD | 29:fc984fe08ca7 | 14 | #define TACHY_CM 8.0 |
GaspardD | 29:fc984fe08ca7 | 15 | #define COEF_RAYON_BR_S_DIST 1 |
GaspardD | 27:f8c3f1524a64 | 16 | //#define FREINAGE_ADAPTATIF |
GaspardD | 24:698fefbbee00 | 17 | #define PUISSANCE_FREINAGE_W 1000 //en W |
GaspardD | 28:af53caf04446 | 18 | #define MASSE_BINIOU_KG 1.8 |
GaspardD | 29:fc984fe08ca7 | 19 | #define DEMI_LARGEUR_BINIOU_CM 10.0 |
GaspardD | 22:26fc6e6f7a55 | 20 | |
GaspardD | 19:771bf61be276 | 21 | #define DIERCTION_PERIOD_MS 10000 |
GaspardD | 17:8c465656eea4 | 22 | #define DIRECTION_PULSE_MAX 2100 |
GaspardD | 17:8c465656eea4 | 23 | #define DIRECTION_PULSE_MIN 800 |
GaspardD | 23:04d393220daa | 24 | #define DIRECTION_PULSE_MIDDLE 1530 |
GaspardD | 17:8c465656eea4 | 25 | |
GaspardD | 29:fc984fe08ca7 | 26 | #define DIST_MIN_LONG_CM 30 |
GaspardD | 29:fc984fe08ca7 | 27 | |
GaspardD | 19:771bf61be276 | 28 | #define SPEED_PERIOD_US 20000 |
GaspardD | 19:771bf61be276 | 29 | #define BRAKING_PULSE_US 1350 |
GaspardD | 19:771bf61be276 | 30 | #define MAX_PULSE_WIDTH_FOR_TACHY_US 1850 |
GaspardD | 19:771bf61be276 | 31 | #define INITAL_PULSE_SPEED_US 1590 |
GaspardD | 19:771bf61be276 | 32 | #define ZERO_PULSE_SPEED_US 1500 |
GaspardD | 13:af9a59ccf60b | 33 | |
GaspardD | 23:04d393220daa | 34 | #define NB_ECHANTILLONS_IR 8 |
GaspardD | 11:bc24b3ba51a9 | 35 | |
GaspardD | 21:de7a0a47f8a3 | 36 | #define LIDAR_STRENGTH_THRESOLD 25 //pour la gestion de la vitesse MAX (MAXSpeed_ST) |
GaspardD | 21:de7a0a47f8a3 | 37 | #define LIDAR_ERR 65535 |
GaspardD | 11:bc24b3ba51a9 | 38 | |
GaspardD | 18:38504337d2fc | 39 | #define SPEED_DELTA_CMPS 30 |
GaspardD | 11:bc24b3ba51a9 | 40 | |
GaspardD | 22:26fc6e6f7a55 | 41 | #define CAPT_45_DROITE PC_2 |
ohlimi2 | 31:9a3f7bbd32dd | 42 | #define CAPT_45_GAUCHE PA_4 |
GaspardD | 22:26fc6e6f7a55 | 43 | #define CAPT_90_DROITE PA_1 |
GaspardD | 22:26fc6e6f7a55 | 44 | #define CAPT_90_GAUCHE PC_1 |
ohlimi2 | 31:9a3f7bbd32dd | 45 | #define CAPT_90_GAUCHE_SHORT PC_0 |
ohlimi2 | 31:9a3f7bbd32dd | 46 | #define CAPT_90_DROITE_SHORT PA_0 |
GaspardD | 22:26fc6e6f7a55 | 47 | #define CAPT_10_GAUCHE PB_0 |
GaspardD | 22:26fc6e6f7a55 | 48 | #define CAPT_10_DROITE PC_3 |
ohlimi2 | 31:9a3f7bbd32dd | 49 | #define CAPT_DEVANT PA_6 |
GaspardD | 22:26fc6e6f7a55 | 50 | #define ODOMETRE PA_11 |
GaspardD | 22:26fc6e6f7a55 | 51 | |
GaspardD | 22:26fc6e6f7a55 | 52 | |
GaspardD | 19:771bf61be276 | 53 | #ifdef SAMPLING |
GaspardD | 30:21642fb8297a | 54 | #define TAILLE_SAMPLES 1700 |
GaspardD | 19:771bf61be276 | 55 | typedef struct states |
GaspardD | 19:771bf61be276 | 56 | { |
GaspardD | 19:771bf61be276 | 57 | char murs_dlvv; |
GaspardD | 19:771bf61be276 | 58 | char section; |
GaspardD | 19:771bf61be276 | 59 | char maxSpeed; |
GaspardD | 19:771bf61be276 | 60 | char throttle; |
GaspardD | 19:771bf61be276 | 61 | }s_States; |
GaspardD | 11:bc24b3ba51a9 | 62 | |
GaspardD | 29:fc984fe08ca7 | 63 | typedef struct sample |
GaspardD | 19:771bf61be276 | 64 | { |
GaspardD | 19:771bf61be276 | 65 | s_States states; |
GaspardD | 22:26fc6e6f7a55 | 66 | int time; |
GaspardD | 22:26fc6e6f7a55 | 67 | int16_t pwm_thro_us; |
GaspardD | 22:26fc6e6f7a55 | 68 | int16_t pwm_dir_us; |
GaspardD | 29:fc984fe08ca7 | 69 | double largeurPiste; |
GaspardD | 29:fc984fe08ca7 | 70 | double position45; |
GaspardD | 29:fc984fe08ca7 | 71 | double position90; |
GaspardD | 29:fc984fe08ca7 | 72 | double dist; |
GaspardD | 23:04d393220daa | 73 | int16_t distLidar; |
GaspardD | 23:04d393220daa | 74 | int16_t strLidar; |
GaspardD | 19:771bf61be276 | 75 | } s_Sample; |
GaspardD | 19:771bf61be276 | 76 | |
GaspardD | 19:771bf61be276 | 77 | #endif |
GaspardD | 11:bc24b3ba51a9 | 78 | |
GaspardD | 8:1d8c3ca5e508 | 79 | typedef enum{ |
GaspardD | 29:fc984fe08ca7 | 80 | REF_BIDIR, |
GaspardD | 29:fc984fe08ca7 | 81 | REF_A_DROITE, |
GaspardD | 29:fc984fe08ca7 | 82 | REF_A_GAUCHE |
GaspardD | 17:8c465656eea4 | 83 | }MUR_ST; |
GaspardD | 17:8c465656eea4 | 84 | |
GaspardD | 17:8c465656eea4 | 85 | #ifdef DLVV |
GaspardD | 17:8c465656eea4 | 86 | typedef enum{//uniquement activé pour dlvv, se rajoute au PID de murOutput |
GaspardD | 29:fc984fe08ca7 | 87 | ALL_CLEAR, |
GaspardD | 29:fc984fe08ca7 | 88 | FRONT_OBSTRUCTED,//pas d'obstacle droit devant |
GaspardD | 29:fc984fe08ca7 | 89 | RIGHT_OBSTRUCTED,//un obstacle à été detecté à gauche |
GaspardD | 29:fc984fe08ca7 | 90 | LEFT_OBSTRUCTED//un obstacle à été detecté à droite |
GaspardD | 17:8c465656eea4 | 91 | }OBSTACLE_ST; |
GaspardD | 17:8c465656eea4 | 92 | #endif |
GaspardD | 17:8c465656eea4 | 93 | |
GaspardD | 17:8c465656eea4 | 94 | typedef enum{ |
GaspardD | 8:1d8c3ca5e508 | 95 | ARRET, |
GaspardD | 8:1d8c3ca5e508 | 96 | LOADING_SECTION, |
GaspardD | 8:1d8c3ca5e508 | 97 | RUNNING_SECTION |
GaspardD | 8:1d8c3ca5e508 | 98 | }SECTION_ST; |
GaspardD | 8:1d8c3ca5e508 | 99 | |
GaspardD | 8:1d8c3ca5e508 | 100 | typedef enum{ |
GaspardD | 17:8c465656eea4 | 101 | SPEED_MAX,//pas de mur, on va a fond |
GaspardD | 21:de7a0a47f8a3 | 102 | SPEED_WARNING,//signal suffisement fort pour gérer la vitesse |
GaspardD | 21:de7a0a47f8a3 | 103 | BLOCKED//nous somme dans la plage de distance ou la vitesse doit être limitée |
GaspardD | 17:8c465656eea4 | 104 | }MAX_SPEED_ST; |
GaspardD | 17:8c465656eea4 | 105 | |
GaspardD | 17:8c465656eea4 | 106 | typedef enum{ |
GaspardD | 21:de7a0a47f8a3 | 107 | REGULATION_SPEED, |
GaspardD | 16:63690703b5b6 | 108 | AT_SPEED, |
GaspardD | 19:771bf61be276 | 109 | BRAKING, |
GaspardD | 19:771bf61be276 | 110 | STOPPED |
GaspardD | 8:1d8c3ca5e508 | 111 | }THROTTLE_ST; |
GaspardD | 8:1d8c3ca5e508 | 112 | |
GaspardD | 8:1d8c3ca5e508 | 113 | |
GaspardD | 8:1d8c3ca5e508 | 114 | typedef struct s_section { |
GaspardD | 29:fc984fe08ca7 | 115 | double targetSpeed_cmps;//supérieure a 328 |
GaspardD | 29:fc984fe08ca7 | 116 | double slowSpeed_cmps;//supérieure a 328; pour effectuer les virages: pour ne pas avoir d'a coups entre la vitesse variable et la vitesse limitée |
GaspardD | 29:fc984fe08ca7 | 117 | double coef_p_speed; |
GaspardD | 29:fc984fe08ca7 | 118 | double consigne_position; |
GaspardD | 29:fc984fe08ca7 | 119 | double lidarWarningDist_cm; |
GaspardD | 29:fc984fe08ca7 | 120 | double lng_section_cm; |
GaspardD | 29:fc984fe08ca7 | 121 | double coef_p; |
GaspardD | 29:fc984fe08ca7 | 122 | double coef_i; |
GaspardD | 29:fc984fe08ca7 | 123 | double coef_d; |
GaspardD | 8:1d8c3ca5e508 | 124 | s_section* nextSection; |
GaspardD | 8:1d8c3ca5e508 | 125 | }s_Section; |
GaspardD | 8:1d8c3ca5e508 | 126 | |
GaspardD | 11:bc24b3ba51a9 | 127 | //*************** fonctions utilitaires *************** |
GaspardD | 8:1d8c3ca5e508 | 128 | |
GaspardD | 11:bc24b3ba51a9 | 129 | void getTachySpeed(); |
GaspardD | 29:fc984fe08ca7 | 130 | double getDistMoy(AnalogIn* p, double *tab, int size); |
GaspardD | 12:51b1b40cc017 | 131 | void it4cm(); |
GaspardD | 12:51b1b40cc017 | 132 | void it_serial(); |
GaspardD | 23:04d393220daa | 133 | void sampleLog(); |
GaspardD | 29:fc984fe08ca7 | 134 | void initSamples(); |
GaspardD | 29:fc984fe08ca7 | 135 | void initIntegrationTable(); |
GaspardD | 29:fc984fe08ca7 | 136 | void pressed(); |
GaspardD | 11:bc24b3ba51a9 | 137 | |
GaspardD | 11:bc24b3ba51a9 | 138 | //*************** fonctions states machines *************** |
GaspardD | 8:1d8c3ca5e508 | 139 | //gestion de la direction quand la vue est dégagée |
GaspardD | 11:bc24b3ba51a9 | 140 | void mursInit(void); |
GaspardD | 11:bc24b3ba51a9 | 141 | void mursUpdate(void); |
GaspardD | 11:bc24b3ba51a9 | 142 | void mursOutput(void); |
GaspardD | 8:1d8c3ca5e508 | 143 | |
GaspardD | 11:bc24b3ba51a9 | 144 | #ifdef DLVV |
GaspardD | 8:1d8c3ca5e508 | 145 | //gestion de la direction en mode course et de l'évitement en mode DLVV |
GaspardD | 11:bc24b3ba51a9 | 146 | void obstacleInit(void); |
GaspardD | 11:bc24b3ba51a9 | 147 | void obstacleUpdate(void); |
GaspardD | 11:bc24b3ba51a9 | 148 | void obstacleOutput(void); |
GaspardD | 11:bc24b3ba51a9 | 149 | #endif |
GaspardD | 8:1d8c3ca5e508 | 150 | |
GaspardD | 11:bc24b3ba51a9 | 151 | //gestion du comportement en fn de l'avancement sur le parcours |
GaspardD | 11:bc24b3ba51a9 | 152 | void sectionInit(void); |
GaspardD | 11:bc24b3ba51a9 | 153 | void sectionUpdate(void); |
GaspardD | 11:bc24b3ba51a9 | 154 | void sectionOutput(void); |
GaspardD | 11:bc24b3ba51a9 | 155 | |
GaspardD | 11:bc24b3ba51a9 | 156 | //gestion de la gesion de la vitesse max/rotation max des roues la rotation est plus importante que la vitesse :) |
GaspardD | 11:bc24b3ba51a9 | 157 | void maxSpeedInit(void); |
GaspardD | 11:bc24b3ba51a9 | 158 | void maxSpeedUpdate(void); |
GaspardD | 11:bc24b3ba51a9 | 159 | void maxSpeedOutput(void); |
GaspardD | 8:1d8c3ca5e508 | 160 | |
GaspardD | 8:1d8c3ca5e508 | 161 | //gestion de l'allure en fonction des paramètres de la section |
GaspardD | 11:bc24b3ba51a9 | 162 | void throttleInit(void); |
GaspardD | 11:bc24b3ba51a9 | 163 | void throttleUpdate(void); |
GaspardD | 11:bc24b3ba51a9 | 164 | void throttleOutput(void); |
GaspardD | 29:fc984fe08ca7 | 165 | |
GaspardD | 29:fc984fe08ca7 | 166 | #endif |