Homologation
This commit is contained in:
		
							parent
							
								
									e9c15d7e8f
								
							
						
					
					
						commit
						a2e488b337
					
				
							
								
								
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -3,6 +3,9 @@ | |||||||
|         "timer.h": "c", |         "timer.h": "c", | ||||||
|         "localisation.h": "c", |         "localisation.h": "c", | ||||||
|         "math.h": "c", |         "math.h": "c", | ||||||
|         "strategie.h": "c" |         "strategie.h": "c", | ||||||
|  |         "trajectoire.h": "c", | ||||||
|  |         "trajet.h": "c", | ||||||
|  |         "asser_position.h": "c" | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -59,11 +59,11 @@ void invalide_obstacle(struct capteur_VL53L1X_t *capteur_VL53L1X, struct positio | |||||||
|         capteur_VL53L1X->donnee_valide=0; |         capteur_VL53L1X->donnee_valide=0; | ||||||
|     } |     } | ||||||
|     // Si l'obstacle est à l'extérieur du terrain (on prend 50 mm de marge à l'intérieur du terrain, la balise faisant 100 mm)
 |     // Si l'obstacle est à l'extérieur du terrain (on prend 50 mm de marge à l'intérieur du terrain, la balise faisant 100 mm)
 | ||||||
|     /*printf("X:%.1f,Y:%.1f\n", position_obstacle.x_mm, position_obstacle.y_mm);
 |     //printf("X:%.1f,Y:%.1f\n", position_obstacle.x_mm, position_obstacle.y_mm);
 | ||||||
|     if((position_obstacle.x_mm < 50) || (position_obstacle.y_mm < 50) || (position_obstacle.x_mm > 1950) || (position_obstacle.y_mm > 2950)) |     if((position_obstacle.x_mm < 50) || (position_obstacle.y_mm < 50) || (position_obstacle.x_mm > 1950) || (position_obstacle.y_mm > 2950)) | ||||||
|     { |     { | ||||||
|         capteur_VL53L1X->donnee_valide=0; |         capteur_VL53L1X->donnee_valide=0; | ||||||
|     }*/ |     } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -75,7 +75,8 @@ int main() { | |||||||
|     AsserMoteur_Init(); |     AsserMoteur_Init(); | ||||||
|     Localisation_init(); |     Localisation_init(); | ||||||
| 
 | 
 | ||||||
|     while(mode_test()); |     //while(mode_test());
 | ||||||
|  |     test_homologation(); | ||||||
| 
 | 
 | ||||||
|     Gyro_Init(); |     Gyro_Init(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										24
									
								
								Strategie.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								Strategie.c
									
									
									
									
									
								
							| @ -12,7 +12,8 @@ | |||||||
| 
 | 
 | ||||||
| #define SEUIL_RECAL_DIST_MM 75 | #define SEUIL_RECAL_DIST_MM 75 | ||||||
| #define SEUIL_RECAL_ANGLE_RADIAN (5 * DEGREE_EN_RADIAN) | #define SEUIL_RECAL_ANGLE_RADIAN (5 * DEGREE_EN_RADIAN) | ||||||
| #define DISTANCE_OBSTACLE_CM 35 | #define DISTANCE_OBSTACLE_CM 50 | ||||||
|  | #define DISTANCE_PAS_OBSTACLE_MM 2000 | ||||||
| 
 | 
 | ||||||
| enum etat_action_t calage_angle(enum longer_direction_t longer_direction, double x_mm, double y_mm, double angle_radian); | enum etat_action_t calage_angle(enum longer_direction_t longer_direction, double x_mm, double y_mm, double angle_radian); | ||||||
| enum etat_action_t lance_balles(uint32_t step_ms); | enum etat_action_t lance_balles(uint32_t step_ms); | ||||||
| @ -30,19 +31,19 @@ void Homologation(uint32_t step_ms){ | |||||||
|     switch(etat_strategie){ |     switch(etat_strategie){ | ||||||
|         case STRATEGIE_INIT: |         case STRATEGIE_INIT: | ||||||
|             Localisation_set(775., 109., -60. * DEGREE_EN_RADIAN); |             Localisation_set(775., 109., -60. * DEGREE_EN_RADIAN); | ||||||
|             etat_strategie = APPROCHE_CERISE_1_A; |             etat_strategie = ATTENTE_TIRETTE; | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  |         case ATTENTE_TIRETTE: | ||||||
|  |             if(attente_tirette() == 0){ | ||||||
|  |                 etat_strategie = APPROCHE_CERISE_1_A; | ||||||
|  |             } | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case APPROCHE_CERISE_1_A: |         case APPROCHE_CERISE_1_A: | ||||||
|             Trajet_config(250, 500); |             Trajet_config(250, 500); | ||||||
|             Trajectoire_droite(&trajectoire,775, 109, 857, 156, -60. * DEGREE_EN_RADIAN, +30. * DEGREE_EN_RADIAN); |             Trajectoire_droite(&trajectoire,775, 109, 857, 156, -60. * DEGREE_EN_RADIAN, +30. * DEGREE_EN_RADIAN); | ||||||
|             Trajet_debut_trajectoire(trajectoire); |             if(parcourt_trajet_simple(trajectoire, step_ms) == TRAJET_TERMINE){ | ||||||
|             etat_strategie = APPROCHE_CERISE_1_B; |  | ||||||
|             break; |  | ||||||
| 
 |  | ||||||
|         case APPROCHE_CERISE_1_B: |  | ||||||
|             etat_trajet = Trajet_avance(step_ms/1000.); |  | ||||||
|             if(etat_trajet == TRAJET_TERMINE){ |  | ||||||
|                 etat_strategie = ATTRAPE_CERISE_1; |                 etat_strategie = ATTRAPE_CERISE_1; | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
| @ -105,6 +106,7 @@ void Homologation(uint32_t step_ms){ | |||||||
| 
 | 
 | ||||||
|         case STRATEGIE_FIN: |         case STRATEGIE_FIN: | ||||||
|             Moteur_Stop(); |             Moteur_Stop(); | ||||||
|  |             i2c_annexe_desactive_propulseur(); | ||||||
|             break; |             break; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -196,7 +198,7 @@ enum etat_action_t parcourt_trajet_simple(struct trajectoire_t trajectoire, uint | |||||||
|          |          | ||||||
|         case PARCOURS_AVANCE: |         case PARCOURS_AVANCE: | ||||||
|             if(Balise_VL53L1X_get_min_distance() <DISTANCE_OBSTACLE_CM){ |             if(Balise_VL53L1X_get_min_distance() <DISTANCE_OBSTACLE_CM){ | ||||||
|                 Trajet_avance(0.); |                 Trajet_stop(step_ms); | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|             etat_trajet = Trajet_avance(step_ms/1000.); |             etat_trajet = Trajet_avance(step_ms/1000.); | ||||||
| @ -212,7 +214,7 @@ enum etat_action_t parcourt_trajet_simple(struct trajectoire_t trajectoire, uint | |||||||
| 
 | 
 | ||||||
| /// @brief Renvoi 1 si on doit attendre le déclenchement de la tirette
 | /// @brief Renvoi 1 si on doit attendre le déclenchement de la tirette
 | ||||||
| uint attente_tirette(void){ | uint attente_tirette(void){ | ||||||
|     return gpio_get(TIRETTE); |     return !gpio_get(TIRETTE); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// @brief Renvoi COULEUR_VERT ou COULEUR_BLEU
 | /// @brief Renvoi COULEUR_VERT ou COULEUR_BLEU
 | ||||||
|  | |||||||
							
								
								
									
										22
									
								
								Strategie.h
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								Strategie.h
									
									
									
									
									
								
							| @ -24,16 +24,18 @@ enum couleur_t{ | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| extern enum etat_strategie_t{ | extern enum etat_strategie_t{ | ||||||
|     STRATEGIE_INIT=0, |     STRATEGIE_INIT, | ||||||
|     APPROCHE_CERISE_1_A=1, |     ATTENTE_TIRETTE, | ||||||
|     APPROCHE_CERISE_1_B=2, |     APPROCHE_CERISE_1_A, | ||||||
|     ATTRAPE_CERISE_1=3, |     APPROCHE_CERISE_1_B, | ||||||
|     APPROCHE_PANIER_1=4, |     ATTRAPE_CERISE_1, | ||||||
|     APPROCHE_PANIER_2=5, |     APPROCHE_PANIER_1, | ||||||
|     CALAGE_PANIER_1=6, |     APPROCHE_PANIER_2, | ||||||
|     RECULE_PANIER=7, |     CALAGE_PANIER_1, | ||||||
|     LANCE_DANS_PANIER=8, |     RECULE_PANIER, | ||||||
|     STRATEGIE_FIN=254, |     TOURNE_PANIER, | ||||||
|  |     LANCE_DANS_PANIER, | ||||||
|  |     STRATEGIE_FIN, | ||||||
| }etat_strategie; | }etat_strategie; | ||||||
| 
 | 
 | ||||||
| enum etat_action_t cerise_accostage(void); | enum etat_action_t cerise_accostage(void); | ||||||
|  | |||||||
| @ -22,6 +22,7 @@ int test_longe(void); | |||||||
| int test_homologation(void); | int test_homologation(void); | ||||||
| int test_evitement(void); | int test_evitement(void); | ||||||
| int test_tirette_et_couleur(); | int test_tirette_et_couleur(); | ||||||
|  | void affichage_test_evitement(); | ||||||
| 
 | 
 | ||||||
| void affichage_test_strategie(){ | void affichage_test_strategie(){ | ||||||
|     uint32_t temps; |     uint32_t temps; | ||||||
| @ -41,6 +42,8 @@ void affichage_test_strategie(){ | |||||||
|         printf(">c_pos_y:%ld:%f\n", temps, Trajet_get_consigne().y_mm); |         printf(">c_pos_y:%ld:%f\n", temps, Trajet_get_consigne().y_mm); | ||||||
|         printf(">c_pos_angle:%ld:%f\n", temps, Trajet_get_consigne().angle_radian); |         printf(">c_pos_angle:%ld:%f\n", temps, Trajet_get_consigne().angle_radian); | ||||||
| 
 | 
 | ||||||
|  |         printf(">tirette:%ld:%d\n", temps, attente_tirette()); | ||||||
|  | 
 | ||||||
|         printf(">etat_strat:%d\n",etat_strategie); |         printf(">etat_strat:%d\n",etat_strategie); | ||||||
| 
 | 
 | ||||||
|         /*switch(etat_strategie){
 |         /*switch(etat_strategie){
 | ||||||
| @ -126,6 +129,7 @@ int test_homologation(){ | |||||||
|     do{ |     do{ | ||||||
|         i2c_gestion(i2c0); |         i2c_gestion(i2c0); | ||||||
|         i2c_annexe_gestion(); |         i2c_annexe_gestion(); | ||||||
|  |         Balise_VL53L1X_gestion(); | ||||||
|         // Routines à 1 ms
 |         // Routines à 1 ms
 | ||||||
|         if(temps_ms != Temps_get_temps_ms()){ |         if(temps_ms != Temps_get_temps_ms()){ | ||||||
|             temps_ms = Temps_get_temps_ms(); |             temps_ms = Temps_get_temps_ms(); | ||||||
|  | |||||||
							
								
								
									
										31
									
								
								Trajet.c
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								Trajet.c
									
									
									
									
									
								
							| @ -15,6 +15,8 @@ double acceleration_mm_ss; | |||||||
| struct trajectoire_t trajet_trajectoire; | struct trajectoire_t trajet_trajectoire; | ||||||
| struct position_t position_consigne; | struct position_t position_consigne; | ||||||
| 
 | 
 | ||||||
|  | double distance_obstacle_mm; | ||||||
|  | 
 | ||||||
| /// @brief Initialise le module Trajet. A appeler en phase d'initilisation
 | /// @brief Initialise le module Trajet. A appeler en phase d'initilisation
 | ||||||
| void Trajet_init(){ | void Trajet_init(){ | ||||||
|     abscisse = 0; |     abscisse = 0; | ||||||
| @ -74,11 +76,20 @@ enum etat_trajet_t Trajet_avance(double pas_de_temps_s){ | |||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void Trajet_stop(double pas_de_temps_s){ | ||||||
|  |     vitesse_mm_s = 0; | ||||||
|  |     Trajet_avance(0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /// @brief Savoir si un trajet est terminé est trivial sauf pour les courbes de Bézier
 | /// @brief Savoir si un trajet est terminé est trivial sauf pour les courbes de Bézier
 | ||||||
| /// où les approximations font que l'abscisse peut ne pas atteindre 1.
 | /// où les approximations font que l'abscisse peut ne pas atteindre 1.
 | ||||||
| /// @param abscisse : abscisse sur la trajectoire
 | /// @param abscisse : abscisse sur la trajectoire
 | ||||||
| /// @return 1 si le trajet est terminé, 0 sinon
 | /// @return 1 si le trajet est terminé, 0 sinon
 | ||||||
| int Trajet_terminee(double abscisse){ | int Trajet_terminee(double abscisse){ | ||||||
|  |     if(abscisse >= 0.99 ){ | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |     /*
 | ||||||
|     if(trajet_trajectoire.type != TRAJECTOIRE_BEZIER){ |     if(trajet_trajectoire.type != TRAJECTOIRE_BEZIER){ | ||||||
|         if(abscisse >= 1 ){ |         if(abscisse >= 1 ){ | ||||||
|             return 1; |             return 1; | ||||||
| @ -87,7 +98,7 @@ int Trajet_terminee(double abscisse){ | |||||||
|         if(abscisse >= 0.99 ){ |         if(abscisse >= 0.99 ){ | ||||||
|             return 1; |             return 1; | ||||||
|         } |         } | ||||||
|     } |     }*/ | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -101,7 +112,7 @@ struct position_t Trajet_get_consigne(){ | |||||||
| /// @return vitesse déterminée en m/s
 | /// @return vitesse déterminée en m/s
 | ||||||
| double Trajet_calcul_vitesse(double pas_de_temps_s){ | double Trajet_calcul_vitesse(double pas_de_temps_s){ | ||||||
|     double vitesse_max_contrainte; |     double vitesse_max_contrainte; | ||||||
|     double distance_contrainte; |     double distance_contrainte,distance_contrainte_obstacle; | ||||||
|     double vitesse; |     double vitesse; | ||||||
|     // Calcul de la vitesse avec acceleration
 |     // Calcul de la vitesse avec acceleration
 | ||||||
|     vitesse = vitesse_mm_s + acceleration_mm_ss * pas_de_temps_s; |     vitesse = vitesse_mm_s + acceleration_mm_ss * pas_de_temps_s; | ||||||
| @ -109,6 +120,13 @@ double Trajet_calcul_vitesse(double pas_de_temps_s){ | |||||||
|     // Calcul de la vitesse maximale due à la contrainte en fin de trajectoire (0 mm/s)
 |     // Calcul de la vitesse maximale due à la contrainte en fin de trajectoire (0 mm/s)
 | ||||||
|     // https://poivron-robotique.fr/Consigne-de-vitesse.html
 |     // https://poivron-robotique.fr/Consigne-de-vitesse.html
 | ||||||
|     distance_contrainte = Trajectoire_get_longueur_mm(&trajet_trajectoire) - position_mm; |     distance_contrainte = Trajectoire_get_longueur_mm(&trajet_trajectoire) - position_mm; | ||||||
|  | /*
 | ||||||
|  |     distance_contrainte_obstacle = Trajet_get_obstacle_mm(); | ||||||
|  | 
 | ||||||
|  |     if(distance_contrainte > distance_contrainte_obstacle){ | ||||||
|  |         distance_contrainte = distance_contrainte_obstacle; | ||||||
|  |     }*/ | ||||||
|  | 
 | ||||||
|     // En cas de dépassement, on veut garder la contrainte, pour l'instant
 |     // En cas de dépassement, on veut garder la contrainte, pour l'instant
 | ||||||
|     if(distance_contrainte > 0){ |     if(distance_contrainte > 0){ | ||||||
|         vitesse_max_contrainte = sqrt(2 * acceleration_mm_ss * distance_contrainte); |         vitesse_max_contrainte = sqrt(2 * acceleration_mm_ss * distance_contrainte); | ||||||
| @ -125,3 +143,12 @@ double Trajet_calcul_vitesse(double pas_de_temps_s){ | |||||||
|     } |     } | ||||||
|     return vitesse; |     return vitesse; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | double Trajet_get_obstacle_mm(void){ | ||||||
|  |     return distance_obstacle_mm; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void Trajet_set_obstacle_mm(double distance_mm){ | ||||||
|  |     distance_obstacle_mm = distance_mm; | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								Trajet.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Trajet.h
									
									
									
									
									
								
							| @ -18,3 +18,6 @@ void Trajet_config(double _vitesse_max_trajet_mm_s, double _acceleration_mm_ss); | |||||||
| void Trajet_debut_trajectoire(struct trajectoire_t trajectoire); | void Trajet_debut_trajectoire(struct trajectoire_t trajectoire); | ||||||
| enum etat_trajet_t Trajet_avance(double temps_s); | enum etat_trajet_t Trajet_avance(double temps_s); | ||||||
| struct position_t Trajet_get_consigne(void); | struct position_t Trajet_get_consigne(void); | ||||||
|  | double Trajet_get_obstacle_mm(void); | ||||||
|  | void Trajet_set_obstacle_mm(double distance_mm); | ||||||
|  | void Trajet_stop(double); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user