trajectoires multiples fonctionnelles, testées avec la super star
This commit is contained in:
parent
5b34afcb27
commit
5fde54506c
1
.vscode/c_cpp_properties.json
vendored
1
.vscode/c_cpp_properties.json
vendored
@ -2,6 +2,7 @@
|
||||
"env": {
|
||||
"myDefaultIncludePath": [
|
||||
"${workspaceFolder}",
|
||||
"${workspaceFolder}/VL53L8CX_ULD_API/inc",
|
||||
"${workspaceFolder}/build",
|
||||
"${env:PICO_SDK_PATH}/src/**/include",
|
||||
"${env:PICO_SDK_PATH}/src/common/pico_base/include",
|
||||
|
@ -26,6 +26,7 @@ add_executable(Mon_Projet
|
||||
Temps.c
|
||||
Trajectoire_bezier.c
|
||||
Trajectoire_circulaire.c
|
||||
Trajectoire_composees.c
|
||||
Trajectoire_droite.c
|
||||
Trajectoire.c
|
||||
Trajet.c
|
||||
|
47
Strategie.c
47
Strategie.c
@ -5,46 +5,31 @@
|
||||
|
||||
enum etat_action_t Strategie_super_star(uint32_t step_ms){
|
||||
static enum{
|
||||
SSS_TEST_TOURNE,
|
||||
SSS_INIT,
|
||||
SSS_AVANCE_1,
|
||||
SSS_TOURNE,
|
||||
SSS_AVANCE_2,
|
||||
SSS_AVANCE,
|
||||
SSS_DANCE
|
||||
} etat_sss = SSS_INIT;
|
||||
struct trajectoire_t trajectoire;
|
||||
static struct trajectoire_t trajectoire_composee;
|
||||
static struct trajectoire_t trajectoire1, trajectoire2, trajectoire3;
|
||||
|
||||
|
||||
|
||||
switch(etat_sss){
|
||||
case SSS_TEST_TOURNE:
|
||||
Localisation_set(1135, 1895, 0);
|
||||
etat_sss = SSS_TOURNE;
|
||||
break;
|
||||
case SSS_INIT:
|
||||
Localisation_set(45, 1895, 0);
|
||||
etat_sss = SSS_AVANCE_1;
|
||||
Trajectoire_droite(&trajectoire1, 45, 1895, 1135, 1895, 0, 0);
|
||||
Trajectoire_circulaire(&trajectoire2, 1135, 1645, M_PI/2, 0, 250, 0, -M_PI/2);
|
||||
Trajectoire_droite(&trajectoire3, 1385, 1645, 1385, 1580, 0, 0);
|
||||
Trajectoire_composee_init(&trajectoire_composee);
|
||||
Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire1);
|
||||
Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire2);
|
||||
Trajectoire_composee_ajout(&trajectoire_composee, &trajectoire3);
|
||||
etat_sss = SSS_AVANCE;
|
||||
break;
|
||||
|
||||
case SSS_AVANCE_1:
|
||||
Trajet_config(TRAJECT_CONFIG_STD);
|
||||
Trajectoire_droite(&trajectoire, 45, 1895, 1135, 1895, 0, 0);
|
||||
if(Strategie_parcourir_trajet(trajectoire, step_ms, EVITEMENT_SANS_EVITEMENT) == ACTION_TERMINEE){
|
||||
etat_sss = SSS_TOURNE;
|
||||
}
|
||||
break;
|
||||
|
||||
case SSS_TOURNE:
|
||||
//Trajet_config(100, 100);
|
||||
Trajet_config(TRAJECT_CONFIG_STD);
|
||||
Trajectoire_circulaire(&trajectoire, 1135, 1645, M_PI/2, 0, 250, 0, -M_PI/2);
|
||||
if(Strategie_parcourir_trajet(trajectoire, step_ms, EVITEMENT_SANS_EVITEMENT) == ACTION_TERMINEE){
|
||||
etat_sss = SSS_AVANCE_2;
|
||||
}
|
||||
break;
|
||||
|
||||
case SSS_AVANCE_2:
|
||||
Trajet_config(TRAJECT_CONFIG_STD);
|
||||
Trajectoire_droite(&trajectoire, 1385, 1645, 1385, 1580, 0, 0);
|
||||
if(Strategie_parcourir_trajet(trajectoire, step_ms, EVITEMENT_SANS_EVITEMENT) == ACTION_TERMINEE){
|
||||
case SSS_AVANCE:
|
||||
Trajet_config(TRAJECT_CONFIG_RAPIDE);
|
||||
if(Strategie_parcourir_trajet(trajectoire_composee, step_ms, EVITEMENT_SANS_EVITEMENT) == ACTION_TERMINEE){
|
||||
etat_sss = SSS_DANCE;
|
||||
}
|
||||
break;
|
||||
|
@ -2,15 +2,15 @@
|
||||
#include "Trajectoire_bezier.h"
|
||||
#include "Trajectoire_circulaire.h"
|
||||
#include "Trajectoire_droite.h"
|
||||
#include "Trajectoire_composees.h"
|
||||
|
||||
#include "math.h"
|
||||
|
||||
#define NB_MAX_TRAJECTOIRES 5
|
||||
#define PRECISION_ABSCISSE 0.001f
|
||||
|
||||
|
||||
void Trajectoire_circulaire(struct trajectoire_t * trajectoire, float centre_x, float centre_y, float angle_debut_rad, float angle_fin_rad, float rayon,
|
||||
float orientation_debut_rad, float orientation_fin_rad){
|
||||
void Trajectoire_circulaire(struct trajectoire_t * trajectoire, float centre_x, float centre_y, float angle_debut_rad,
|
||||
float angle_fin_rad, float rayon, float orientation_debut_rad, float orientation_fin_rad){
|
||||
trajectoire->type = TRAJECTOIRE_CIRCULAIRE;
|
||||
trajectoire->p1.x = centre_x;
|
||||
trajectoire->p1.y = centre_y;
|
||||
@ -34,8 +34,8 @@ void Trajectoire_droite(struct trajectoire_t * trajectoire, float p1_x, float p1
|
||||
trajectoire->orientation_fin_rad = orientation_fin_rad;
|
||||
}
|
||||
|
||||
void Trajectoire_bezier(struct trajectoire_t * trajectoire, float p1_x, float p1_y, float p2_x, float p2_y, float p3_x, float p3_y, float p4_x, float p4_y,
|
||||
float orientation_debut_rad, float orientation_fin_rad){
|
||||
void Trajectoire_bezier(struct trajectoire_t * trajectoire, float p1_x, float p1_y, float p2_x, float p2_y, float p3_x, float p3_y,
|
||||
float p4_x, float p4_y, float orientation_debut_rad, float orientation_fin_rad){
|
||||
trajectoire->type = TRAJECTOIRE_BEZIER;
|
||||
trajectoire->p1.x = p1_x;
|
||||
trajectoire->p1.y = p1_y;
|
||||
@ -50,6 +50,27 @@ void Trajectoire_bezier(struct trajectoire_t * trajectoire, float p1_x, float p1
|
||||
trajectoire->orientation_fin_rad = orientation_fin_rad;
|
||||
}
|
||||
|
||||
/// @brief Initialise une trajectoire composée
|
||||
/// @param trajectoire : trajectoire à initialiser
|
||||
void Trajectoire_composee_init(struct trajectoire_t * trajectoire){
|
||||
trajectoire->type = TRAJECTOIRE_COMPOSEE;
|
||||
trajectoire->longueur = -1;
|
||||
trajectoire->nb_trajectoire = 0;
|
||||
for (int index =0; index <NB_MAX_TRAJECTOIRE ; index++){
|
||||
trajectoire->trajectoires[index] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief Ajoute une trajectoire à une trajectoire composée déjà initialisée
|
||||
/// @param trajectoire_composee
|
||||
/// @param trajectoire
|
||||
void Trajectoire_composee_ajout(struct trajectoire_t * trajectoire_composee, struct trajectoire_t * trajectoire){
|
||||
if(trajectoire_composee->nb_trajectoire < NB_MAX_TRAJECTOIRE){
|
||||
trajectoire_composee->trajectoires[trajectoire_composee->nb_trajectoire] = trajectoire;
|
||||
trajectoire_composee->nb_trajectoire++;
|
||||
}
|
||||
}
|
||||
|
||||
void Trajectoire_inverse(struct trajectoire_t * trajectoire){
|
||||
struct trajectoire_t old_trajectoire;
|
||||
old_trajectoire = *trajectoire;
|
||||
@ -97,6 +118,10 @@ float Trajectoire_get_longueur_mm(struct trajectoire_t * trajectoire){
|
||||
case TRAJECTOIRE_BEZIER:
|
||||
Trajectoire_bezier_get_longueur(trajectoire);
|
||||
break;
|
||||
|
||||
case TRAJECTOIRE_COMPOSEE:
|
||||
Trajectoire_composee_get_longueur(trajectoire);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return trajectoire->longueur;
|
||||
@ -123,6 +148,10 @@ struct point_xyo_t Trajectoire_get_point(struct trajectoire_t * trajectoire, dou
|
||||
point_xyo.orientation = Trajectoire_get_orientation_rad(trajectoire, abscisse);
|
||||
break;
|
||||
|
||||
case TRAJECTOIRE_COMPOSEE:
|
||||
point_xyo = Trajectoire_composee_get_point(trajectoire, abscisse);
|
||||
break;
|
||||
|
||||
}
|
||||
return point_xyo;
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
#ifndef TRAJECTOIRE_H
|
||||
#define TRAJECTOIRE_H
|
||||
|
||||
#define NB_MAX_TRAJECTOIRE 10
|
||||
|
||||
enum trajectoire_type_t{
|
||||
TRAJECTOIRE_DROITE,
|
||||
TRAJECTOIRE_CIRCULAIRE,
|
||||
TRAJECTOIRE_BEZIER,
|
||||
TRAJECTOIRE_COMPOSEE
|
||||
};
|
||||
|
||||
struct point_xy_t{
|
||||
@ -22,6 +25,9 @@ struct trajectoire_t {
|
||||
float orientation_debut_rad, orientation_fin_rad;
|
||||
float rayon, angle_debut_rad, angle_fin_rad;
|
||||
float longueur;
|
||||
// Pour les trajectoires composées
|
||||
struct trajectoire_t * trajectoires[NB_MAX_TRAJECTOIRE];
|
||||
int nb_trajectoire;
|
||||
};
|
||||
|
||||
float Trajectoire_get_longueur_mm(struct trajectoire_t * trajectoire);
|
||||
@ -35,6 +41,9 @@ void Trajectoire_droite(struct trajectoire_t * trajectoire, float p1_x, float p1
|
||||
void Trajectoire_bezier(struct trajectoire_t * trajectoire, float p1_x, float p1_y, float p2_x, float p2_y, float p3_x, float p3_y, float p4_x, float p4_y,
|
||||
float orientation_debut_rad, float orientation_fin_rad);
|
||||
void Trajectoire_rotation(struct trajectoire_t * trajectoire, float p1_x, float p1_y, float orientation_debut_rad, float orientation_fin_rad);
|
||||
void Trajectoire_composee_init(struct trajectoire_t * trajectoire);
|
||||
void Trajectoire_composee_ajout(struct trajectoire_t * trajectoire_composee, struct trajectoire_t * trajectoire);
|
||||
|
||||
void Trajectoire_inverse(struct trajectoire_t * trajectoire);
|
||||
|
||||
#endif
|
||||
|
24
Trajectoire_composees.c
Normal file
24
Trajectoire_composees.c
Normal file
@ -0,0 +1,24 @@
|
||||
#include <math.h>
|
||||
#include "Trajectoire.h"
|
||||
#include "Trajectoire_composees.h"
|
||||
|
||||
void Trajectoire_composee_get_longueur(struct trajectoire_t * trajectoire_composee){
|
||||
trajectoire_composee->longueur = 0;
|
||||
for(unsigned int i = 0 ; i<trajectoire_composee->nb_trajectoire ; i++) {
|
||||
trajectoire_composee->longueur += Trajectoire_get_longueur_mm(trajectoire_composee->trajectoires[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct point_xyo_t Trajectoire_composee_get_point(struct trajectoire_t * trajectoire_composee, double abscisse){
|
||||
// Obtenir la trajectoire sur laquelle nous sommes...
|
||||
int index_trajectoire;
|
||||
double abscisse_etendue, abscisse_locale;
|
||||
|
||||
abscisse_etendue = abscisse * trajectoire_composee->nb_trajectoire;
|
||||
index_trajectoire = (int) floor(abscisse_etendue);
|
||||
abscisse_locale = abscisse_etendue - floor(abscisse_etendue);
|
||||
|
||||
return Trajectoire_get_point(trajectoire_composee->trajectoires[index_trajectoire], abscisse_locale);
|
||||
}
|
||||
|
3
Trajectoire_composees.h
Normal file
3
Trajectoire_composees.h
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
struct point_xyo_t Trajectoire_composee_get_point(struct trajectoire_t * trajectoire_composee, double abscisse);
|
||||
void Trajectoire_composee_get_longueur(struct trajectoire_t * trajectoire_composee);
|
Loading…
Reference in New Issue
Block a user