📈 Ruckig · génération de trajectoire en ligne

Chapitre 03
Anatomie du profil à 7 segments

Objectifs du chapitre

1. Les sept phases et le motif du jerk

Au chapitre précédent, nous avons vu qu'un mouvement borné en jerk se construit à partir de créneaux de jerk. Dans le cas général — départ et arrivée à l'arrêt — le mouvement complet se compose de sept segments de durées t₁, t₂, …, t₇. Sur chaque segment, le jerk est constant et vaut l'une de trois valeurs seulement : +jₘₐₓ, 0, ou −jₘₐₓ. La figure ci-dessous les annote tous.

Profil d'accélération trapézoïdal annoté t1 à t7 avec les signes de jerk +j, 0, −j, lignes plus et moins a max, et en dessous la courbe de vitesse en S avec la ligne v max, surmontés des bandeaux accélération, croisière, décélération
Figure 3.1. En haut : l'accélération, en trapèze, avec ses plateaux à ±aₘₐₓ et le signe du jerk sur chaque segment. En bas : la vitesse en S, plafonnée à vₘₐₓ pendant la croisière. Les bandeaux séparent les trois blocs accélération / croisière / décélération.

Le signe du jerk suit toujours le même enchaînement :

+j , 0 , −j , 0 , −j , 0 , +j

C'est le motif « UDDU » (Up-Down-Down-Up), qui décrit la façon dont l'accélération monte puis redescend : elle croît (+j), plafonne (0), redescend vers zéro (−j) ; on traverse la croisière ; puis elle décroît sous zéro (−j), plafonne à −aₘₐₓ (0), et remonte vers zéro (+j).

Ne mémorisez pas sept segments : mémorisez un trapèze d'accélération. Ses trois pentes montantes/plates/descendantes, répétées à l'envers pour freiner, donnent naturellement les sept phases. Le jerk n'est que la pente de ce trapèze.

2. Trois blocs : accélérer, croiser, décélérer

Les sept phases se regroupent en trois blocs lisibles sur la figure 3.1 :

3. Deux saturations, deux plateaux

Un profil complet fait apparaître deux limites qui se traduisent chacune par un plateau visible sur les courbes.

Le plateau d'accélération correspond aux segments t₂ et t₆ : l'accélération y est bloquée à ±aₘₐₓ, le jerk est nul. Le plateau de vitesse correspond au segment t₄ : la vitesse y plafonne à vₘₐₓ, accélération nulle. Le lien entre les deux passe par la durée des créneaux de jerk.

Pendant une phase de jerk constant de durée t_j, l'accélération varie linéairement de jₘₐₓ · t_j. Si le plateau d'accélération est atteint, c'est que la phase de montée a duré assez longtemps pour saturer :

aₘₐₓ = jₘₐₓ · t_j ⟹ t_j = aₘₐₓ / jₘₐₓ

t₁ (et t₃, t₅, t₇) valent donc au moins aₘₐₓ / jₘₐₓ dès que aₘₐₓ est réellement atteinte.

Sur automate, ces durées sont figées à la conception du profil, jamais recalculées dans la boucle temps réel. À chaque cycle, on ne fait qu'évaluer le profil déjà planifié — voir l'encart ruckig-scl plus bas.

4. Quand des phases s'annulent

Les sept phases ne sont pas toujours présentes. Selon la distance à parcourir, certaines durées tombent à zéro.

Ces disparitions ne sont pas des cas pathologiques : ce sont les différentes familles de profil que le planificateur doit reconnaître et calculer. Nous les étudierons systématiquement au chapitre 4.

Une durée nulle ne veut pas dire « segment absent » dans le code : le segment existe toujours, avec t = 0. Les formules d'intégration restent valides sans branchement particulier — c'est ce qui rend l'évaluation robuste.

5. Un profil de classe C²

Comme le jerk est fini partout, l'accélération est continue (elle est l'intégrale d'un signal borné), la vitesse l'est aussi, et la position également. Le profil est donc : position, vitesse et accélération sont toutes continues. Seul le jerk est discontinu — il saute entre +jₘₐₓ, 0 et −jₘₐₓ aux frontières de segments — mais il reste borné.

La continuité C² compte pour l'asservissement : une accélération continue signifie un couple/effort continu côté actionneur. Pas de à-coup instantané, moins d'excitation des modes mécaniques, moins d'usure et de bruit. C'est tout l'intérêt de limiter le jerk plutôt que l'accélération seule.

6. Durée totale du mouvement

La durée totale est simplement la somme des sept segments :

t_f = t₁ + t₂ + t₃ + t₄ + t₅ + t₆ + t₇

Cette valeur sert de référence pour la synchronisation multi-axes (chapitre 5) : tous les axes visent une même t_f.

Dans ruckig-scl, un profil est stocké dans l'UDT typeProfile, qui contient le tableau des durées t[] des 7 segments et le jerk j[] appliqué sur chacun. La fonction StateAtTime évalue le triplet (p, v, a) à un instant donné en intégrant les segments jusqu'à cet instant, tandis que IntegrateProfileStates remplit les états intermédiaires du profil.

// SCL — durée totale d'un profil
tf := 0.0;
FOR i := 0 TO 6 DO
    tf := tf + prof.t[i];
END_FOR;

Récapitulatif