Chapitre 04
Les familles de profil
Objectifs du chapitre
- Comprendre pourquoi un profil à 7 segments prend des formes différentes selon le déplacement et les limites.
- Nommer et reconnaßtre les cinq familles de profil (NONE, ACC0, ACC1, ACC0_ACC1, VEL) à partir de la forme de l'accélération.
- Distinguer la famille (quelles phases existent) de la direction de jerk (UDDU / UDUD).
- Saisir la stratégie du solveur temps-optimal : énumérer, calculer en forme fermée, écarter, garder le plus court.
1. Quand des phases disparaissent
Au chapitre prĂ©cĂ©dent, nous avons dĂ©composĂ© le profil limitĂ© en jerk en sept segments : trois pour monter en vitesse (jerk positif, accĂ©lĂ©ration constante, jerk nĂ©gatif), une croisiĂšre Ă vitesse constante, puis trois symĂ©triques pour freiner. C'est le cas le plus riche â mais il n'apparaĂźt que pour de grands dĂ©placements sur des axes bien dĂ©gagĂ©s.
Dans la pratique, selon le dĂ©placement demandĂ© et les limites, certaines de ces sept phases ont une durĂ©e nulle. Un petit dĂ©placement n'a jamais le temps d'atteindre vâââ : la phase de croisiĂšre s'annule. Un dĂ©placement encore plus court n'atteint mĂȘme pas aâââ : les plateaux d'accĂ©lĂ©ration constante s'annulent aussi. Chaque combinaison de phases survivantes dĂ©finit une famille de profil.
đĄ Le nom de la famille est une liste de cases cochĂ©es : quelles saturations le profil rĂ©ussit-il Ă atteindre ? Plus le dĂ©placement est petit, moins on coche de cases â et plus le profil est « maigre ».
2. Les cinq familles
Regardons chaque famille par la forme de son accĂ©lĂ©ration. Le raisonnement est toujours le mĂȘme : de haut en bas, on retire d'abord la croisiĂšre, puis les plateaux d'accĂ©lĂ©ration.
- VEL â la croisiĂšre existe : la vitesse atteint vâââ et y reste un moment. C'est le profil complet, rĂ©servĂ© aux grands dĂ©placements.
- ACC0_ACC1 â pas de croisiĂšre (vâââ jamais atteinte), mais les deux plateaux d'accĂ©lĂ©ration saturent : aâââ Ă la montĂ©e et âaâââ Ă la descente.
- ACC0 â le plateau d'accĂ©lĂ©ration sature seulement Ă la phase d'accĂ©lĂ©ration (indice 0) ; la dĂ©cĂ©lĂ©ration reste triangulaire.
- ACC1 â symĂ©trique : le plateau sature seulement Ă la phase de dĂ©cĂ©lĂ©ration (indice 1) ; la montĂ©e reste triangulaire.
- NONE â aucun plateau : l'accĂ©lĂ©ration est purement triangulaire, ni aâââ ni vâââ ne sont atteints. C'est le plus petit dĂ©placement.
Les indices 0 et 1 dĂ©signent respectivement le premier bloc (accĂ©lĂ©ration) et le second bloc (dĂ©cĂ©lĂ©ration). Ainsi le nom encode exactement oĂč l'accĂ©lĂ©ration sature : ACC0 = bloc 0 saturĂ©, ACC0_ACC1 = les deux, VEL = en plus, la vitesse sature.
â Chaque famille correspond Ă un systĂšme d'Ă©quations diffĂ©rent : dĂšs qu'une phase disparaĂźt, sa durĂ©e tᔹ = 0 est fixĂ©e, et il reste moins d'inconnues. Le profil complet a sept tᔹ ; NONE n'en a plus que quatre non nuls. Chaque famille se rĂ©sout donc par une formule fermĂ©e qui lui est propre.
3. Deux directions de jerk : UDDU et UDUD
Tant que l'axe part du repos (vâ = 0, aâ = 0), l'ordre des signes de jerk est naturel : on accĂ©lĂšre (jerk +), on relĂąche (jerk â), on freine (jerk â), on relĂąche (jerk +). Mais lorsque l'Ă©tat initial n'est pas au repos â vâ â 0 ou aâ â 0 â la situation se complique.
Imaginez un axe qui file dĂ©jĂ trop vite vers sa cible : il faut d'abord ralentir, quitte Ă inverser l'accĂ©lĂ©ration, avant de pouvoir se recaler. Ou une accĂ©lĂ©ration initiale du « mauvais » signe qu'il faut d'abord rĂ©sorber. Selon les cas, l'ordonnancement des signes de jerk Ă appliquer n'est pas le mĂȘme â d'oĂč deux candidats Ă essayer, notĂ©s par la sĂ©quence des signes :
ConcrÚtement, ce sont deux ordres de signes possibles pour les phases de jerk. Pour un déplacement donné, l'un des deux mÚne à une solution valide et l'autre non (ou à une solution plus lente). Le solveur ne le sait pas d'avance : il essaie les deux.
đĄ Intuition : la famille rĂ©pond à « combien de phases survivent ? », la direction rĂ©pond à « dans quel ordre attaquer les signes de jerk pour partir de cet Ă©tat initial biscornu ? ». Deux questions indĂ©pendantes.
4. La stratégie du solveur
Comment trouver, parmi toutes ces possibilités, la trajectoire temps-optimale d'un seul axe ? Ruckig ne cherche pas « intelligemment » : il énumÚre. Pour un axe :
- parcourir toutes les combinaisons familles Ă 2 directions de jerk ;
- calculer chaque candidat en forme fermée (pas d'itération) grùce aux équations propres à sa famille ;
- Ă©carter les candidats infaisables : ceux qui violeraient une limite (vâââ, aâââ) ou qui donnent des durĂ©es de phase nĂ©gatives (physiquement impossibles) ;
- parmi les survivants, garder le profil de durée minimale.
C'est exactement ce que fait le Step 1 dĂ©taillĂ© au chapitre suivant : la solution temps-optimale d'un axe isolĂ©. Comme chaque candidat se calcule directement, l'Ă©numĂ©ration complĂšte reste trĂšs rapide â parfaitement compatible avec un cycle temps rĂ©el.
â ïž Ne confondez pas la famille (quelles phases existent : NONE, ACC0, ACC1, ACC0_ACC1, VEL) et la direction (l'ordre des signes de jerk : UDDU ou UDUD). Ce sont deux axes de recherche indĂ©pendants : le solveur explore leur produit, pas l'un ou l'autre. Un mĂȘme profil est identifiĂ© par le couple (famille, direction).
5. Dans ruckig-scl
đ§ La FC ComputeProfile1Axis est le solveur temps-optimal 1-DoF : elle Ă©numĂšre les familles Ă 2 directions de jerk, calcule chacune en forme fermĂ©e, rejette les candidats infaisables, et conserve celui de durĂ©e minimale. La FC SolveDirection traite, elle, toutes les familles pour une seule direction de jerk.
Les familles portent des noms explicites : NONE, ACC0, ACC1, ACC0_ACC1, VEL ; les deux directions sont UDDU et UDUD. Pour les Ă©tats initiaux pathologiques, il existe des familles de repli « two-step » â TwoStepNone, TwoStepAcc0, TwoStepVel, TwoStepAcc1Vel â qui rattrapent les cas oĂč l'Ă©numĂ©ration standard Ă©choue.
// SCL â schĂ©ma du solveur 1-DoF (pseudo-structure)
FOR dir := UDDU TO UDUD DO // 2 directions de jerk
#ok := "SolveDirection"(dir, ...); // essaie toutes les familles
IF #ok AND (#cand.duration < #best.duration) THEN
#best := #cand; // garde le plus court FAISABLE
END_IF;
END_FOR;
Récapitulatif
- Selon le déplacement et les limites, des phases du profil à 7 segments ont une durée nulle : chaque combinaison survivante est une famille.
- Cinq familles : VEL (croisiĂšre, vâââ atteinte) â ACC0_ACC1 (deux plateaux d'accĂ©l, pas de croisiĂšre) â ACC0 / ACC1 (un seul plateau) â NONE (accĂ©l triangulaire). Le nom encode les saturations atteintes.
- Deux directions de jerk, UDDU et UDUD : ordres de signes différents, nécessaires quand l'état initial n'est pas au repos.
- Famille et direction sont des axes de recherche indépendants ; le solveur explore leur produit.
- StratĂ©gie : Ă©numĂ©rer familles Ă directions, calculer en forme fermĂ©e, Ă©carter les infaisables et durĂ©es nĂ©gatives, garder le plus court â c'est le Step 1.
- Dans
ruckig-scl:ComputeProfile1AxisénumÚre et sélectionne ;SolveDirectionpar direction ; familles nommées + repli « two-step ».