Qu'est-ce que le profil trapèze vitesse ?


Le profil trapèze vitesse est une méthode de contrôle de mouvement qui permet d'optimiser l'accélération et la décélération des moteurs pour un mouvement fluide et précis.

Ce profil divise le mouvement en trois phases : une phase d'accélération, une phase à vitesse constante, et une phase de décélération. Cette approche est particulièrement utile pour les robots bipèdes où les mouvements doivent être précis et contrôlés pour maintenir l'équilibre.

Le savais-tu ?

Le profil trapèze est largement utilisé en robotique car il réduit les à-coups mécaniques et les oscillations, tout en minimisant la consommation d'énergie.

Principe du trapèze vitesse

Le profil trapèze se caractérise par trois paramètres principaux :

  • Vitesse maximale (Vmax)
  • Accélération (A)
  • Décélération (D)

$$ t_{acc} = \frac{V_{max}}{A} \quad t_{dec} = \frac{V_{max}}{D} $$

Pour un robot bipède, ces paramètres doivent être soigneusement choisis en fonction de la dynamique du robot, de sa masse et des contraintes mécaniques des articulations.

Application au robot bipède

Pour un robot bipède, le profil trapèze vitesse peut être utilisé pour contrôler :

  • Les mouvements des articulations (hanches, genoux, chevilles)
  • La transition du poids d'une jambe à l'autre
  • Les mouvements de marche ou de rotation

L'implémentation nécessite de synchroniser parfaitement les moteurs des deux jambes pour maintenir l'équilibre pendant toutes les phases du mouvement.

Implémentation du trapèze vitesse (Arduino/C++)
class TrapezoidalProfile {
public:
    TrapezoidalProfile(float maxVel, float accel, float decel) 
        : Vmax(maxVel), A(accel), D(decel) {}
    
    void compute(float distance) {
        // Calcul des temps d'accélération et décélération
        t_acc = Vmax / A;
        t_dec = Vmax / D;
        
        // Distance nécessaire pour atteindre Vmax
        d_acc = 0.5 * A * t_acc * t_acc;
        d_dec = 0.5 * D * t_dec * t_dec;
        
        if (d_acc + d_dec > distance) {
            // Profil triangulaire (pas de phase à vitesse constante)
            Vmax = sqrt((2 * distance * A * D) / (A + D));
            t_acc = Vmax / A;
            t_dec = Vmax / D;
            t_const = 0;
        } else {
            // Profil trapèze classique
            t_const = (distance - d_acc - d_dec) / Vmax;
        }
    }
    
    float getVelocity(float t) {
        if (t < t_acc) return A * t;
        else if (t < t_acc + t_const) return Vmax;
        else if (t < t_acc + t_const + t_dec) return Vmax - D * (t - t_acc - t_const);
        else return 0;
    }

private:
    float Vmax, A, D;
    float t_acc = 0, t_dec = 0, t_const = 0;
    float d_acc = 0, d_dec = 0;
};

Intégration dans le contrôle des moteurs du bipède

Contrôle des articulations

Chaque articulation peut être contrôlée avec son propre profil trapèze, synchronisé avec les autres moteurs.

Exemple pratique :

Pour un pas avant, la hanche et le genou de la jambe avant suivent un profil trapèze pendant que la jambe arrière maintient l'équilibre.

Objectif : Atteindre la position cible en minimisant les oscillations et en conservant l'équilibre

Transition de poids

Le transfert du poids d'une jambe à l'autre doit suivre un profil précis pour éviter les chocs.

Objectif : Transition fluide avec accélération et décélération contrôlées

Références

  • Craig, J. J. (2005). Introduction to Robotics: Mechanics and Control. Pearson Education.
  • Siciliano, B., Sciavicco, L., Villani, L., & Oriolo, G. (2009). Robotics: Modelling, Planning and Control. Springer.
  • Spong, M. W., Hutchinson, S., & Vidyasagar, M. (2006). Robot Modeling and Control. Wiley.