Fonction echange pot avant<->arriere ok + amélioration de la prise des plantes
This commit is contained in:
		
							parent
							
								
									e79b7614f5
								
							
						
					
					
						commit
						ba9a1e5411
					
				| @ -44,7 +44,7 @@ int main() { | |||||||
|     stdio_init_all(); |     stdio_init_all(); | ||||||
|      |      | ||||||
|     //Demonstration_init();Demonstration_auto();
 |     //Demonstration_init();Demonstration_auto();
 | ||||||
|     //while(mode_test());
 |     while(mode_test()); | ||||||
|     test_pseudo_homologation(); |     test_pseudo_homologation(); | ||||||
|     Holonome2023_init(); |     Holonome2023_init(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -61,13 +61,19 @@ enum etat_action_t Strat_2024_aller_a_plante(enum zone_plante_t zone_plante){ | |||||||
|     } etat_aller_a_plante = SAAP_INIT_DETECTION; |     } etat_aller_a_plante = SAAP_INIT_DETECTION; | ||||||
|     enum validite_vl53l8_t validite; |     enum validite_vl53l8_t validite; | ||||||
|     float angle_rad, distance_mm, commande_vitesse_plante; |     float angle_rad, distance_mm, commande_vitesse_plante; | ||||||
|     static int tempo_ms; |     static float distance_min_mm; | ||||||
|  |     static int tempo_ms, tempo_asserv; | ||||||
|     static bool entree_dans_zone; |     static bool entree_dans_zone; | ||||||
| 
 | 
 | ||||||
|     switch(etat_aller_a_plante){ |     switch(etat_aller_a_plante){ | ||||||
|         case SAAP_INIT_DETECTION: |         case SAAP_INIT_DETECTION: | ||||||
|  |             i2c_annexe_actionneur_pot(0, BRAS_LEVITE, DOIGT_TIENT); | ||||||
|  |             i2c_annexe_actionneur_pot(5, BRAS_LEVITE, DOIGT_TIENT); | ||||||
|  |             i2c_annexe_mi_ferme_doigt_plante(); | ||||||
|             i2c_annexe_set_mode_VL53L8(VL53L8_PLANTE); |             i2c_annexe_set_mode_VL53L8(VL53L8_PLANTE); | ||||||
|             tempo_ms = 2000; |             tempo_ms = 2000; | ||||||
|  |             distance_min_mm = 2000; | ||||||
|  |             tempo_asserv = 500; | ||||||
|             entree_dans_zone=false; |             entree_dans_zone=false; | ||||||
|             etat_aller_a_plante = SAAP_ASSERV; |             etat_aller_a_plante = SAAP_ASSERV; | ||||||
|             break; |             break; | ||||||
| @ -100,7 +106,21 @@ enum etat_action_t Strat_2024_aller_a_plante(enum zone_plante_t zone_plante){ | |||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 // 2 on s'assure qu'il n'y a pas de robot en face (TODO)
 |                 // 2 on s'assure qu'il n'y a pas de robot en face (TODO)
 | ||||||
|                 commande_vitesse_plante = (distance_mm - 70) * ASSER_DISTANCE_GAIN_PLANTE_P; | 
 | ||||||
|  |                 // 2 bis, on s'assure que le robot se rapproche de la plante. Si ce n'est pas le cas, on arrête
 | ||||||
|  |                 if(distance_mm < distance_min_mm){ | ||||||
|  |                     distance_min_mm = distance_mm; | ||||||
|  |                     tempo_asserv = 500; | ||||||
|  |                 }else{ | ||||||
|  |                     tempo_asserv--; | ||||||
|  |                     if(tempo_asserv <= 0){ | ||||||
|  |                         commande_vitesse(0, 0, 0); | ||||||
|  |                         return ACTION_ECHEC; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // 3 on asservi
 | ||||||
|  |                 commande_vitesse_plante = (distance_mm - 83) * ASSER_DISTANCE_GAIN_PLANTE_P; | ||||||
|                 if(commande_vitesse_plante > 300){ |                 if(commande_vitesse_plante > 300){ | ||||||
|                     commande_vitesse_plante = 300; |                     commande_vitesse_plante = 300; | ||||||
|                 } |                 } | ||||||
| @ -111,8 +131,8 @@ enum etat_action_t Strat_2024_aller_a_plante(enum zone_plante_t zone_plante){ | |||||||
|                     return ACTION_TERMINEE; |                     return ACTION_TERMINEE; | ||||||
|                 } |                 } | ||||||
|                  |                  | ||||||
|                 commande_vitesse(cosf(ANGLE_PINCE) * commande_vitesse_plante , |                 commande_vitesse(cosf(ANGLE_PINCE + 0.04) * commande_vitesse_plante , | ||||||
|                     sinf(ANGLE_PINCE) * commande_vitesse_plante , angle_rad * ASSER_ANGLE_GAIN_PLANTE_P); |                     sinf(ANGLE_PINCE + 0.04) * commande_vitesse_plante , (angle_rad - 0.04) * ASSER_ANGLE_GAIN_PLANTE_P); | ||||||
|             }else{ |             }else{ | ||||||
|                 tempo_ms--; |                 tempo_ms--; | ||||||
|                 if(tempo_ms <= 0){ |                 if(tempo_ms <= 0){ | ||||||
| @ -128,7 +148,7 @@ enum etat_action_t Strat_2024_aller_a_plante(enum zone_plante_t zone_plante){ | |||||||
| /// @brief S'approche d'une plante et la dépose dans un pot déjà attrapé
 | /// @brief S'approche d'une plante et la dépose dans un pot déjà attrapé
 | ||||||
| /// @param step_ms 
 | /// @param step_ms 
 | ||||||
| /// @param bras_depose_pot : PLANTE_BRAS_1 ou PLANTE_BRAS_6
 | /// @param bras_depose_pot : PLANTE_BRAS_1 ou PLANTE_BRAS_6
 | ||||||
| /// @return ACTION_EN_COURS ou ACTION_TERMINEE
 | /// @return ACTION_EN_COURS ou ACTION_TERMINEE ou ACTION_ECHEC (plante tombée devant le robot)
 | ||||||
| enum etat_action_t Strat_2024_plante_dans_pot(uint step_ms, uint bras_depose_pot, enum zone_plante_t zone_plante){ | enum etat_action_t Strat_2024_plante_dans_pot(uint step_ms, uint bras_depose_pot, enum zone_plante_t zone_plante){ | ||||||
|     static enum{ |     static enum{ | ||||||
|         PDP_ALLER_PLANTE, |         PDP_ALLER_PLANTE, | ||||||
| @ -141,18 +161,23 @@ enum etat_action_t Strat_2024_plante_dans_pot(uint step_ms, uint bras_depose_pot | |||||||
|     } etat_plante_dans_pot = PDP_ALLER_PLANTE; |     } etat_plante_dans_pot = PDP_ALLER_PLANTE; | ||||||
|     static int tempo_ms; |     static int tempo_ms; | ||||||
|     struct position_t position_recule, position_initiale; |     struct position_t position_recule, position_initiale; | ||||||
|  |     enum validite_vl53l8_t validite; | ||||||
|  |     enum etat_action_t etat_action; | ||||||
|  |     float angle_rad, distance_mm; | ||||||
| 
 | 
 | ||||||
|     switch (etat_plante_dans_pot) |     switch (etat_plante_dans_pot) | ||||||
|     { |     { | ||||||
|         case PDP_ALLER_PLANTE: |         case PDP_ALLER_PLANTE: | ||||||
|             i2c_annexe_actionneur_pot(0, BRAS_LEVITE, DOIGT_TIENT); |             etat_action = Strat_2024_aller_a_plante(zone_plante); | ||||||
|             i2c_annexe_actionneur_pot(5, BRAS_LEVITE, DOIGT_TIENT); |             if (etat_action == ACTION_TERMINEE){ | ||||||
|             if (Strat_2024_aller_a_plante(zone_plante) == ACTION_TERMINEE){ |  | ||||||
|                 etat_plante_dans_pot=PDP_PRE_PRISE_PLANTE; |                 etat_plante_dans_pot=PDP_PRE_PRISE_PLANTE; | ||||||
|  |             }else if (etat_action == ACTION_ECHEC){ | ||||||
|  |                 return ACTION_ECHEC; | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|         case PDP_PRE_PRISE_PLANTE: |         case PDP_PRE_PRISE_PLANTE: | ||||||
|  |             i2c_annexe_set_mode_VL53L8(VL53L8_PLANTE); | ||||||
|             i2c_annexe_ferme_doigt_plante(); |             i2c_annexe_ferme_doigt_plante(); | ||||||
|             tempo_ms = 250; |             tempo_ms = 250; | ||||||
|             etat_plante_dans_pot=PDP_PRE_PRISE_TEMPO; |             etat_plante_dans_pot=PDP_PRE_PRISE_TEMPO; | ||||||
| @ -167,6 +192,7 @@ enum etat_action_t Strat_2024_plante_dans_pot(uint step_ms, uint bras_depose_pot | |||||||
|             break; |             break; | ||||||
|          |          | ||||||
|         case PDP_PRE_PRISE_RECULE: |         case PDP_PRE_PRISE_RECULE: | ||||||
|  |             i2c_annexe_get_VL53L8(&validite, &angle_rad, &distance_mm); | ||||||
|             tempo_ms--; |             tempo_ms--; | ||||||
|             if(tempo_ms <= 0){ |             if(tempo_ms <= 0){ | ||||||
|                 i2c_annexe_actionneur_pot(0, BRAS_HAUT, DOIGT_TIENT); |                 i2c_annexe_actionneur_pot(0, BRAS_HAUT, DOIGT_TIENT); | ||||||
| @ -177,10 +203,20 @@ enum etat_action_t Strat_2024_plante_dans_pot(uint step_ms, uint bras_depose_pot | |||||||
|             position_recule = Geometrie_deplace(position_initiale, -100); |             position_recule = Geometrie_deplace(position_initiale, -100); | ||||||
|             Trajet_config(TRAJECT_CONFIG_AVANCE_DROIT); |             Trajet_config(TRAJECT_CONFIG_AVANCE_DROIT); | ||||||
|             if(Strategie_aller_a(position_recule.x_mm, position_recule.y_mm, step_ms) == ACTION_TERMINEE){ |             if(Strategie_aller_a(position_recule.x_mm, position_recule.y_mm, step_ms) == ACTION_TERMINEE){ | ||||||
|  |                 if(validite == VL53L8_PLANTE){ | ||||||
|  |                     if(distance_mm > 90){ | ||||||
|  |                         // Nous n'avons pas attrapé la plante avec le doigt, on recommence:
 | ||||||
|  |                         etat_plante_dans_pot = PDP_ALLER_PLANTE; | ||||||
|  |                         i2c_annexe_ouvre_doigt_plante(); | ||||||
|  |                         i2c_annexe_set_mode_VL53L8(VL53L8_INVALIDE); | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|                 commande_vitesse_stop(); |                 commande_vitesse_stop(); | ||||||
|                 i2c_annexe_ouvre_doigt_plante(); |                 i2c_annexe_ouvre_doigt_plante(); | ||||||
|                 i2c_annexe_attrape_plante(bras_depose_pot); |                 i2c_annexe_attrape_plante(bras_depose_pot); | ||||||
|                 tempo_ms = 5000; |                 tempo_ms = 5000; | ||||||
|  |                 i2c_annexe_set_mode_VL53L8(VL53L8_INVALIDE); | ||||||
|                 etat_plante_dans_pot=PDP_ATTRAPE_PLANTE; |                 etat_plante_dans_pot=PDP_ATTRAPE_PLANTE; | ||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|  | |||||||
| @ -63,6 +63,8 @@ struct position_t position_groupe_pot[6] = | |||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | enum etat_action_t Strat_2024_depose_pot(uint8_t masque_pot, uint32_t step_ms); | ||||||
|  | 
 | ||||||
| /// @brief renvoie la position du centre du pot ainsi que l'ange par lequel l'attraper
 | /// @brief renvoie la position du centre du pot ainsi que l'ange par lequel l'attraper
 | ||||||
| /// @param groupe_pot Position du groupe de pot
 | /// @param groupe_pot Position du groupe de pot
 | ||||||
| /// @param num_pot Pot à prendre, entre 0 et 4 (ou utiliser les macros POT_x)
 | /// @param num_pot Pot à prendre, entre 0 et 4 (ou utiliser les macros POT_x)
 | ||||||
| @ -258,3 +260,183 @@ enum etat_action_t Strat_2024_attrape_pot(unsigned int groupe_pot, uint32_t step | |||||||
|     return ACTION_EN_COURS; |     return ACTION_EN_COURS; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | enum etat_action_t Strat_2024_echange_pot_avant_arriere(uint32_t step_ms){ | ||||||
|  |     static struct position_t position_initiale; | ||||||
|  |     struct position_t position_but, position_tmp; | ||||||
|  |     enum etat_action_t etat_action; | ||||||
|  | 
 | ||||||
|  |     static int tempo_ms; | ||||||
|  | 
 | ||||||
|  |     static enum { | ||||||
|  |         EPAA_DEPOSE_POT, | ||||||
|  |         EPAA_TOURNE, | ||||||
|  |         EPAA_ATTRAPE_POT, | ||||||
|  |         EPAA_AVANCE_1, | ||||||
|  |         EPAA_RECULE_1, | ||||||
|  |         EPAA_RECENTRE, | ||||||
|  |         EPAA_AVANCE_2, | ||||||
|  |         EPAA_RECULE_2, | ||||||
|  |         EPAA_LEVE, | ||||||
|  |         EPAA_RETOURNE, | ||||||
|  | 
 | ||||||
|  |     } etat_echange_pot = EPAA_DEPOSE_POT; | ||||||
|  | 
 | ||||||
|  |     switch (etat_echange_pot) | ||||||
|  |     { | ||||||
|  |     case EPAA_DEPOSE_POT: | ||||||
|  |         position_initiale = Localisation_get(); | ||||||
|  |         // On dépose les pots 1, 3, 4 et 6 : 0b00101101 : 0x2D
 | ||||||
|  |         if(Strat_2024_depose_pot(0x2D, step_ms) == ACTION_TERMINEE){ | ||||||
|  |             etat_echange_pot = EPAA_TOURNE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_TOURNE: | ||||||
|  |         if(Strategie_tourner_a(position_initiale.angle_radian + M_PI, step_ms) == ACTION_TERMINEE){ | ||||||
|  |             etat_echange_pot = EPAA_ATTRAPE_POT; | ||||||
|  |             position_initiale.angle_radian += M_PI; | ||||||
|  |             i2c_annexe_actionneur_pot(0, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |             i2c_annexe_actionneur_pot(2, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |             i2c_annexe_actionneur_pot(3, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |             i2c_annexe_actionneur_pot(5, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |             tempo_ms = 500; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_ATTRAPE_POT: | ||||||
|  |         tempo_ms--; | ||||||
|  |         if(tempo_ms <= 0){ | ||||||
|  |             etat_echange_pot = EPAA_AVANCE_1; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_AVANCE_1: | ||||||
|  |         position_but = Geometrie_deplace(position_initiale, DISTANCE_ECHANGE_POT); | ||||||
|  |         Trajet_config(TRAJECT_CONFIG_AVANCE_ET_TOURNE); | ||||||
|  |         if(Strategie_tourner_et_aller_a(position_but.x_mm, position_but.y_mm, position_initiale.angle_radian, EVITEMENT_ARRET_DEVANT_OBSTACLE, | ||||||
|  |                 step_ms) == ACTION_TERMINEE){ | ||||||
|  |             etat_echange_pot = EPAA_RECULE_1; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_RECULE_1: | ||||||
|  |         position_but = Geometrie_deplace(position_initiale, -DISTANCE_ECHANGE_POT); | ||||||
|  |         Trajet_config(TRAJECT_CONFIG_AVANCE_ET_TOURNE); | ||||||
|  |         if(Strategie_tourner_et_aller_a(position_but.x_mm, position_but.y_mm, position_initiale.angle_radian, EVITEMENT_ARRET_DEVANT_OBSTACLE, | ||||||
|  |                 step_ms) == ACTION_TERMINEE){ | ||||||
|  |             etat_echange_pot = EPAA_RECENTRE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_RECENTRE: | ||||||
|  |         Trajet_config(TRAJECT_CONFIG_AVANCE_ET_TOURNE); | ||||||
|  |         if(Strategie_tourner_et_aller_a(position_initiale.x_mm, position_initiale.y_mm, position_initiale.angle_radian, EVITEMENT_ARRET_DEVANT_OBSTACLE, | ||||||
|  |                 step_ms) == ACTION_TERMINEE){ | ||||||
|  |             etat_echange_pot = EPAA_AVANCE_2; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_AVANCE_2: | ||||||
|  |         position_tmp = position_initiale; | ||||||
|  |         position_tmp.angle_radian += 40. * DEGRE_EN_RADIAN ; | ||||||
|  | 
 | ||||||
|  |         position_but = Geometrie_deplace(position_tmp, DISTANCE_ECHANGE_POT); | ||||||
|  |         Trajet_config(TRAJECT_CONFIG_AVANCE_ET_TOURNE); | ||||||
|  |         if(Strategie_tourner_et_aller_a(position_but.x_mm, position_but.y_mm, position_initiale.angle_radian, EVITEMENT_ARRET_DEVANT_OBSTACLE, | ||||||
|  |                 step_ms) == ACTION_TERMINEE){ | ||||||
|  |             etat_echange_pot = EPAA_RECULE_2; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_RECULE_2: | ||||||
|  |         position_tmp = position_initiale; | ||||||
|  |         position_tmp.angle_radian += 60. * DEGRE_EN_RADIAN ; | ||||||
|  |         position_but = Geometrie_deplace(position_tmp, -DISTANCE_ECHANGE_POT); | ||||||
|  |         Trajet_config(TRAJECT_CONFIG_AVANCE_ET_TOURNE); | ||||||
|  |         if(Strategie_tourner_et_aller_a(position_but.x_mm, position_but.y_mm, position_initiale.angle_radian, EVITEMENT_ARRET_DEVANT_OBSTACLE, | ||||||
|  |                 step_ms) == ACTION_TERMINEE){ | ||||||
|  |             etat_echange_pot = EPAA_LEVE; | ||||||
|  |             i2c_annexe_actionneur_pot(0, BRAS_HAUT, DOIGT_TIENT); | ||||||
|  |             i2c_annexe_actionneur_pot(2, BRAS_HAUT, DOIGT_TIENT); | ||||||
|  |             i2c_annexe_actionneur_pot(3, BRAS_HAUT, DOIGT_TIENT); | ||||||
|  |             i2c_annexe_actionneur_pot(5, BRAS_HAUT, DOIGT_TIENT); | ||||||
|  |             tempo_ms = 500; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_LEVE: | ||||||
|  |         tempo_ms--; | ||||||
|  |         if(tempo_ms <= 0){ | ||||||
|  |             etat_echange_pot = EPAA_LEVE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case EPAA_RETOURNE: | ||||||
|  |         if(Strategie_tourner_a(position_initiale.angle_radian - M_PI, step_ms) == ACTION_TERMINEE){ | ||||||
|  |             etat_echange_pot = EPAA_DEPOSE_POT; | ||||||
|  |             return ACTION_TERMINEE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |     return ACTION_EN_COURS; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// @brief dépose 1 ou plusieurs pot au pied du robot.
 | ||||||
|  | /// @param masque_pot: choisi les pots à déposer, 0x01 pour le bras 1, 0x02 pour le bras 2, 0x03 pour les bras 1 & 2
 | ||||||
|  | enum etat_action_t Strat_2024_depose_pot(uint8_t masque_pot, uint32_t step_ms){ | ||||||
|  |     static int tempo_ms; | ||||||
|  |     uint8_t masque=1; | ||||||
|  |     static enum { | ||||||
|  |         DP_BAISSE_BRAS, | ||||||
|  |         DP_BAISSE_BRAS_TEMPO, | ||||||
|  |         DP_RANGE_DOIGT, | ||||||
|  |     } etat_depose_pot = DP_BAISSE_BRAS; | ||||||
|  |     switch (etat_depose_pot) | ||||||
|  |     { | ||||||
|  |     case DP_BAISSE_BRAS: | ||||||
|  |         for (int i=0; i< NB_BRAS; i++){ | ||||||
|  |             masque =1; | ||||||
|  |             masque = masque << i; | ||||||
|  |             if(masque_pot & masque){ | ||||||
|  |                 i2c_annexe_actionneur_pot(i, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         tempo_ms=350; | ||||||
|  |         etat_depose_pot = DP_BAISSE_BRAS_TEMPO; | ||||||
|  |         break; | ||||||
|  |      | ||||||
|  |     case DP_BAISSE_BRAS_TEMPO: | ||||||
|  |         tempo_ms--; | ||||||
|  |         if(tempo_ms < 0){ | ||||||
|  |             for (int i=0; i< NB_BRAS; i++){ | ||||||
|  |                 masque =1; | ||||||
|  |                 masque = masque << i; | ||||||
|  |                 if(masque_pot & masque){ | ||||||
|  |                     i2c_annexe_actionneur_pot(i, BRAS_POT_SOL, DOIGT_LACHE); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             tempo_ms=250; | ||||||
|  |             etat_depose_pot = DP_RANGE_DOIGT; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|  |     case DP_RANGE_DOIGT: | ||||||
|  |         tempo_ms--; | ||||||
|  |         if(tempo_ms < 0){ | ||||||
|  |             etat_depose_pot = DP_BAISSE_BRAS; | ||||||
|  |             return ACTION_TERMINEE; | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  |      | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |     return ACTION_EN_COURS; | ||||||
|  | } | ||||||
| @ -24,5 +24,8 @@ | |||||||
| #define DISTANCE_APPROCHE_POT_MM 300.  | #define DISTANCE_APPROCHE_POT_MM 300.  | ||||||
| #define DISTANCE_ATTRAPE_POT_MM 200. | #define DISTANCE_ATTRAPE_POT_MM 200. | ||||||
| 
 | 
 | ||||||
|  | #define DISTANCE_ECHANGE_POT 50. | ||||||
|  | 
 | ||||||
| struct position_t groupe_pot_get_pot(unsigned int groupe_pot, unsigned int num_pot); | struct position_t groupe_pot_get_pot(unsigned int groupe_pot, unsigned int num_pot); | ||||||
| enum etat_action_t Strat_2024_attrape_pot(unsigned int groupe_pot, uint32_t step_ms); | enum etat_action_t Strat_2024_attrape_pot(unsigned int groupe_pot, uint32_t step_ms); | ||||||
|  | enum etat_action_t Strat_2024_echange_pot_avant_arriere(uint32_t step_ms); | ||||||
|  | |||||||
| @ -29,6 +29,7 @@ int test_attrape_plante(void); | |||||||
| int test_aller_zone_plante(); | int test_aller_zone_plante(); | ||||||
| int test_pseudo_homologation(void); | int test_pseudo_homologation(void); | ||||||
| int test_attrape_1_pot(void); | int test_attrape_1_pot(void); | ||||||
|  | int test_echange_pot(void); | ||||||
| void affichage_test_strategie_2024(void); | void affichage_test_strategie_2024(void); | ||||||
| 
 | 
 | ||||||
| int test_strategie_2024(){ | int test_strategie_2024(){ | ||||||
| @ -39,7 +40,8 @@ int test_strategie_2024(){ | |||||||
|     printf("E - Attrape plante.\n"); |     printf("E - Attrape plante.\n"); | ||||||
|     printf("F - Aller zone plante.\n"); |     printf("F - Aller zone plante.\n"); | ||||||
|     printf("G - Pseudo homologation.\n"); |     printf("G - Pseudo homologation.\n"); | ||||||
|     printf("H - réglage pots.\n"); |     printf("H - reglage pots.\n"); | ||||||
|  |     printf("I - echange pots.\n"); | ||||||
|      |      | ||||||
|     int lettre; |     int lettre; | ||||||
|     do{ |     do{ | ||||||
| @ -86,6 +88,12 @@ int test_strategie_2024(){ | |||||||
|             while(test_attrape_1_pot()); |             while(test_attrape_1_pot()); | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
|  |         case 'i': | ||||||
|  |         case 'I': | ||||||
|  |             while(test_echange_pot()); | ||||||
|  |             break; | ||||||
|  |              | ||||||
|  | 
 | ||||||
|         case 'q': |         case 'q': | ||||||
|         case 'Q': |         case 'Q': | ||||||
|             return 0; |             return 0; | ||||||
| @ -476,7 +484,7 @@ int test_pseudo_homologation(){ | |||||||
|         TAP_DEPOSE |         TAP_DEPOSE | ||||||
|     } etat_test = TAP_CALAGE; |     } etat_test = TAP_CALAGE; | ||||||
| 
 | 
 | ||||||
|     printf("test_attrape_pot\n"); |     printf("test_pseudo_homologation\n"); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     i2c_maitre_init(); |     i2c_maitre_init(); | ||||||
| @ -597,7 +605,7 @@ int test_pseudo_homologation(){ | |||||||
| 
 | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | extern float abscisse; | ||||||
| void affichage_test_strategie_2024(){ | void affichage_test_strategie_2024(){ | ||||||
|     uint32_t temps; |     uint32_t temps; | ||||||
|     enum validite_vl53l8_t validite_vl53l8; |     enum validite_vl53l8_t validite_vl53l8; | ||||||
| @ -615,6 +623,8 @@ void affichage_test_strategie_2024(){ | |||||||
|         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+ ANGLE_PINCE) / DEGRE_EN_RADIAN); |         printf(">c_pos_angle:%ld:%f\n", temps, (Trajet_get_consigne().angle_radian+ ANGLE_PINCE) / DEGRE_EN_RADIAN); | ||||||
| 
 | 
 | ||||||
|  |         printf(">abscisse:%ld:%f\n", temps, abscisse); | ||||||
|  | 
 | ||||||
|         printf(">tirette:%ld:%d\n", temps, attente_tirette()); |         printf(">tirette:%ld:%d\n", temps, attente_tirette()); | ||||||
| 
 | 
 | ||||||
|         printf(">distance_obstacle:%ld:%f\n", temps, Trajet_get_obstacle_mm()); |         printf(">distance_obstacle:%ld:%f\n", temps, Trajet_get_obstacle_mm()); | ||||||
| @ -634,7 +644,7 @@ void affichage_test_strategie_2024(){ | |||||||
|                 break; |                 break; | ||||||
|         } |         } | ||||||
|          |          | ||||||
|         sleep_ms(100); |         sleep_ms(10); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -779,3 +789,89 @@ int test_attrape_1_pot(void){ | |||||||
|     return 0; |     return 0; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | int test_echange_pot(){ | ||||||
|  |     int lettre, _step_ms = 1, temps_ms=0, _step_ms_gyro=2,temps_ms_init; | ||||||
|  |     struct trajectoire_t trajectoire; | ||||||
|  |     enum evitement_t evitement; | ||||||
|  |     enum etat_action_t etat_action=ACTION_EN_COURS; | ||||||
|  |     static int tempo_ms; | ||||||
|  | 
 | ||||||
|  |     static enum { | ||||||
|  |         TEP_INIT, | ||||||
|  |         TEP_ACTION, | ||||||
|  |     } etat_echange_pot = TEP_INIT; | ||||||
|  | 
 | ||||||
|  |     printf("test_echange_pot\n"); | ||||||
|  | 
 | ||||||
|  |     i2c_maitre_init(); | ||||||
|  |     Trajet_init(); | ||||||
|  |     Balise_VL53L1X_init(); | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  |     set_position_avec_gyroscope(1); | ||||||
|  |     if(get_position_avec_gyroscope()){ | ||||||
|  |         printf("Init gyroscope\n"); | ||||||
|  |         Gyro_Init(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     stdio_flush(); | ||||||
|  | 
 | ||||||
|  |     multicore_launch_core1(affichage_test_strategie_2024); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     temps_ms = Temps_get_temps_ms(); | ||||||
|  |     temps_ms_init = temps_ms; | ||||||
|  |     do{ | ||||||
|  |         i2c_gestion(i2c0); | ||||||
|  |         i2c_annexe_gestion(); | ||||||
|  |         Balise_VL53L1X_gestion(); | ||||||
|  |          | ||||||
|  |         // Routines à 1 ms
 | ||||||
|  |         if(temps_ms != Temps_get_temps_ms()){ | ||||||
|  |             temps_ms = Temps_get_temps_ms(); | ||||||
|  |             QEI_update(); | ||||||
|  |             Localisation_gestion(); | ||||||
|  |             AsserMoteur_Gestion(_step_ms); | ||||||
|  |             Evitement_gestion(_step_ms); | ||||||
|  | 
 | ||||||
|  |             // Routine à 2 ms
 | ||||||
|  |             if(temps_ms % _step_ms_gyro == 0){ | ||||||
|  |                 if(get_position_avec_gyroscope()){ | ||||||
|  |                     Gyro_Read(_step_ms_gyro); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             switch(etat_echange_pot){ | ||||||
|  |                 case TEP_INIT: | ||||||
|  |                     i2c_annexe_actionneur_pot(0, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |                     i2c_annexe_actionneur_pot(1, BRAS_HAUT, DOIGT_TIENT); | ||||||
|  |                     i2c_annexe_actionneur_pot(2, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |                     i2c_annexe_actionneur_pot(3, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |                     i2c_annexe_actionneur_pot(4, BRAS_HAUT, DOIGT_TIENT); | ||||||
|  |                     i2c_annexe_actionneur_pot(5, BRAS_POT_SOL, DOIGT_TIENT); | ||||||
|  |                     tempo_ms=3000; | ||||||
|  |                     etat_echange_pot = TEP_ACTION; | ||||||
|  |                     break; | ||||||
|  | 
 | ||||||
|  |                 case TEP_ACTION: | ||||||
|  |                     tempo_ms--; | ||||||
|  |                     if (tempo_ms <= 0) | ||||||
|  |                     { | ||||||
|  |                         etat_action = Strat_2024_echange_pot_avant_arriere(_step_ms); | ||||||
|  |                     } | ||||||
|  |                     break; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  |         lettre = getchar_timeout_us(0); | ||||||
|  |     //}while((lettre == PICO_ERROR_TIMEOUT) || (lettre == 0));
 | ||||||
|  |     }while(etat_action == ACTION_EN_COURS); | ||||||
|  |     Moteur_Stop(); | ||||||
|  |      | ||||||
|  |     return 0; | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -205,6 +205,12 @@ void i2c_annexe_ferme_doigt_plante(void){ | |||||||
|     donnees_a_envoyer_pic=1; |     donnees_a_envoyer_pic=1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void i2c_annexe_mi_ferme_doigt_plante(void){ | ||||||
|  |     donnees_emission_pic18f4550[ADRESSE_ACTION_PINCE] =  | ||||||
|  |         (donnees_emission_pic18f4550[ADRESSE_ACTION_PINCE] & 0x0F) | 0x30; | ||||||
|  |     donnees_a_envoyer_pic=1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void i2c_annexe_init(void){ | void i2c_annexe_init(void){ | ||||||
|     for(unsigned int actionneur=0; actionneur< NB_BRAS; actionneur++){ |     for(unsigned int actionneur=0; actionneur< NB_BRAS; actionneur++){ | ||||||
|         i2c_annexe_actionneur_pot(actionneur, BRAS_PLIE, DOIGT_LACHE); |         i2c_annexe_actionneur_pot(actionneur, BRAS_PLIE, DOIGT_LACHE); | ||||||
|  | |||||||
| @ -49,3 +49,4 @@ void i2c_annexe_init(void); | |||||||
| 
 | 
 | ||||||
| void i2c_annexe_ferme_doigt_plante(void); | void i2c_annexe_ferme_doigt_plante(void); | ||||||
| void i2c_annexe_ouvre_doigt_plante(void); | void i2c_annexe_ouvre_doigt_plante(void); | ||||||
|  | void i2c_annexe_mi_ferme_doigt_plante(void); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user