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 "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
|
||||
/// 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_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
|
||||
|
@ -1 +1,2 @@
|
||||
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 RAYON_ROBOT 125
|
||||
#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