Messagerie propulsion testée en réception : ça marche !
This commit is contained in:
parent
7e76fbd088
commit
b3453c2f53
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"string.h": "c"
|
"string.h": "c",
|
||||||
|
"messagerie_applicative.h": "c"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -14,6 +14,7 @@ add_executable(Modele_RPiPico
|
|||||||
communication.c
|
communication.c
|
||||||
main.c
|
main.c
|
||||||
messagerie.c
|
messagerie.c
|
||||||
|
messagerie_applicative.c
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(Modele_RPiPico
|
target_link_libraries(Modele_RPiPico
|
||||||
|
|||||||
99
Readme.md
99
Readme.md
@ -27,4 +27,101 @@ Méthode de test
|
|||||||
Difficultés rencontrées
|
Difficultés rencontrées
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
En testant avec Linux, le terminal peut manger certains caractères lorsqu'il les reçoit (0x11, 0x12 et 0x13).
|
En testant avec Linux, le terminal peut manger certains caractères lorsqu'il les reçoit (0x11, 0x12 et 0x13).
|
||||||
|
|
||||||
|
|
||||||
|
Annexe
|
||||||
|
======
|
||||||
|
|
||||||
|
Table des registres :
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
| Adresse | R/W | Type | Donnée |
|
||||||
|
| ------- | --- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| 0x00 | RW | flottant 32 bits | Position X en mm |
|
||||||
|
| 0x01 | RW | flottant 32 bits | Position X en mm |
|
||||||
|
| 0x02 | RW | flottant 32 bits | Position X en mm |
|
||||||
|
| 0x03 | RW | flottant 32 bits | Position X en mm |
|
||||||
|
| 0x04 | RW | flottant 32 bits | Position Y en mm |
|
||||||
|
| 0x05 | RW | flottant 32 bits | Position Y en mm |
|
||||||
|
| 0x06 | RW | flottant 32 bits | Position Y en mm |
|
||||||
|
| 0x07 | RW | flottant 32 bits | Position Y en mm |
|
||||||
|
| 0x08 | RW | flottant 32 bits | Orientation en radian |
|
||||||
|
| 0x09 | RW | flottant 32 bits | Orientation en radian |
|
||||||
|
| 0x0A | RW | flottant 32 bits | Orientation en radian |
|
||||||
|
| 0x0B | RW | flottant 32 bits | Orientation en radian |
|
||||||
|
| 0x0C | R | Boolean | Mouvement en cours : 1<br>Mouvement terminé : 0 |
|
||||||
|
| 0x0D | RW | uint8_t | Mode<br>0 : arrêt des moteurs<br>1 : pilotage des moteurs PWM<br>2 : pilotage en vitesse des roues<br>3 : pilotage avec la loi de commande<br>4 : Trajectoire |
|
||||||
|
| 0x0E | RW | int_16 | Commande PWM moteur gauche |
|
||||||
|
| 0x0F | RW | int_16 | Commande PWM moteur gauche |
|
||||||
|
| 0x10 | RW | int_16 | Commande PWM moteur droit |
|
||||||
|
| 0x11 | RW | int_16 | Commande PWM moteur droit |
|
||||||
|
| 0x12 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
|
||||||
|
| 0x13 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
|
||||||
|
| 0x14 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
|
||||||
|
| 0x15 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
|
||||||
|
| 0x16 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
|
||||||
|
| 0x17 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
|
||||||
|
| 0x18 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
|
||||||
|
| 0x19 | RW | Flottant 32 bits | Consigne vitesse gauche en mm/s |
|
||||||
|
| 0x1A | RW | Flottant 32 bits | Consigne d’avance du robot |
|
||||||
|
| 0x1B | RW | Flottant 32 bits | Consigne d’avance du robot |
|
||||||
|
| 0x1C | RW | Flottant 32 bits | Consigne d’avance du robot |
|
||||||
|
| 0x1D | RW | Flottant 32 bits | Consigne d’avance du robot |
|
||||||
|
| 0x1E | RW | Flottant 32 bits | Consigne de rotation du robot |
|
||||||
|
| 0x1F | RW | Flottant 32 bits | Consigne de rotation du robot |
|
||||||
|
| 0x20 | RW | Flottant 32 bits | Consigne de rotation du robot |
|
||||||
|
| 0x21 | RW | Flottant 32 bits | Consigne de rotation du robot |
|
||||||
|
| 0x22 | RW | Enum 8 bits | Trajectoire, type :<br>0 : Droite<br>1 : Circulaire<br>2 : Bézier<br>3 : Composée<br>4 : Rotation |
|
||||||
|
| 0x23 | RW | Flottant 32 bits | Point 1, X |
|
||||||
|
| 0x24 | RW | Flottant 32 bits | Point 1, X |
|
||||||
|
| 0x25 | RW | Flottant 32 bits | Point 1, X |
|
||||||
|
| 0x26 | RW | Flottant 32 bits | Point 1, X |
|
||||||
|
| 0x27 | RW | Flottant 32 bits | Point 1, Y |
|
||||||
|
| 0x28 | RW | Flottant 32 bits | Point 1, Y |
|
||||||
|
| 0x29 | RW | Flottant 32 bits | Point 1, Y |
|
||||||
|
| 0x2A | RW | Flottant 32 bits | Point 1, Y |
|
||||||
|
| 0x2B | RW | Flottant 32 bits | Point 2, X |
|
||||||
|
| 0x2C | RW | Flottant 32 bits | Point 2, X |
|
||||||
|
| 0x2D | RW | Flottant 32 bits | Point 2, X |
|
||||||
|
| 0x2E | RW | Flottant 32 bits | Point 2, X |
|
||||||
|
| 0x2F | RW | Flottant 32 bits | Point 2, Y |
|
||||||
|
| 0x30 | RW | Flottant 32 bits | Point 2, Y |
|
||||||
|
| 0x31 | RW | Flottant 32 bits | Point 2, Y |
|
||||||
|
| 0x32 | RW | Flottant 32 bits | Point 2, Y |
|
||||||
|
| 0x33 | RW | Flottant 32 bits | Point 3, X |
|
||||||
|
| 0x34 | RW | Flottant 32 bits | Point 3, X |
|
||||||
|
| 0x35 | RW | Flottant 32 bits | Point 3, X |
|
||||||
|
| 0x36 | RW | Flottant 32 bits | Point 3, X |
|
||||||
|
| 0x37 | RW | Flottant 32 bits | Point 3, Y |
|
||||||
|
| 0x38 | RW | Flottant 32 bits | Point 3, Y |
|
||||||
|
| 0x39 | RW | Flottant 32 bits | Point 3, Y |
|
||||||
|
| 0x3A | RW | Flottant 32 bits | Point 3, Y |
|
||||||
|
| 0x3B | RW | Flottant 32 bits | Point 4, X |
|
||||||
|
| 0x3C | RW | Flottant 32 bits | Point 4, X |
|
||||||
|
| 0x3D | RW | Flottant 32 bits | Point 4, X |
|
||||||
|
| 0x3E | RW | Flottant 32 bits | Point 4, X |
|
||||||
|
| 0x3F | RW | Flottant 32 bits | Point 4, Y |
|
||||||
|
| 0x40 | RW | Flottant 32 bits | Point 4, Y |
|
||||||
|
| 0x41 | RW | Flottant 32 bits | Point 4, Y |
|
||||||
|
| 0x42 | RW | Flottant 32 bits | Point 4, Y |
|
||||||
|
| 0x43 | RW | Flottant 32 bits | orientation_debut_rad |
|
||||||
|
| 0x44 | RW | Flottant 32 bits | orientation_debut_rad |
|
||||||
|
| 0x45 | RW | Flottant 32 bits | orientation_debut_rad |
|
||||||
|
| 0x46 | RW | Flottant 32 bits | orientation_debut_rad |
|
||||||
|
| 0x47 | RW | Flottant 32 bits | orientation_fin_rad |
|
||||||
|
| 0x48 | RW | Flottant 32 bits | orientation_fin_rad |
|
||||||
|
| 0x49 | RW | Flottant 32 bits | orientation_fin_rad |
|
||||||
|
| 0x4A | RW | Flottant 32 bits | orientation_fin_rad |
|
||||||
|
| 0x4B | RW | Flottant 32 bits | rayon mm |
|
||||||
|
| 0x4C | RW | Flottant 32 bits | rayon mm |
|
||||||
|
| 0x4D | RW | Flottant 32 bits | rayon mm |
|
||||||
|
| 0x4E | RW | Flottant 32 bits | rayon mm |
|
||||||
|
| 0x4F | RW | Flottant 32 bits | Angle début rad |
|
||||||
|
| 0x50 | RW | Flottant 32 bits | Angle début rad |
|
||||||
|
| 0x51 | RW | Flottant 32 bits | Angle début rad |
|
||||||
|
| 0x52 | RW | Flottant 32 bits | Angle début rad |
|
||||||
|
| 0x53 | RW | Flottant 32 bits | Angle fin rad |
|
||||||
|
| 0x54 | RW | Flottant 32 bits | Angle fin rad |
|
||||||
|
| 0x55 | RW | Flottant 32 bits | Angle fin rad |
|
||||||
|
| 0x56 | RW | Flottant 32 bits | Angle fin rad |
|
||||||
74
main.c
74
main.c
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "communication.h"
|
#include "communication.h"
|
||||||
#include "messagerie.h"
|
#include "messagerie.h"
|
||||||
|
#include "messagerie_applicative.h"
|
||||||
|
|
||||||
|
|
||||||
void stdio_usb_out_chars(const char *buf, int length);
|
void stdio_usb_out_chars(const char *buf, int length);
|
||||||
@ -17,50 +18,8 @@ void stdio_usb_out_chars(const char *buf, int length);
|
|||||||
#define NB_MORCEAUX 100
|
#define NB_MORCEAUX 100
|
||||||
|
|
||||||
absolute_time_t envoie_nb_char(int nb_char);
|
absolute_time_t envoie_nb_char(int nb_char);
|
||||||
uint8_t memoire_echange[200];
|
|
||||||
char chaine_envoie[10000];
|
char chaine_envoie[10000];
|
||||||
|
|
||||||
bool mise_a_jour_position = false;
|
|
||||||
bool mise_a_jour_mode = false;
|
|
||||||
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;
|
|
||||||
|
|
||||||
|
|
||||||
void écriture_données(unsigned int adresse, uint8_t donnée){
|
|
||||||
if( adresse <= 11){
|
|
||||||
// Position du robot
|
|
||||||
mise_a_jour_position = true;
|
|
||||||
}else if(adresse <= 12){
|
|
||||||
// Read only
|
|
||||||
|
|
||||||
}else if(adresse <= 13){
|
|
||||||
// Mode
|
|
||||||
mise_a_jour_mode = true;
|
|
||||||
}else if(adresse <= 17){
|
|
||||||
// PWM moteur
|
|
||||||
mise_a_jour_pwm = true;
|
|
||||||
}else if(adresse <= 25){
|
|
||||||
// Vitesse roues
|
|
||||||
mise_a_jour_vitesse_roues = true;
|
|
||||||
}else if(adresse <= 33){
|
|
||||||
// Vitesse robot
|
|
||||||
mise_a_jour_vitesse_robot = true;
|
|
||||||
}else if(adresse <= 86){
|
|
||||||
// Trajectoire
|
|
||||||
mise_a_jour_trajectoire = true;
|
|
||||||
}else if(adresse >86){
|
|
||||||
// Hors mémoire
|
|
||||||
printf("adresse = %d\n", adresse);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
memoire_echange[adresse] = donnée;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -190,18 +149,45 @@ void main(void)
|
|||||||
mise_a_jour_vitesse_roues = false;
|
mise_a_jour_vitesse_roues = false;
|
||||||
mise_a_jour_vitesse_robot = false;
|
mise_a_jour_vitesse_robot = false;
|
||||||
mise_a_jour_trajectoire = false;
|
mise_a_jour_trajectoire = false;
|
||||||
|
|
||||||
// Copie des données dans la mémoire d'échange
|
// Copie des données dans la mémoire d'échange
|
||||||
|
// Et actualisation des variables "mise_a_jour_..."
|
||||||
for (int num_octet=0; num_octet<message_applicatif.taille_donnees; num_octet++){
|
for (int num_octet=0; num_octet<message_applicatif.taille_donnees; num_octet++){
|
||||||
écriture_données(message_applicatif.adresse_registre + num_octet, message_applicatif.donnees_applicative.donnees[num_octet]);
|
écriture_données(message_applicatif.adresse_registre + num_octet, message_applicatif.donnees_applicative.donnees[num_octet]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mise_a_jour_position){
|
if(mise_a_jour_position){
|
||||||
struct msg_propulsion_position_t msg_propulsion_position;
|
struct msg_propulsion_position_t msg_propulsion_position;
|
||||||
|
|
||||||
memcpy(&msg_propulsion_position, &(memoire_echange[0]), sizeof(msg_propulsion_position));
|
get_données_reçues((uint8_t *) &msg_propulsion_position, sizeof(msg_propulsion_position), REG_PROPULSION_POSITION);
|
||||||
printf("mise à jour de la position, x:%2.2f, y:%2.2f, orientation: %2.2f\n", msg_propulsion_position.position_x_mm,
|
printf("mise à jour de la position, x:%2.2f, y:%2.2f, orientation: %2.2f\n", msg_propulsion_position.position_x_mm,
|
||||||
msg_propulsion_position.position_y_mm, msg_propulsion_position.orientation_rad);
|
msg_propulsion_position.position_y_mm, msg_propulsion_position.orientation_rad);
|
||||||
}
|
}
|
||||||
|
if(mise_a_jour_mode){
|
||||||
|
uint8_t mode;
|
||||||
|
get_données_reçues(&mode, sizeof(mode), REG_PROPULSION_MODE);
|
||||||
|
printf("mode:%d\n", mode);
|
||||||
|
}
|
||||||
|
if(mise_a_jour_pwm){
|
||||||
|
struct msg_propulsion_pwm_t msg_propulsion_pwm;
|
||||||
|
get_données_reçues((uint8_t *) &msg_propulsion_pwm, sizeof(msg_propulsion_pwm), REG_PROPULSION_PWM);
|
||||||
|
printf("pwm_gauche:%d, pwm_droit:%d\n", msg_propulsion_pwm.pwm_gauche, msg_propulsion_pwm.pwm_gauche);
|
||||||
|
}
|
||||||
|
if(mise_a_jour_vitesse_roues){
|
||||||
|
struct msg_propulsion_vitesse_roues_t msg_propulsion_vitesse_roues;
|
||||||
|
get_données_reçues((uint8_t *) &msg_propulsion_vitesse_roues, sizeof(msg_propulsion_vitesse_roues), REG_PROPULSION_VITESSE_ROUES);
|
||||||
|
printf("vitesse_roue_gauche:%f, vitesse_roue_gauche:%d\n", msg_propulsion_vitesse_roues.vitesse_gauche_mm_s, msg_propulsion_vitesse_roues.vitesse_droite_mm_s);
|
||||||
|
}
|
||||||
|
if(mise_a_jour_vitesse_robot){
|
||||||
|
struct msg_propulsion_vitesse_robot_t msg_propulsion_vitesse_robot;
|
||||||
|
get_données_reçues((uint8_t *) &msg_propulsion_vitesse_robot, sizeof(msg_propulsion_vitesse_robot), REG_PROPULSION_VITESSE_ROBOT);
|
||||||
|
printf("avance_robot (mm/s) : %f, rotation (rad/s): %f\n", msg_propulsion_vitesse_robot.avance_mm_s,
|
||||||
|
msg_propulsion_vitesse_robot.rotation_rad_s);
|
||||||
|
|
||||||
|
}
|
||||||
|
if(mise_a_jour_trajectoire){
|
||||||
|
// Oh la la !
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
50
messagerie_applicative.c
Normal file
50
messagerie_applicative.c
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#include <string.h>
|
||||||
|
#include "messagerie_applicative.h"
|
||||||
|
|
||||||
|
uint8_t memoire_echange[200];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool mise_a_jour_position = false;
|
||||||
|
bool mise_a_jour_mode = false;
|
||||||
|
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;
|
||||||
|
|
||||||
|
void get_données_reçues(uint8_t * dst, unsigned int taille, unsigned int registre){
|
||||||
|
memcpy(dst, &(memoire_echange[registre]), taille);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void écriture_données(unsigned int adresse, uint8_t donnée){
|
||||||
|
if( adresse <= 11){
|
||||||
|
// Position du robot
|
||||||
|
mise_a_jour_position = true;
|
||||||
|
}else if(adresse <= 12){
|
||||||
|
// Read only
|
||||||
|
|
||||||
|
}else if(adresse <= 13){
|
||||||
|
// Mode
|
||||||
|
mise_a_jour_mode = true;
|
||||||
|
}else if(adresse <= 17){
|
||||||
|
// PWM moteur
|
||||||
|
mise_a_jour_pwm = true;
|
||||||
|
}else if(adresse <= 25){
|
||||||
|
// Vitesse roues
|
||||||
|
mise_a_jour_vitesse_roues = true;
|
||||||
|
}else if(adresse <= 33){
|
||||||
|
// Vitesse robot
|
||||||
|
mise_a_jour_vitesse_robot = true;
|
||||||
|
}else if(adresse <= 86){
|
||||||
|
// Trajectoire
|
||||||
|
mise_a_jour_trajectoire = true;
|
||||||
|
}else if(adresse >86){
|
||||||
|
// Hors mémoire
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
memoire_echange[adresse] = donnée;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
12
messagerie_applicative.h
Normal file
12
messagerie_applicative.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
void écriture_données(unsigned int adresse, uint8_t donnée);
|
||||||
|
void get_données_reçues(uint8_t * dst, unsigned int taille, unsigned int registre);
|
||||||
|
|
||||||
|
extern bool mise_a_jour_position;
|
||||||
|
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;
|
||||||
@ -3,10 +3,25 @@
|
|||||||
#define USB_ID_PROPULSION 'P'
|
#define USB_ID_PROPULSION 'P'
|
||||||
|
|
||||||
#define REG_PROPULSION_POSITION 0x00
|
#define REG_PROPULSION_POSITION 0x00
|
||||||
|
#define REG_PROPULSION_MODE 0x0D
|
||||||
|
#define REG_PROPULSION_PWM 0x0E
|
||||||
|
#define REG_PROPULSION_VITESSE_ROUES 0x12
|
||||||
|
#define REG_PROPULSION_VITESSE_ROBOT 0x1A
|
||||||
|
|
||||||
struct msg_propulsion_position_t{
|
struct msg_propulsion_position_t{
|
||||||
float position_x_mm, position_y_mm, orientation_rad;
|
float position_x_mm, position_y_mm, orientation_rad;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct msg_propulsion_pwm_t{
|
||||||
|
uint16_t pwm_gauche, pwm_droit;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct msg_propulsion_vitesse_roues_t{
|
||||||
|
float vitesse_gauche_mm_s, vitesse_droite_mm_s;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct msg_propulsion_vitesse_robot_t {
|
||||||
|
float avance_mm_s, rotation_rad_s;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
Loading…
Reference in New Issue
Block a user