Déplacements

Cette page explique brièvement le fonctionnement des déplacements du robot au niveau informatique. La première partie résume le code permettant au robot d'effectuer une trajectoire en passant par plusieurs points. La deuxième explique comment utiliser tout le soft déjà mis en place pour effectuer des déplacements en quelques lignes de code.

A faire

Coder un déplacement

Voici un extrait de code demandant au robot de venir se déplacer en un point :

/* Variable pour décrire le déplacement */
Point point;
 
/* Paramétrage de la vitesse maximale pendant le déplacement */
point.vitesse_max_lin = 0.4f;
 
/* On veut aller en (0.3, 0.0) en m */
point.x = 0.3f;
point.y = 0.0f;
 
/* Impose : un freinage une fois arrivé au point 
            une marche avant
            d'utiliser la vitesse maximale paramétrée */
point.options = AVEC_FREINAGE | SENS_AVANT | AVEC_VITESSE_MAX;
 
/* Ajoute le point dans la file d'attente */
xQueueSend( PointConsigneQueue, &point, portMAX_DELAY );

Le type Point est une structure en C définie dans le fichier “deplacement_task.h” :

typedef struct
{
   float x;
   float y;
   float angle;
   float vitesse_max_lin;
   uint16_t options;
   int8_t pointIA;
   portTickType timer;
   float rayon_virage;
   float angle_virage;
   uint8_t iterations;
} Point;

Elle comporte plusieurs variables permettant de décrire un déplacement que l'on veut effectuer avec le robot. Voici l'utilité de chacun :

  • x et y : définissent la position vers laquelle on veut envoyer le robot dans le repère de la table
  • angle : angle dans lequel on veut orienter le robot dans le repère de la table (utilisé uniquement lors de rotations sur place)
  • vitesse_max_lin : pour spécifier une vitesse linéaire inférieure à la vitesse maximale du robot
  • options : variable extrêmement importante qui permet de choisir plein d'options sur la trajectoire à effectuer (cf description plus bas)
  • timer : variable qui va permettre d'imposer un déplacement pendant un certain temps
  • rayon_virage : paramètre pour faire des virages stylés
  • angle_virage : paramètre pour faire des virages stylés
  • iterations : utilisé lorsqu'on demande de faire des tours sur soi-même

Description des options de déplacement :

Par défaut, pour chaque option possible, si on ne spécifie rien, c'est le premier lister ci-dessous qui est utilisé.

  • freinage
    • SANS_FREINAGE : le robot se déplacera jusqu'au point demandé à vitesse constante
    • AVEC_FREINAGE : le robot se déplacera pour s'arrêter sur le point demandé
  • deplacement
    • MOUVEMENT_DEPLACEMENT : déplacement standard, combinant translation et rotation
    • MOUVEMENT_ROTATION_SEULE : pour positionner le robot à un certain angle, sans se déplacer
    • MOUVEMENT_TOURS : pour faire des tour sur soi-même (à utiliser uniquement pour régler l'asservissement)
  • sens
    • SENS_AVANT : pour que le robot effectue le déplacement en marche avant
    • SENS_ARRIERE : pour que le robot effectue le déplacement en marche arrière
  • pré-rotation
    • SANS_PRE_ROTATION : le robot ne s'oriente pas vers le point demandé avant de se déplacer
    • AVEC_PRE_ROTATION : le s'oriente vers le point demandé avant de se déplacer
  • post-rotation
    • SANS_POST_ROTATION :
    • AVEC_POST_ROTATION : une fois arrivé au point demandé, le robot s'oriente vers l'angle demandé
  • vitesse maximale
    • SANS_VITESSE_MAX : pour ne pas utiliser la variable de vitesse maximale de la structure
    • AVEC_VITESSE_MAX : pour utiliser la variable de vitesse maximale de la structure
  • détection
    • SANS_DETECTION : pour ignorer les adversaires
    • AVEC_DETECTION : le robot s'arrêtera en cas de présence d'un robot adverse
  • timer
    • SANS_TIMER : pour ignorer la variable timer
    • AVEC_TIMER : pour mettre un timeout sur le déplacement
  • stop
    • SANS_STOP : standard
    • AVEC_STOP : ignore les autres paramètres et arrête immédiatement le robot
  • verrouillage
    • SANS_VERROUILLAGE : rien
    • AVEC_VERROUILLAGE : si on a demandé un STOP, verrouille complétement les moteurs
  • virage
    • SANS_VIRAGE : standard
    • AVEC_VIRAGE : pour effectuer des virages stylés en utilisant les variables rayon_virage et angle_virage