Chapitre 07
Multi-axes & synchronisation
Objectifs du chapitre
- Comprendre pourquoi plusieurs axes indépendants finissent leur mouvement à des instants différents.
- Maßtriser la synchronisation temporelle (Time) : une durée commune t_sync, obtenue par re-cadencement de tous les axes.
- Distinguer la synchronisation de phase (Phase) â mouvement en ligne droite dans l'espace articulaire â de la simple synchro temporelle.
- ConnaĂźtre les modes de synchronisation offerts par ruckig-scl (SYNC_TIME, Phase, No, per-DoF, TimeIfNecessary, Discrete).
1. Le problĂšme multi-axes
Jusqu'ici nous avons rĂ©solu la trajectoire d'un seul axe. Un robot ou une machine en pilote plusieurs â dans ruckig-scl, jusqu'Ă 4 degrĂ©s de libertĂ© (DoF). Chaque axe possĂšde ses propres limites (vâââ, aâââ, jâââ) et son propre dĂ©placement Ă parcourir. Le Step 1 (chapitre 5) donne pour chaque axe d sa durĂ©e temps-optimale t_min,d.
Or ces durĂ©es n'ont aucune raison d'ĂȘtre Ă©gales : un axe qui parcourt un grand angle mettra plus longtemps qu'un axe qui bouge Ă peine. Sans coordination, chaque axe atteint sa cible Ă un instant diffĂ©rent â le mouvement d'ensemble semble dĂ©sordonnĂ©, et le chemin suivi dans l'espace articulaire est imprĂ©visible.
2. Synchronisation temporelle (Time)
C'est le mode par défaut. L'idée : imposer à tous les axes une durée commune t_sync, puis re-cadencer chaque axe pour qu'il consomme exactement cette durée. On applique alors à chaque axe le Step 2 (chapitre 6), qui recalcule un profil limité en jerk s'exécutant en une durée imposée.
La durĂ©e commune ne peut Ă©videmment pas ĂȘtre plus courte que le plus lent des axes : celui-ci est dĂ©jĂ Ă son temps-optimal et ne peut pas aller plus vite. On l'appelle l'axe limitant, et c'est lui qui fixe t_sync. Tous les autres, plus rapides, sont ralentis jusqu'Ă cette durĂ©e â c'est ce que montre le panneau droit de la figure 7.1 : l'axe 1, qui finissait tĂŽt, adopte un profil plus doux et arrive dĂ©sormais en mĂȘme temps que l'axe 2.
Un dĂ©tail crucial vient du Step 2 : rappelons qu'un axe possĂšde des intervalles de durĂ©e bloquĂ©s (chapitre 5) â des durĂ©es irrĂ©alisables pour ses limites de jerk. La durĂ©e commune doit donc ĂȘtre valide pour tous les axes Ă la fois : on prend le maximum des t_min, mais en Ă©vitant les intervalles bloquĂ©s de chaque axe.
â La durĂ©e de synchronisation satisfait :
On part de max_d(t_min,d) ; si cette valeur tombe dans un intervalle bloqué d'un axe, on l'augmente jusqu'à la premiÚre durée réalisable par tous les axes. Chaque axe est ensuite re-cadencé à ce t_sync par le Step 2.
đĄ Intuition : synchroniser, c'est ralentir les axes rapides pour attendre le plus lent â jamais accĂ©lĂ©rer le plus lent au-delĂ de son temps-optimal. L'axe limitant donne le tempo ; les autres s'alignent sur lui.
3. Synchronisation de phase (Phase)
La synchro temporelle garantit que tous les axes arrivent ensemble, mais pas qu'ils suivent la mĂȘme forme de mouvement : entre le dĂ©part et l'arrivĂ©e, le chemin dans l'espace articulaire peut se courber. Pour certaines applications â chemins prĂ©visibles, absence de dĂ©passement de trajectoire â on prĂ©fĂšre un mouvement en ligne droite dans l'espace articulaire.
C'est possible lorsque les dĂ©placements de tous les axes sont colinĂ©aires : leurs vecteurs d'Ă©cart d'Ă©tat pointent dans la mĂȘme direction (Ă un facteur d'Ă©chelle prĂšs). Dans ce cas, tous les axes suivent le mĂȘme profil temporel â celui de l'axe limitant â simplement mis Ă l'Ă©chelle par le ratio de dĂ©placement de chaque axe. Comme leurs positions restent proportionnelles Ă chaque instant, la trajectoire rĂ©sultante est une droite.
ConcrĂštement, chaque axe reçoit le timing de l'axe limitant, et son jerk est mis Ă l'Ă©chelle par le ratio de son dĂ©placement Ă celui de l'axe limitant. Les profils sont ainsi des copies homothĂ©tiques : mĂȘmes instants de commutation, amplitudes proportionnelles.
Si la condition de colinĂ©aritĂ© n'est pas remplie â les axes doivent partir dans des directions incompatibles â la phase est impossible et Ruckig se replie automatiquement sur la synchro Time. On ne perd donc jamais l'arrivĂ©e simultanĂ©e ; on renonce seulement Ă la ligne droite.
4. Pas de synchronisation, et les autres modes
Le mode No renonce à toute coordination : chaque axe court à son propre t_min, indépendamment des autres. La durée de la trajectoire globale vaut alors simplement le max des durées d'axe, mais les axes rapides atteignent leur cible en avance et y restent immobiles en attendant les autres.
Ruckig propose encore quelques variantes :
- per-DoF â chaque axe se voit attribuer son propre mode de synchronisation, au lieu d'un mode global unique.
- TimeIfNecessary â synchronisation temporelle appliquĂ©e seulement si la cible bouge ; un axe dĂ©jĂ Ă destination n'impose rien.
- Discrete â t_sync est arrondi au multiple supĂ©rieur du temps de cycle, pour caler les arrivĂ©es sur la grille temporelle de l'automate.
â±ïž La synchronisation ne coĂ»te pas d'itĂ©ration : une fois t_sync dĂ©terminĂ©, chaque axe est traitĂ© par le Step 2 en forme fermĂ©e. Le surcoĂ»t par cycle reste bornĂ© et proportionnel au nombre de DoF (†4) â parfaitement compatible avec un cycle temps rĂ©el.
đ§ Dans ruckig-scl, la FC Synchronize calcule la durĂ©e commune t_sync â„ max(t_min) en Ă©vitant les intervalles bloquĂ©s de chaque axe (d'oĂč le Block introduit au chapitre 5), puis re-cadence chaque axe par le Step 2. La FC PhaseSynchronize gĂšre la synchro « Phase » : elle teste la colinĂ©aritĂ© des Ă©carts d'Ă©tat par axe ; si colinĂ©aires, chaque axe suit le timing de l'axe limitant avec le jerk mis Ă l'Ă©chelle par le ratio de dĂ©placement (mouvement en ligne droite dans l'espace articulaire) ; sinon elle se replie sur Time.
Les modes sont des constantes INT dans le DB dbRuckigConst : SYNC_TIME (défaut, tous arrivent ensemble), Phase, No (chaque axe indépendant à son t_min), plus per-DoF (chaque axe son propre mode), TimeIfNecessary (synchronisé seulement si la cible bouge) et Discrete (t_sync arrondi au multiple supérieur de cycleTime). Le tout est limité à 4 DoF.
Récapitulatif
- Plusieurs axes (†4 DoF) ont chacun leur t_min : sans coordination, ils finissent à des instants différents.
- Time (dĂ©faut) : durĂ©e commune t_sync = max_d(t_min,d), choisie hors des intervalles bloquĂ©s de tous les axes, puis Step 2 sur chaque axe â arrivĂ©e simultanĂ©e. L'axe limitant impose le tempo.
- Phase : si les dĂ©placements sont colinĂ©aires, tous les axes suivent le profil de l'axe limitant, jerk mis Ă l'Ă©chelle par le ratio de dĂ©placement â ligne droite dans l'espace articulaire. Sinon, repli sur Time.
- No : chaque axe à son t_min, durée globale = le max. Variantes : per-DoF, TimeIfNecessary, Discrete.
- Principe : synchroniser = ralentir les rapides, jamais forcer le plus lent au-delĂ de son temps-optimal.
- Dans
ruckig-scl:Synchronize,PhaseSynchronize, constantes dansdbRuckigConst.