Creation de la fonction gerant l'état de l'évitement
This commit is contained in:
		
							parent
							
								
									9e53cd0501
								
							
						
					
					
						commit
						a656d62d41
					
				| @ -14,6 +14,7 @@ Asser_Moteurs.c | |||||||
| Asser_Position.c | Asser_Position.c | ||||||
| Balise_VL53L1X.c | Balise_VL53L1X.c | ||||||
| Commande_vitesse.c | Commande_vitesse.c | ||||||
|  | Evitement.c | ||||||
| QEI.c | QEI.c | ||||||
| Geometrie.c | Geometrie.c | ||||||
| gyro.c | gyro.c | ||||||
|  | |||||||
							
								
								
									
										37
									
								
								Evitement.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Evitement.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | #include "pico/stdlib.h" | ||||||
|  | #include "Evitement.h" | ||||||
|  | #include "Trajet.h" | ||||||
|  | 
 | ||||||
|  | // 250 ms
 | ||||||
|  | #define TEMPS_VALIDE_OBSTACLE_US 250000 | ||||||
|  | 
 | ||||||
|  | enum evitement_statu_t evitement_statu=PAS_D_OBSTACLE; | ||||||
|  | 
 | ||||||
|  | void Evitement_gestion(){ | ||||||
|  |     static uint32_t temps_obstacle; | ||||||
|  |     switch(evitement_statu){ | ||||||
|  |         case PAS_D_OBSTACLE: | ||||||
|  |             if(Trajet_get_bloque() == 1){ | ||||||
|  |                 evitement_statu = OBSTACLE_NON_CONFIRME; | ||||||
|  |                 temps_obstacle = time_us_32(); | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |         case OBSTACLE_NON_CONFIRME: | ||||||
|  |             if(time_us_32() - temps_obstacle >  TEMPS_VALIDE_OBSTACLE_US){ | ||||||
|  |                 evitement_statu = ARRET_DEVANT_OBSTACLE; | ||||||
|  |             } | ||||||
|  |             if(Trajet_get_bloque() == 1){ | ||||||
|  |                 evitement_statu = PAS_D_OBSTACLE; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |         case ARRET_DEVANT_OBSTACLE: | ||||||
|  |             if(Trajet_get_bloque() == 1){ | ||||||
|  |                 evitement_statu = PAS_D_OBSTACLE; | ||||||
|  |             } | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | enum evitement_statu_t Evitement_get_statu(){ | ||||||
|  |     return evitement_statu; | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								Evitement.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Evitement.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | enum evitement_statu_t{ | ||||||
|  |     PAS_D_OBSTACLE, | ||||||
|  |     OBSTACLE_NON_CONFIRME, | ||||||
|  |     ARRET_DEVANT_OBSTACLE, | ||||||
|  | }; | ||||||
							
								
								
									
										15
									
								
								Trajet.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								Trajet.c
									
									
									
									
									
								
							| @ -21,6 +21,8 @@ float distance_obstacle_mm; | |||||||
| float distance_fin_trajectoire_mm; | float distance_fin_trajectoire_mm; | ||||||
| const float distance_pas_obstacle = 2000; | const float distance_pas_obstacle = 2000; | ||||||
| 
 | 
 | ||||||
|  | float vitesse_max_contrainte_obstacle; | ||||||
|  | 
 | ||||||
| /// @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; | ||||||
| @ -118,7 +120,6 @@ struct position_t Trajet_get_consigne(){ | |||||||
| /// @return vitesse déterminée en m/s
 | /// @return vitesse déterminée en m/s
 | ||||||
| float Trajet_calcul_vitesse(float pas_de_temps_s){ | float Trajet_calcul_vitesse(float pas_de_temps_s){ | ||||||
|     float vitesse_max_contrainte; |     float vitesse_max_contrainte; | ||||||
|     float vitesse_max_contrainte_obstacle; |  | ||||||
|     float distance_contrainte,distance_contrainte_obstacle; |     float distance_contrainte,distance_contrainte_obstacle; | ||||||
|     float vitesse; |     float vitesse; | ||||||
|     // Calcul de la vitesse avec acceleration
 |     // Calcul de la vitesse avec acceleration
 | ||||||
| @ -187,4 +188,16 @@ float Trajet_get_orientation_avance(){ | |||||||
| 
 | 
 | ||||||
| float Trajet_get_abscisse(){ | float Trajet_get_abscisse(){ | ||||||
|     return abscisse; |     return abscisse; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// @brief Indique si le robot est bloqué sur le trajet
 | ||||||
|  | /// @return 0 si le robot n'est pas bloqué, 1 s'il est bloqué
 | ||||||
|  | uint32_t Trajet_get_bloque(){ | ||||||
|  |     if(Trajet_get_obstacle_mm() == DISTANCE_INVALIDE){ | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |     if (vitesse_max_contrainte_obstacle == 0){ | ||||||
|  |         return 1; | ||||||
|  |     } | ||||||
|  |     return 0; | ||||||
| } | } | ||||||
							
								
								
									
										2
									
								
								Trajet.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Trajet.h
									
									
									
									
									
								
							| @ -1,3 +1,4 @@ | |||||||
|  | #include "pico/stdlib.h" | ||||||
| #include "Trajectoire.h" | #include "Trajectoire.h" | ||||||
| 
 | 
 | ||||||
| enum etat_trajet_t{ | enum etat_trajet_t{ | ||||||
| @ -24,3 +25,4 @@ void Trajet_set_obstacle_mm(float distance_mm); | |||||||
| void Trajet_stop(float); | void Trajet_stop(float); | ||||||
| float Trajet_get_orientation_avance(void); | float Trajet_get_orientation_avance(void); | ||||||
| float Trajet_get_abscisse(); | float Trajet_get_abscisse(); | ||||||
|  | uint32_t Trajet_get_bloque(); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user