Garder une orientation cohérente lors des défaillances du Gyro + détecter les défaillances du gyro par une vitesse anomalement élevée
This commit is contained in:
		
							parent
							
								
									feed3bce25
								
							
						
					
					
						commit
						5d25fa8919
					
				| @ -45,9 +45,19 @@ void Localisation_gestion(){ | ||||
|     delta_x_ref_robot = (distance_roue_a_mm + distance_roue_b_mm - 2 * distance_roue_c_mm)  / 3.0; | ||||
|     delta_y_ref_robot = (-distance_roue_a_mm + distance_roue_b_mm)  * RACINE_DE_3 / 3.0; | ||||
| 
 | ||||
|     if(get_position_avec_gyroscope() && !get_position_avec_gyroscope_error()){ | ||||
|         angle_gyro = gyro_get_angle_degres(); | ||||
|         position.angle_radian = angle_gyro.rot_z / 180. * M_PI ; | ||||
|     if(get_position_avec_gyroscope()){ | ||||
|         if(!get_position_avec_gyroscope_error()){ | ||||
|             angle_gyro = gyro_get_angle_degres(); | ||||
|             position.angle_radian = angle_gyro.rot_z / 180. * M_PI ; | ||||
|         }else{ | ||||
|             // On utilise les roues codeuses pour la position du robot.
 | ||||
|             float variation_angle = - ( distance_roue_a_mm + distance_roue_b_mm + distance_roue_c_mm) / (3 * DISTANCE_ROUES_CENTRE_MM); | ||||
|             position.angle_radian += variation_angle; | ||||
| 
 | ||||
|             // On utilise aussi les roue codeuses pour ajuster la position du gyroscope tant qu'il est indisponible
 | ||||
|             gyro_set_angle_radian(position.angle_radian ) | ||||
|              | ||||
|         } | ||||
|     }else{ | ||||
|         position.angle_radian += - ( distance_roue_a_mm + distance_roue_b_mm + distance_roue_c_mm) / (3 * DISTANCE_ROUES_CENTRE_MM); | ||||
|     } | ||||
|  | ||||
							
								
								
									
										9
									
								
								gyro.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								gyro.c
									
									
									
									
									
								
							| @ -3,15 +3,19 @@ | ||||
| #include "hardware/gpio.h" | ||||
| #include "hardware/spi.h" | ||||
| #include "hardware/structs/spi.h" | ||||
| #include "Robot_config.h" | ||||
| #include "Geometrie.h" | ||||
| #include "Monitoring.h" | ||||
| #include "spi_nb.h" | ||||
| #include "Log.h" | ||||
| #include "Temps.h" | ||||
| #include "gyro.h" | ||||
| #include "math.h" | ||||
| 
 | ||||
| #define RADIAN_VERS_DEGRES (180. / M_PI) | ||||
| 
 | ||||
| // Vitesse maximale lue par le gyroscope en degrés par seconde
 | ||||
| #define V_MAX_GYRO 400. | ||||
| 
 | ||||
| #ifdef GYRO_L3GD20H | ||||
|     #include "gyro_L3GD20H.h" | ||||
| @ -123,6 +127,11 @@ void Gyro_Read(uint16_t step_ms){ | ||||
| 
 | ||||
|     vitesse_gyro = *vitesse_angulaire; | ||||
| 
 | ||||
|     if(vitesse_angulaire->rot_x > V_MAX_GYRO || vitesse_angulaire->rot_x < -V_MAX_GYRO){ | ||||
|         set_position_avec_gyroscope_error(1); | ||||
|         Log_message("GYRO > V_MAX_GYRO", ERROR); | ||||
|     } | ||||
| 
 | ||||
|     // Intégration en fonction du pas de temps
 | ||||
|     angle_gyro.rot_x = angle_gyro.rot_x + vitesse_angulaire->rot_x * step_ms * 0.001; | ||||
|     angle_gyro.rot_y = angle_gyro.rot_y + vitesse_angulaire->rot_y * step_ms * 0.001; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user