Début de l'algo pour attraper les cerises - ajout de la fonction de rotation autour d'un point.
This commit is contained in:
parent
5f108d3537
commit
d09ee29825
@ -1,8 +1,24 @@
|
|||||||
#include "Asser_Moteurs.h"
|
#include "Asser_Moteurs.h"
|
||||||
#include "Geometrie_robot.h"
|
#include "Geometrie_robot.h"
|
||||||
|
#include "Commande_vitesse.h"
|
||||||
|
|
||||||
|
/// @brief Commande une rotation autour d'un point dans le référentiel du robot.
|
||||||
|
/// Cette fonction déplace le torseur cinétique du centre de rotation vers le centre du robot
|
||||||
|
/// pour obtenir la vitesse de ce dernier.
|
||||||
|
/// @param rotation_rad_s : Rotation en rad/s
|
||||||
|
/// @param centre_x : centre de rotation (coordonnée X)
|
||||||
|
/// @param centre_y : centre de rotation (coordonnée Y)
|
||||||
|
void commande_rotation(double rotation_rad_s, double centre_x, double centre_y){
|
||||||
|
double vitesse_x_mm_s, vitesse_y_mm_s;
|
||||||
|
vitesse_x_mm_s = centre_y * rotation_rad_s;
|
||||||
|
vitesse_y_mm_s = -centre_x * rotation_rad_s;
|
||||||
|
|
||||||
|
commande_vitesse(vitesse_x_mm_s, vitesse_y_mm_s, rotation_rad_s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// @brief Commande de la vitesse dans le référentiel du robot
|
/// @brief Commande de la vitesse dans le référentiel du robot
|
||||||
/// Tel que décrit ici : http://poivron-robotique.fr/Robot-holonome-lois-de-commande.html
|
/// tel que décrit ici : http://poivron-robotique.fr/Robot-holonome-lois-de-commande.html
|
||||||
/// @param vitesse_x_mm_s : Vitesse x en mm/s dans le référentiel du robot
|
/// @param vitesse_x_mm_s : Vitesse x en mm/s dans le référentiel du robot
|
||||||
/// @param vitesse_y_mm_s : Vitesse y en mm/s dans le référentiel du robot
|
/// @param vitesse_y_mm_s : Vitesse y en mm/s dans le référentiel du robot
|
||||||
/// @param orientation_radian_s : Rotation en radian/s dans le référentiel du robot
|
/// @param orientation_radian_s : Rotation en radian/s dans le référentiel du robot
|
||||||
|
@ -1 +1,2 @@
|
|||||||
void commande_vitesse(double vitesse_x_mm_s, double vitesse_y_mm_s, double orientation_radian_s);
|
void commande_vitesse(double vitesse_x_mm_s, double vitesse_y_mm_s, double orientation_radian_s);
|
||||||
|
void commande_rotation(double rotation_rad_s, double centre_x, double centre_y);
|
@ -1,2 +1,3 @@
|
|||||||
#define DISTANCE_ROUES_CENTRE_MM 84.25
|
#define DISTANCE_ROUES_CENTRE_MM 84.25
|
||||||
|
#define RAYON_ROBOT 125
|
||||||
#define RACINE_DE_3 1.73205081
|
#define RACINE_DE_3 1.73205081
|
4
Strategie.h
Normal file
4
Strategie.h
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
enum etat_action_t{
|
||||||
|
ACTION_EN_COURS,
|
||||||
|
ACTION_TERMINEE
|
||||||
|
};
|
54
Strategie_prise_cerises.c
Normal file
54
Strategie_prise_cerises.c
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#include "Strategie_prise_cerises.h"
|
||||||
|
#include "Commande_vitesse.h"
|
||||||
|
#include "Geometrie.h"
|
||||||
|
#include "Geometrie_robot.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
// Rotation en rad/s pour accoster les cerises
|
||||||
|
#define ROTATION_CERISE 0.5f
|
||||||
|
|
||||||
|
double vitesse_accostage_mm_s=100;
|
||||||
|
|
||||||
|
enum etat_action_t cerise_accostage(void){
|
||||||
|
enum etat_action_t etat_action = ACTION_EN_COURS;
|
||||||
|
struct position_t contacteur_gauche, contacteur_droit;
|
||||||
|
double rotation;
|
||||||
|
|
||||||
|
static enum {
|
||||||
|
CERISE_AVANCE_DROIT,
|
||||||
|
CERISE_TOURNE_CONTACTEUR_GAUCHE,
|
||||||
|
CERISE_TOURNE_CONTACTEUR_DROIT,
|
||||||
|
CERISE_ACCOSTE
|
||||||
|
} etat_accostage=CERISE_AVANCE_DROIT;
|
||||||
|
|
||||||
|
|
||||||
|
// Position des contacteurs
|
||||||
|
contacteur_gauche.x_mm = RAYON_ROBOT;
|
||||||
|
contacteur_gauche.y_mm = 0;
|
||||||
|
|
||||||
|
contacteur_droit.x_mm = RAYON_ROBOT * cos(-M_PI/6);
|
||||||
|
contacteur_droit.y_mm = RAYON_ROBOT * sin(-M_PI/6);
|
||||||
|
|
||||||
|
switch (etat_accostage)
|
||||||
|
{
|
||||||
|
case CERISE_AVANCE_DROIT:
|
||||||
|
commande_vitesse(vitesse_accostage_mm_s * cos(-M_PI/6), vitesse_accostage_mm_s * sin(-M_PI/6), 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CERISE_TOURNE_CONTACTEUR_GAUCHE:
|
||||||
|
rotation = ROTATION_CERISE;
|
||||||
|
commande_rotation(ROTATION_CERISE, contacteur_gauche.x_mm, contacteur_gauche.y_mm);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CERISE_TOURNE_CONTACTEUR_DROIT:
|
||||||
|
rotation = ROTATION_CERISE;
|
||||||
|
commande_rotation(-ROTATION_CERISE, contacteur_droit.x_mm, contacteur_droit.y_mm);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return etat_action;
|
||||||
|
}
|
||||||
|
|
1
Strategie_prise_cerises.h
Normal file
1
Strategie_prise_cerises.h
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "Strategie.h"
|
Loading…
Reference in New Issue
Block a user