Ajout de la configuration vitesse/accelération du trajet

This commit is contained in:
Samuel 2026-05-07 17:31:38 +02:00
parent aa5a5d2d64
commit 8e191f52a5
6 changed files with 41 additions and 24 deletions

View File

@ -132,6 +132,14 @@ Les adresses en **gras** sont celles pour lesquelles des `#define` existent qui
| 0x57 | RW | Flottant 32 bits | Angle fin rad |
| 0x58 | RW | Flottant 32 bits | Angle fin rad |
| 0x59 | RW | Flottant 32 bits | Angle fin rad |
| **0x5A** | RW | Flottant 32 bits | Vitesse max trajectoire |
| 0x5B | RW | Flottant 32 bits | Vitesse max trajectoire |
| 0x5C | RW | Flottant 32 bits | Vitesse max trajectoire |
| 0x5D | RW | Flottant 32 bits | Vitesse max trajectoire |
| 0x5E | RW | Flottant 32 bits | Acceleration trajectoire |
| 0x5F | RW | Flottant 32 bits | Acceleration trajectoire |
| 0x60 | RW | Flottant 32 bits | Acceleration trajectoire |
| 0x61 | RW | Flottant 32 bits | Acceleration trajectoire |
| **0x80** | R | flottant 32 bits | Position X en mm |
| 0x81 | R | flottant 32 bits | Position X en mm |
| 0x82 | R | flottant 32 bits | Position X en mm |

View File

@ -12,7 +12,7 @@ int Trajet_terminee(float abscisse);
float abscisse; // Position entre 0 et 1 sur la trajectoire
float position_mm; // Position en mm sur la trajectoire
float vitesse_mm_s;
float vitesse_max_trajet_mm_s=500;
float vitesse_max_trajet_mm_s;
float acceleration_mm_ss;
const float acceleration_mm_ss_obstacle = 500;
struct trajectoire_t trajet_trajectoire;
@ -24,7 +24,7 @@ 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'initialisation
void Trajet_init(int id){
Temps_init();
AsserMoteur_Init(id);
@ -90,7 +90,7 @@ enum etat_trajet_t Trajet_avance(float pas_de_temps_s){
void Trajet_stop(float pas_de_temps_s){
vitesse_mm_s = 0;
Trajet_avance(0);
Trajet_avance(pas_de_temps_s);
}
/// @brief Savoir si un trajet est terminé est trivial sauf pour les courbes de Bézier

11
main.c
View File

@ -118,6 +118,7 @@ void main(void)
enum etat_trajet_t etat_trajet=TRAJET_EN_COURS;
struct trajectoire_t trajectoire;
uint8_t mode=0;
Trajet_config(TRAJECT_CONFIG_STD);
while(1){
@ -151,6 +152,7 @@ void main(void)
mise_a_jour_vitesse_roues = false;
mise_a_jour_vitesse_robot = false;
mise_a_jour_trajectoire = false;
mise_a_jour_config_trajet = false;
// Copie des données dans la mémoire d'échange
// Et actualisation des variables "mise_a_jour_..."
@ -202,7 +204,14 @@ void main(void)
mode = 4;
uint8_t etat_action = ACTION_EN_COURS;
mise_données_dans_échange((uint8_t*) &(etat_action), sizeof(etat_action), REG_PROPULSION_ETAT_TRAJET);
Trajet_config(200, 100);
}
if(mise_a_jour_config_trajet){
struct msg_propulsion_config_trajet_t msg_propulsion_config_trajet;
get_données_reçues((uint8_t *) &msg_propulsion_config_trajet, sizeof(msg_propulsion_config_trajet), REG_PROPULSION_CONFIG_TRAJET);
printf("Trajet config: %.0f %.0f\n",msg_propulsion_config_trajet.vitesse_mm_s, msg_propulsion_config_trajet.acceleration_mm_ss);
Trajet_config(msg_propulsion_config_trajet.vitesse_mm_s, msg_propulsion_config_trajet.acceleration_mm_ss);
}
}

View File

@ -11,6 +11,7 @@ bool mise_a_jour_pwm = false;
bool mise_a_jour_vitesse_roues = false;
bool mise_a_jour_vitesse_robot = false;
bool mise_a_jour_trajectoire = false;
bool mise_a_jour_config_trajet = false;
void get_données_reçues(uint8_t * dst, unsigned int taille, unsigned int registre){
memcpy(dst, &(memoire_echange[registre]), taille);
@ -21,28 +22,31 @@ void mise_données_dans_échange(uint8_t * source, unsigned int taille, unsigned
}
void écriture_données(unsigned int adresse, uint8_t donnée){
if( adresse <= 11){
if( adresse < 11){ // 0x0B
// Position du robot
mise_a_jour_position = true;
}else if(adresse <= 12){
}else if(adresse <= 12){ // 0x0C
// Read only
}else if(adresse <= 13){
}else if(adresse <= 13){ // 0x0D
// Mode
mise_a_jour_mode = true;
}else if(adresse <= 17){
}else if(adresse <= 17){ // 0x11
// PWM moteur
mise_a_jour_pwm = true;
}else if(adresse <= 25){
}else if(adresse <= 25){ // 0x19
// Vitesse roues
mise_a_jour_vitesse_roues = true;
}else if(adresse <= 33){
}else if(adresse <= 33){ // 0x21
// Vitesse robot
mise_a_jour_vitesse_robot = true;
}else if(adresse <= 86){
}else if(adresse <= 0x59){ //
// Trajectoire
mise_a_jour_trajectoire = true;
}else if(adresse >86){
}else if(adresse <= 0x61){
// Trajet config
mise_a_jour_config_trajet = true;
}else {
// Hors mémoire
return;
}

View File

@ -12,4 +12,5 @@ extern bool mise_a_jour_mode;
extern bool mise_a_jour_pwm;
extern bool mise_a_jour_vitesse_roues;
extern bool mise_a_jour_vitesse_robot;
extern bool mise_a_jour_trajectoire;
extern bool mise_a_jour_trajectoire;
extern bool mise_a_jour_config_trajet;

View File

@ -11,11 +11,13 @@
#define REG_PROPULSION_VITESSE_ROUES 0x12
#define REG_PROPULSION_VITESSE_ROBOT 0x1A
#define REG_PROPULSION_TRAJECTOIRE 0x22
#define REG_PROPULSION_CONFIG_TRAJET 0x5A
#define REG_PROPULSION_ABSCISSE 0x8C
#define REG_PROPULSION_POSITION_CONSIGNE 0x90
#define REG_PROPULSION_VITESSE_ROUES_lecture 0x98
#define REG_PROPULSION_ETAT_TRAJET 0xA0
struct msg_propulsion_position_t{
float position_x_mm, position_y_mm, orientation_rad;
};
@ -35,16 +37,9 @@ struct msg_propulsion_vitesse_robot_t {
struct msg_trajectoire_t {
struct trajectoire_t trajectoire;
};
/*
struct trajectoire_t {
enum trajectoire_type_t type;
struct point_xy_t p1, p2, p3, p4;
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;
};*/
struct msg_propulsion_config_trajet_t {
float vitesse_mm_s, acceleration_mm_ss;
};
#endif