Cinématique avec axes "redondants" (+présentation)
- vincentECN
- Offline
- Junior Member
- Posts: 25
- Thank you received: 0
Je suis en 3ème année de doctorat à l'IRCCyN (Ecole Centrale de Nantes) et pour faire simple, je travaille sur des problématiques d'extension des capacités d'une commande numérique (rendre plus intelligent, que ça soit plus qu'un simple éxécutant etc...)
Plus concrètement, je voudrais avoir la possibilité de prendre en compte des données extérieures durant l'usinage d'une pièce afin de modifier la trajectoire en temps réel.
Nous avons une Cincinnati Millacron Sabre entièrement fonctionnelle avec LinuxCNC (avec carte Motenc).
Cela fait un moment que je parcours ce forum, mais voici le moment de mon premier message, en Français pour commencer (je peux converser en anglais bien sûr, mais je trouvais ça plus simple de commencer par là. ).
J'ai une demande un peu particulière :
Je voudrais créer une cinematique "fictive" de notre machine (3 axes, X/Y/Z cinématique triviale) en ajoutant virtuellement 2 axes au sein de LinuxCNC (U et V) qui ne seront pas des axes pilotables mais qui modifierons les valeurs de positions de X et Y. En quelque sorte, je voudrai feinter la machine pour qu'elle modifie sa trajectoire, par l'intermédiaire d'entrée U et V. Au départ, juste des décalages à additionner sur X et Y (pour traduire une erreur de position de la pièce)
Plusieurs questions :
- Avez vous déjà vu des cas d'utilisation de LinuxCNC avec des axes non pilotable/redondants, qui servent juste de points d'entrée pour modifier le feedback d'autres axes ?
- Est-ce que je peux définir une entrée manuellement (par exemple joints[6] = 10) ?
- Je compte modifier le trivkins.c de la manière suivante (en conservant les autres lignes) :
Cinematique directe
double x = joint[0] + joints [6];
double y = joint[1] + joints [7];
pos->tran.x = x;
pos->tran.y = y;
.
.
.
pos->u = "données exterieures";
pos->v = "données exterieures"
Cinematique inverse
joints[0] = pos->tran.x - pos->tran.u;
joints[1] = pos->tran.y - pos->tran.v;
Est ce cela peut marcher ?
Il y a t'il d'autre fichier à modifier ?
Est-ce que je pourrais mettre à jour en temps réel les données sur les axes fictifs ?
N'hésitez pas à me poser des questions (anglais ou français).
Feel free to ask some questions in english.
Je suis resté assez vague, mais je peux préciser un peu + l'experience que je veux réaliser.
Merci d'avance pour vos réponses !
Please Log in or Create an account to join the conversation.
- vincentECN
- Offline
- Junior Member
- Posts: 25
- Thank you received: 0
Please Log in or Create an account to join the conversation.
- Avez vous déjà vu des cas d'utilisation de LinuxCNC avec des axes non pilotable/redondants, qui servent juste de points d'entrée pour modifier le feedback d'autres axes ?
I have considered doing this with my milling machine which has a tilting head that is not motorised.
Any 5-axis kinematics should work, just loop-back the position command of the axis to the feedback in HAL, without passing through any motor stage.
Then you can set the values of the imaginary axes either by jogging or G0 commands.
git.linuxcnc.org/gitweb?p=linuxcnc.git;a...1f;hb=refs/heads/2.6
might be a useful starting point.
Please Log in or Create an account to join the conversation.
- vincentECN
- Offline
- Junior Member
- Posts: 25
- Thank you received: 0
In your case, what do you do when you set a new value of the imaginary axe ? Does it change the behavior of other axe ?
If I want to update in real time the value of the imaginary axe, I’ve have to modify hal file only ? Or I need also to modify trivkins.c and rebuilt ?
Please Log in or Create an account to join the conversation.
- vincentECN
- Offline
- Junior Member
- Posts: 25
- Thank you received: 0
www.linuxcnc.org/index.php/french/forum/...guration/28498#52527
Please Log in or Create an account to join the conversation.
In that case the external servo system (which consists of the operator and a spanner, with visual feedback on the degree markings) has to ensure that the actual head angle and the internal value in LinuxCNC are in agreement.In your case, what do you do when you set a new value of the imaginary axe ?
That depends on the setup.Does it change the behavior of other axe ?
In the setup that I was going to configure I would have a B-axis (rotational axis parallel to the Y axis). Then the kinematics would be set up such that a straight-feed in Z would move equal distances in X and Z. This means that the configuration could be used to drill angled holes, or machine flat faces at an angle to the table.
In effect the XYZ coordinate system remains orthogonal to the spindle axis, and movements in the rotated XYZ space are achieved automatically through coordinated movements of the machine ways.
You can see this in action on a machine that does have an active B-axis here:
Cinci at MPM
You can't use trvkins for a non-cartesian machine. You would need to use something like the 5axiskins in the demo config I pointed to.If I want to update in real time the value of the imaginary axe, I’ve have to modify hal file only ? Or I need also to modify trivkins.c and rebuilt ?
Please Log in or Create an account to join the conversation.
- vincentECN
- Offline
- Junior Member
- Posts: 25
- Thank you received: 0
You can't use trvkins for a non-cartesian machine. You would need to use something like the 5axiskins in the demo config I pointed to.If I want to update in real time the value of the imaginary axe, I’ve have to modify hal file only ? Or I need also to modify trivkins.c and rebuilt ?
But in my case, i have a cartesian machine (XYZ).
It's quite difficult to explain but in fact, i want to add imaginary axis U and V parrallel to X and Y. That i want is that these axis U and V will not be be controllable by LinuxCNC, but affect the feedback position of X and Y, to force the machine to compensate the gap.
Experimentally, i want to disturb the position of a workpiece with an external linear table which give the effetcive displacement (by encoder) to linuxcnc, and after i want that the machine compense this disturbance by only move X and Y (not U and V).
Please Log in or Create an account to join the conversation.
Experimentally, i want to disturb the position of a workpiece with an external linear table which give the effetcive displacement (by encoder) to linuxcnc, and after i want that the machine compense this disturbance by only move X and Y (not U and V).
In that case I wouldn't use kinematics at all.
Just have encoder counters for X and Y and also U and V, and then (in HAL) add X-position to U position and Y position to V position, and use that value as the feedback to the PID system.
Please Log in or Create an account to join the conversation.
- vincentECN
- Offline
- Junior Member
- Posts: 25
- Thank you received: 0
Experimentally, i want to disturb the position of a workpiece with an external linear table which give the effetcive displacement (by encoder) to linuxcnc, and after i want that the machine compense this disturbance by only move X and Y (not U and V).
In that case I wouldn't use kinematics at all.
Just have encoder counters for X and Y and also U and V, and then (in HAL) add X-position to U position and Y position to V position, and use that value as the feedback to the PID system.
Ok ! It seems more simple that I've thought. (I was afraid of rebuild LinuxCNC).
So, for HAL, you mean the file like in attachement, and i have to do something with this line :
# connect position feedback
net Xpos-fb axis.0.motor-pos-fb => pid.0.feedback
net Ypos-fb axis.1.motor-pos-fb => pid.1.feedback
net Zpos-fb axis.2.motor-pos-fb => pid.2.feedback
I'll look for how to "add" U position to X-position and Hal (i'm not very costumery with this kind of language, but i think the answer will be on : LinuxCNC_HAL_Manual_fr.pdf)
Thx !
Please Log in or Create an account to join the conversation.
I'll look for how to "add" U position to X-position and Hal
Something a bit like
loadrt sum2 count=2
...
addf sum2.0 servo-thread
addf sum2.1 servo-thread
...
net x-feedback encoder.0.position => sum2.0.in0
net u-feedback encoder.3.position => sum2.0.in1
net xu-feedback sum2.0.out => axis.0.motor-pos-fb pid.0.feedback
Then, as you move the U, the PID will try to keep the sum the same, moving X in the opposite direction.
This would actually work pretty well for increasing the working area of a machine. Hmm.....
Please Log in or Create an account to join the conversation.