Gestion du retour à la maison fonctionnel
This commit is contained in:
		
							parent
							
								
									a0f6044799
								
							
						
					
					
						commit
						727197d9f4
					
				| @ -5,6 +5,7 @@ | ||||
| #include "Trajet.h" | ||||
| #include "Asser_Moteurs.h" | ||||
| #include "i2c_annexe.h" | ||||
| #include "Evitement.h" | ||||
| 
 | ||||
| #define LED_PIN_ROUGE 28 | ||||
| 
 | ||||
| @ -45,6 +46,7 @@ void Monitoring_display(){ | ||||
|         printf(">V_bat:%ld:%2.1f\n", temps, (float) (i2c_annexe_get_tension_batterie() / 10.)); | ||||
|         printf(">DebugVar:%ld:%d\n", temps, debug_var); | ||||
|         printf(">Distance_Obstacle:%ld:%f\n", temps, Trajet_get_obstacle_mm()); | ||||
|         printf(">Etat_Evitement:%ld:%d\n", temps, Evitement_get_statu()); | ||||
|         printf(">DebugVarf(abscisse):%ld:%f\n", temps, debug_varf); | ||||
|         struct position_t position = Localisation_get(); | ||||
|         printf(">pos_x:%ld:%f\n", temps, position.x_mm); | ||||
|  | ||||
							
								
								
									
										73
									
								
								Strategie.c
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								Strategie.c
									
									
									
									
									
								
							| @ -52,8 +52,7 @@ enum etat_action_t Strategie_aller_cerises_laterales_opposees(enum couleur_t cou | ||||
| 
 | ||||
| 
 | ||||
| void Strategie(enum couleur_t couleur, uint32_t step_ms, uint32_t temps_ms){ | ||||
|     //const uint32_t temps_pre_fin_match = (97000 - 15000);
 | ||||
|     const uint32_t temps_pre_fin_match = (15000); | ||||
|     const uint32_t temps_pre_fin_match = (97000 - 15000); | ||||
|     static bool pre_fin_match_active=false; | ||||
|     float angle_fin; | ||||
|     float recal_pos_x, recal_pos_y; | ||||
| @ -85,7 +84,7 @@ void Strategie(enum couleur_t couleur, uint32_t step_ms, uint32_t temps_ms){ | ||||
|         etat_strategie=STRATEGIE_FIN; | ||||
|     } | ||||
| 
 | ||||
|     if(temps_ms > temps_pre_fin_match){ | ||||
|     if(temps_ms > temps_pre_fin_match && pre_fin_match_active == false){ | ||||
|         if(etat_strategie != LANCER_PANIER){ | ||||
|             etat_strategie = RETOUR_MAISON; | ||||
|         } | ||||
| @ -98,7 +97,7 @@ void Strategie(enum couleur_t couleur, uint32_t step_ms, uint32_t temps_ms){ | ||||
|                 Localisation_set(225., 3000 - PETIT_RAYON_ROBOT_MM, (120.+CORR_ANGLE_DEPART_DEGREE) * DEGRE_EN_RADIAN); | ||||
|                 struct objectif_t objectif_1 = { .priorite = 10, .etat = FAIT, .cible = CERISE_BAS}; | ||||
|                 struct objectif_t objectif_2 = { .priorite = 1, .etat = A_FAIRE, .cible = CERISE_HAUT}; | ||||
|                 struct objectif_t objectif_3 = { .priorite = 2, .etat = FAIT, .cible = CERISE_GAUCHE}; | ||||
|                 struct objectif_t objectif_3 = { .priorite = 2, .etat = A_FAIRE, .cible = CERISE_GAUCHE}; | ||||
|                 struct objectif_t objectif_4 = { .priorite = 5, .etat = FAIT, .cible = CERISE_DROITE}; | ||||
|                 objectifs[0]= objectif_1; | ||||
|                 objectifs[1]= objectif_2; | ||||
| @ -108,7 +107,7 @@ void Strategie(enum couleur_t couleur, uint32_t step_ms, uint32_t temps_ms){ | ||||
|                 Localisation_set(2000 - 225., 3000 - PETIT_RAYON_ROBOT_MM, (120.+CORR_ANGLE_DEPART_DEGREE) * DEGRE_EN_RADIAN); | ||||
|                 struct objectif_t objectif_1 = { .priorite = 10, .etat = FAIT, .cible = CERISE_BAS}; | ||||
|                 struct objectif_t objectif_2 = { .priorite = 1, .etat = A_FAIRE, .cible = CERISE_HAUT}; | ||||
|                 struct objectif_t objectif_3 = { .priorite = 2, .etat = FAIT, .cible = CERISE_DROITE}; | ||||
|                 struct objectif_t objectif_3 = { .priorite = 2, .etat = A_FAIRE, .cible = CERISE_DROITE}; | ||||
|                 struct objectif_t objectif_4 = { .priorite = 5, .etat = FAIT, .cible = CERISE_GAUCHE}; | ||||
|                 objectifs[0]= objectif_1; | ||||
|                 objectifs[1]= objectif_2; | ||||
| @ -291,8 +290,22 @@ void Strategie(enum couleur_t couleur, uint32_t step_ms, uint32_t temps_ms){ | ||||
|             } | ||||
| 
 | ||||
|             break; | ||||
|          | ||||
|         case RETOUR_MAISON: | ||||
|             if(Strategie_pieds_dans_plat(couleur, step_ms) == ACTION_TERMINEE){ | ||||
|                 // Si le robot est dans la zone du panier, jeter les cerises s'il en a
 | ||||
|                 if(Strategie_get_cerise_dans_robot() > 0 && Robot_est_dans_zone_depose_panier(couleur)){ | ||||
|                     //etat_strategie=LANCER_PANIER; // Il faut orienter le robot face au panier
 | ||||
|                     etat_strategie=STRATEGIE_FIN; | ||||
|                 }else{ | ||||
|                     etat_strategie=STRATEGIE_FIN; | ||||
|                 } | ||||
|             } | ||||
|             break; | ||||
| 
 | ||||
| 
 | ||||
|         case STRATEGIE_FIN: | ||||
|             pre_fin_match_active=true; | ||||
|             i2c_annexe_desactive_propulseur(); | ||||
|             commande_vitesse_stop(); | ||||
|             i2c_annexe_couleur_balise(0xE0, 0x0FFF); | ||||
| @ -459,6 +472,25 @@ int Robot_est_dans_zone_cerise_haut(enum couleur_t couleur){ | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int Robot_est_dans_zone_depose_panier(enum couleur_t couleur){ | ||||
|     float x_mm, y_mm; | ||||
|     x_mm = Localisation_get().x_mm; | ||||
|     y_mm = Localisation_get().y_mm; | ||||
|     if(couleur == COULEUR_BLEU){ | ||||
|         // Zone 1
 | ||||
|         if(x_mm < 550 && y_mm > 2450){ | ||||
|             return 1; | ||||
|         } | ||||
|     }else{ | ||||
|         // Zone 1
 | ||||
|         if(x_mm > 2000 - 550 && y_mm > 2450){ | ||||
|             return 1; | ||||
|         } | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| /// @brief Renvoi 1 si le robot intersect une zone de dépose
 | ||||
| /// @param  couleur du robot
 | ||||
| /// @return 1 si oui, 0 si non.
 | ||||
| @ -787,20 +819,23 @@ enum etat_action_t Strategie_aller_a(float pos_x, float pos_y, uint32_t step_ms) | ||||
| 
 | ||||
| 
 | ||||
| enum etat_action_t Strategie_pieds_dans_plat(enum couleur_t couleur, uint32_t step_ms){ | ||||
|     static struct objectif_t objectifs_plats[5], *objectif_plat_courant = &objectifs_plats[0]; | ||||
|     static struct objectif_t objectifs_plats[5], *objectif_plat_courant=NULL; | ||||
|     enum etat_action_t etat_action; | ||||
|     //Trajet_config(500,500); //750, 500 => Ne marche pas
 | ||||
| 
 | ||||
| 
 | ||||
|     struct objectif_t objectif_1 = { .priorite = 1, .etat = A_FAIRE, .cible = ZONE_1}; | ||||
|     struct objectif_t objectif_2 = { .priorite = 4, .etat = A_FAIRE, .cible = ZONE_2}; | ||||
|     struct objectif_t objectif_3 = { .priorite = 3, .etat = A_FAIRE, .cible = ZONE_3}; | ||||
|     struct objectif_t objectif_4 = { .priorite = 2, .etat = A_FAIRE, .cible = ZONE_4}; | ||||
|     struct objectif_t objectif_5 = { .priorite = 5, .etat = A_FAIRE, .cible = ZONE_5}; | ||||
|     objectifs_plats[0] = objectif_1; | ||||
|     objectifs_plats[1] = objectif_2; | ||||
|     objectifs_plats[2] = objectif_3; | ||||
|     objectifs_plats[3] = objectif_4; | ||||
|     objectifs_plats[4] = objectif_5; | ||||
|     if(objectif_plat_courant==NULL){ | ||||
|         objectif_plat_courant = &objectifs_plats[0]; | ||||
|         struct objectif_t objectif_1 = { .priorite = 1, .etat = A_FAIRE, .cible = ZONE_1}; | ||||
|         struct objectif_t objectif_2 = { .priorite = 3, .etat = A_FAIRE, .cible = ZONE_2}; | ||||
|         struct objectif_t objectif_3 = { .priorite = 5, .etat = A_FAIRE, .cible = ZONE_3}; | ||||
|         struct objectif_t objectif_4 = { .priorite = 2, .etat = A_FAIRE, .cible = ZONE_4}; | ||||
|         struct objectif_t objectif_5 = { .priorite = 4, .etat = A_FAIRE, .cible = ZONE_5}; | ||||
|         objectifs_plats[0] = objectif_1; | ||||
|         objectifs_plats[1] = objectif_2; | ||||
|         objectifs_plats[2] = objectif_3; | ||||
|         objectifs_plats[3] = objectif_4; | ||||
|         objectifs_plats[4] = objectif_5; | ||||
|     } | ||||
| 
 | ||||
|     etat_action = Strategie_pieds_dans_plat_trajet(objectif_plat_courant, couleur, step_ms); | ||||
|     switch(etat_action){ | ||||
| @ -829,7 +864,7 @@ enum etat_action_t Strategie_pieds_dans_plat(enum couleur_t couleur, uint32_t st | ||||
|             // Si notre objectif est FAIT, on prend le premier objectif "A_FAIRE"
 | ||||
|             // Si notre objectif est A_FAIRE, on prend le nouvel objectif que si sa priorité est plus basse.
 | ||||
|             for(uint i=0; i < 5; i++){ | ||||
|                 if(objectif_plat_courant->etat == FAIT && objectifs_plats[i].etat == A_FAIRE){ | ||||
|                 if(objectif_plat_courant->etat == BLOQUE && objectifs_plats[i].etat == A_FAIRE){ | ||||
|                     objectif_plat_courant = &(objectifs_plats[i]); | ||||
|                 }else if(objectif_plat_courant->etat == A_FAIRE && objectifs_plats[i].etat == A_FAIRE){ | ||||
|                     if(objectif_plat_courant->priorite > objectifs_plats[i].priorite){ | ||||
| @ -838,7 +873,7 @@ enum etat_action_t Strategie_pieds_dans_plat(enum couleur_t couleur, uint32_t st | ||||
| 
 | ||||
|                 }  | ||||
|             } | ||||
| 
 | ||||
|             return ACTION_EN_COURS; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -57,6 +57,7 @@ int temporisation_terminee(uint32_t * tempo_ms, uint32_t step_ms); | ||||
| enum etat_action_t  Strategie_aller_panier(enum couleur_t couleur, uint32_t step_ms); | ||||
| enum etat_action_t Strategie_parcourir_trajet(struct trajectoire_t trajectoire, uint32_t step_ms, enum evitement_t evitement); | ||||
| int Robot_est_dans_zone_depose(enum couleur_t couleur); | ||||
| int Robot_est_dans_zone_depose_panier(enum couleur_t couleur); | ||||
| enum etat_action_t Strategie_preparation(); | ||||
| 
 | ||||
| enum etat_action_t Strategie_pieds_dans_plat_trajet(struct objectif_t *objectif_plat_courant, enum couleur_t couleur, uint32_t step_ms); | ||||
|  | ||||
| @ -27,7 +27,7 @@ enum etat_action_t Strategie_parcourir_trajet(struct trajectoire_t trajectoire, | ||||
|                 Trajet_set_obstacle_mm(distance_obstacle); | ||||
|             } | ||||
| 
 | ||||
|             if(Evitement_get_statu() == ARRET_DEVANT_OBSTACLE){ | ||||
|             if(Evitement_get_statu() == OBSTACLE_CONFIRME || Evitement_get_statu() == OBSTACLE_NON_CONFIRME){ | ||||
|                 switch(evitement){ | ||||
|                     case SANS_EVITEMENT: | ||||
|                         //printf("Evitement lors trajet SANS_EVITEMENT: ERREUR\n");
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user