Travail en cours
This commit is contained in:
		
							parent
							
								
									a2e488b337
								
							
						
					
					
						commit
						6fa6b95789
					
				
							
								
								
									
										96
									
								
								Strategie.c
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								Strategie.c
									
									
									
									
									
								
							| @ -69,19 +69,68 @@ void Homologation(uint32_t step_ms){ | |||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case APPROCHE_PANIER_2: |         case APPROCHE_PANIER_2: | ||||||
|  |             if( depose_cerises(step_ms) == ACTION_TERMINEE){ | ||||||
|  |                 etat_strategie = APPROCHE_CERISE_2; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  |         case APPROCHE_CERISE_2: | ||||||
|  |             Trajet_config(250, 500); | ||||||
|             Trajectoire_droite(&trajectoire,Localisation_get().x_mm, Localisation_get().y_mm,  |             Trajectoire_droite(&trajectoire,Localisation_get().x_mm, Localisation_get().y_mm,  | ||||||
|                                 265,2830, |                                 857, 3000 - 156, | ||||||
|                                 +120. * DEGREE_EN_RADIAN, +120. * DEGREE_EN_RADIAN); |                                 +270. * DEGREE_EN_RADIAN, 300. * DEGREE_EN_RADIAN); | ||||||
|  |             if(parcourt_trajet_simple(trajectoire, step_ms) == ACTION_TERMINEE){ | ||||||
|  |                 etat_strategie = ATTRAPPE_CERISE_2; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |          | ||||||
|  |         case ATTRAPPE_CERISE_2: | ||||||
|  |             etat_action = cerise_attraper_bordure(LONGER_VERS_A, step_ms); | ||||||
|  |             if(etat_action == ACTION_TERMINEE){ | ||||||
|  |                 etat_strategie = APPROCHE_PANIER_3; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  |         case APPROCHE_PANIER_3: | ||||||
|  |             if( depose_cerises(step_ms) == ACTION_TERMINEE){ | ||||||
|  |                 etat_strategie = STRATEGIE_FIN; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  | 
 | ||||||
|  |         case STRATEGIE_FIN: | ||||||
|  |             Moteur_Stop(); | ||||||
|  |             i2c_annexe_desactive_propulseur(); | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum etat_action_t depose_cerises(uint32_t step_ms){ | ||||||
|  |     static enum { | ||||||
|  |         APPROCHE_ANGLE, | ||||||
|  |         CALAGE_PANIER_1, | ||||||
|  |         RECULE_PANIER, | ||||||
|  |         LANCE_DANS_PANIER, | ||||||
|  |     }etat_depose = APPROCHE_ANGLE; | ||||||
|  |     enum etat_action_t etat_action = ACTION_EN_COURS; | ||||||
|  | 
 | ||||||
|  |     struct trajectoire_t trajectoire; | ||||||
|  | 
 | ||||||
|  |     switch(etat_depose){ | ||||||
|  | 
 | ||||||
|  |         case APPROCHE_ANGLE: | ||||||
|  |             Trajectoire_droite(&trajectoire,Localisation_get().x_mm, Localisation_get().y_mm,  | ||||||
|  |                                 265, 2830, | ||||||
|  |                                 Localisation_get().angle_radian, +120. * DEGREE_EN_RADIAN); | ||||||
| 
 | 
 | ||||||
|             if(parcourt_trajet_simple(trajectoire, step_ms) == ACTION_TERMINEE){ |             if(parcourt_trajet_simple(trajectoire, step_ms) == ACTION_TERMINEE){ | ||||||
|                 etat_strategie = CALAGE_PANIER_1; |                 etat_depose = CALAGE_PANIER_1; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case CALAGE_PANIER_1: |         case CALAGE_PANIER_1: | ||||||
|             if(calage_angle(LONGER_VERS_A, RAYON_ROBOT, 3000 - (RAYON_ROBOT/(RACINE_DE_3/2.)), 120. *DEGREE_EN_RADIAN) == ACTION_TERMINEE){ |             if(calage_angle(LONGER_VERS_A, RAYON_ROBOT, 3000 - (RAYON_ROBOT/(RACINE_DE_3/2.)), 120. *DEGREE_EN_RADIAN) == ACTION_TERMINEE){ | ||||||
|                 etat_strategie = RECULE_PANIER; |                 etat_depose = RECULE_PANIER; | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|          |          | ||||||
| @ -92,23 +141,20 @@ void Homologation(uint32_t step_ms){ | |||||||
|                                 120. * DEGREE_EN_RADIAN, +270. * DEGREE_EN_RADIAN); |                                 120. * DEGREE_EN_RADIAN, +270. * DEGREE_EN_RADIAN); | ||||||
| 
 | 
 | ||||||
|             if(parcourt_trajet_simple(trajectoire, step_ms) == ACTION_TERMINEE){ |             if(parcourt_trajet_simple(trajectoire, step_ms) == ACTION_TERMINEE){ | ||||||
|                 etat_strategie = LANCE_DANS_PANIER; |                 etat_depose = LANCE_DANS_PANIER; | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case LANCE_DANS_PANIER: |         case LANCE_DANS_PANIER: | ||||||
|             Asser_Position_maintien(); |             Asser_Position_maintien(); | ||||||
|             if(lance_balles(step_ms) == ACTION_TERMINEE){ |             if(lance_balles(step_ms) == ACTION_TERMINEE){ | ||||||
|                 etat_strategie = STRATEGIE_FIN; |                 etat_depose = APPROCHE_ANGLE; | ||||||
|  |                 etat_action = ACTION_TERMINEE; | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         case STRATEGIE_FIN: |  | ||||||
|             Moteur_Stop(); |  | ||||||
|             i2c_annexe_desactive_propulseur(); |  | ||||||
|             break; |  | ||||||
|     } |     } | ||||||
|  |     return etat_action; | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -212,6 +258,32 @@ enum etat_action_t parcourt_trajet_simple(struct trajectoire_t trajectoire, uint | |||||||
|     return etat_action; |     return etat_action; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | enum etat_action_t parcourt_trajet_simple_sans_evitement(struct trajectoire_t trajectoire, uint32_t step_ms){ | ||||||
|  |     enum etat_action_t etat_action = ACTION_EN_COURS; | ||||||
|  |     enum etat_trajet_t etat_trajet; | ||||||
|  |     static enum { | ||||||
|  |         PARCOURS_INIT, | ||||||
|  |         PARCOURS_AVANCE, | ||||||
|  |     } etat_parcourt=PARCOURS_INIT; | ||||||
|  | 
 | ||||||
|  |     switch (etat_parcourt){ | ||||||
|  |         case PARCOURS_INIT: | ||||||
|  |             Trajet_debut_trajectoire(trajectoire); | ||||||
|  |             etat_parcourt = PARCOURS_AVANCE; | ||||||
|  |             break; | ||||||
|  |          | ||||||
|  |         case PARCOURS_AVANCE: | ||||||
|  |             etat_trajet = Trajet_avance(step_ms/1000.); | ||||||
|  |             if(etat_trajet == TRAJET_TERMINE){ | ||||||
|  |                 etat_action = ACTION_TERMINEE; | ||||||
|  |                 etat_parcourt = PARCOURS_INIT; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return etat_action; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /// @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); | ||||||
|  | |||||||
| @ -35,12 +35,18 @@ extern enum etat_strategie_t{ | |||||||
|     RECULE_PANIER, |     RECULE_PANIER, | ||||||
|     TOURNE_PANIER, |     TOURNE_PANIER, | ||||||
|     LANCE_DANS_PANIER, |     LANCE_DANS_PANIER, | ||||||
|  |     APPROCHE_CERISE_2, | ||||||
|  |     ATTRAPPE_CERISE_2, | ||||||
|  |     APPROCHE_PANIER_3, | ||||||
|     STRATEGIE_FIN, |     STRATEGIE_FIN, | ||||||
|  |      | ||||||
| }etat_strategie; | }etat_strategie; | ||||||
| 
 | 
 | ||||||
| enum etat_action_t cerise_accostage(void); | enum etat_action_t cerise_accostage(void); | ||||||
| enum etat_action_t avance_puis_longe_bordure(enum longer_direction_t longer_direction); | enum etat_action_t avance_puis_longe_bordure(enum longer_direction_t longer_direction); | ||||||
| enum etat_action_t parcourt_trajet_simple(struct trajectoire_t trajectoire, uint32_t step_ms); | enum etat_action_t parcourt_trajet_simple(struct trajectoire_t trajectoire, uint32_t step_ms); | ||||||
|  | enum etat_action_t parcourt_trajet_simple_sans_evitement(struct trajectoire_t trajectoire, uint32_t step_ms); | ||||||
|  | enum etat_action_t depose_cerises(uint32_t step_ms); | ||||||
| void Homologation(uint32_t step_ms); | void Homologation(uint32_t step_ms); | ||||||
| enum couleur_t lire_couleur(void); | enum couleur_t lire_couleur(void); | ||||||
| uint attente_tirette(void); | uint attente_tirette(void); | ||||||
|  | |||||||
| @ -13,6 +13,7 @@ | |||||||
| 
 | 
 | ||||||
| // Distance la plus éloignée du bord où le robot est capable d'aspirer les cerises en longeant la bodure.
 | // Distance la plus éloignée du bord où le robot est capable d'aspirer les cerises en longeant la bodure.
 | ||||||
| #define MAX_LONGE_MM 240 | #define MAX_LONGE_MM 240 | ||||||
|  | #define MAX_ASPIRE_CERISE_MM 320 | ||||||
| 
 | 
 | ||||||
| // Translation en mm/s pour aspirer les cerises
 | // Translation en mm/s pour aspirer les cerises
 | ||||||
| #define TRANSLATION_CERISE 70 | #define TRANSLATION_CERISE 70 | ||||||
| @ -40,7 +41,8 @@ enum etat_action_t cerise_attraper_bordure(enum longer_direction_t longer_direct | |||||||
|         TURBINE_DEMARRAGE, |         TURBINE_DEMARRAGE, | ||||||
|         TURBINE_DEMARRAGE_TEMPO, |         TURBINE_DEMARRAGE_TEMPO, | ||||||
|         ASPIRE_LONGE, |         ASPIRE_LONGE, | ||||||
|         ASPIRE_LIBRE |         ASPIRE_LIBRE, | ||||||
|  |         ASPIRE_FIN | ||||||
|     } etat_attrape=ATTRAPE_INIT; |     } etat_attrape=ATTRAPE_INIT; | ||||||
|      |      | ||||||
|     switch(etat_attrape){ |     switch(etat_attrape){ | ||||||
| @ -68,7 +70,6 @@ enum etat_action_t cerise_attraper_bordure(enum longer_direction_t longer_direct | |||||||
|         case TURBINE_DEMARRAGE_TEMPO: |         case TURBINE_DEMARRAGE_TEMPO: | ||||||
|             if(tempo_ms < step_ms){ |             if(tempo_ms < step_ms){ | ||||||
|                 etat_attrape = ASPIRE_LONGE; |                 etat_attrape = ASPIRE_LONGE; | ||||||
|                 printf(">e:ASPIRE_LONGE|t\n"); |  | ||||||
|             }else{ |             }else{ | ||||||
|                 tempo_ms -= step_ms; |                 tempo_ms -= step_ms; | ||||||
|             } |             } | ||||||
| @ -83,11 +84,23 @@ enum etat_action_t cerise_attraper_bordure(enum longer_direction_t longer_direct | |||||||
|             if( ((Localisation_get().y_mm > 1500) && (Localisation_get().y_mm < (3000 - MAX_LONGE_MM) )) || |             if( ((Localisation_get().y_mm > 1500) && (Localisation_get().y_mm < (3000 - MAX_LONGE_MM) )) || | ||||||
|                 ((Localisation_get().y_mm < 1500) && (Localisation_get().y_mm > (MAX_LONGE_MM))) ){ |                 ((Localisation_get().y_mm < 1500) && (Localisation_get().y_mm > (MAX_LONGE_MM))) ){ | ||||||
|                 etat_attrape = ASPIRE_LIBRE; |                 etat_attrape = ASPIRE_LIBRE; | ||||||
|                 printf(">e:ASPIRE_LIBRE|t\n"); |  | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case ASPIRE_LIBRE: |         case ASPIRE_LIBRE: | ||||||
|  |             longer_direction_aspire = inverser_longe_direction(longer_direction); | ||||||
|  |             if(longer_direction_aspire == LONGER_VERS_A){ | ||||||
|  |                 commande_translation_longer_vers_A(); | ||||||
|  |             }else{ | ||||||
|  |                 commande_translation_longer_vers_C(); | ||||||
|  |             } | ||||||
|  |             if( ((Localisation_get().y_mm > 1500) && (Localisation_get().y_mm < (3000 - MAX_ASPIRE_CERISE_MM) )) || | ||||||
|  |                 ((Localisation_get().y_mm < 1500) && (Localisation_get().y_mm > (MAX_ASPIRE_CERISE_MM))) ){ | ||||||
|  |                 etat_attrape = ASPIRE_FIN; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |              | ||||||
|  |         case ASPIRE_FIN: | ||||||
|             commande_vitesse_stop(); |             commande_vitesse_stop(); | ||||||
|             i2c_annexe_desactive_turbine(); |             i2c_annexe_desactive_turbine(); | ||||||
|             etat_action = ACTION_TERMINEE; |             etat_action = ACTION_TERMINEE; | ||||||
|  | |||||||
| @ -106,6 +106,7 @@ int test_strategie(){ | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| int test_homologation(){ | int test_homologation(){ | ||||||
|     int lettre, _step_ms = 1, temps_ms=0, _step_ms_gyro=2,temps_ms_init; |     int lettre, _step_ms = 1, temps_ms=0, _step_ms_gyro=2,temps_ms_init; | ||||||
|     printf("Homologation\n"); |     printf("Homologation\n"); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user