Cinématique avec axes "redondants" (+présentation)

More
23 Oct 2014 21:49 - 23 Oct 2014 21:50 #52332 by vincentECN
Bonjour à tous,

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 !
Last edit: 23 Oct 2014 21:50 by vincentECN.

Please Log in or Create an account to join the conversation.

More
27 Oct 2014 22:26 #52439 by vincentECN
(I will try to send an english version of this post tomorrow. I think it can be more suitable in category Configuring LinuxCNC > Advanced Configuration. ;) )

Please Log in or Create an account to join the conversation.

More
28 Oct 2014 23:39 #52502 by andypugh

- 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.
The following user(s) said Thank You: vincentECN

Please Log in or Create an account to join the conversation.

More
29 Oct 2014 20:20 #52526 by vincentECN
Thanks for you answer andypugh.

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.

More
29 Oct 2014 20:24 #52528 by vincentECN
For english speaker. I have translate and update my request in category Configuring LinuxCNC > Advanced Configuration

www.linuxcnc.org/index.php/french/forum/...guration/28498#52527

Please Log in or Create an account to join the conversation.

More
29 Oct 2014 21:19 #52529 by andypugh

In your case, what do you do when you set a new value of the imaginary axe ?

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.

Does it change the behavior of other axe ?

That depends on the setup.
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

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 ?

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.

Please Log in or Create an account to join the conversation.

More
29 Oct 2014 22:04 #52533 by vincentECN

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 ?

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.


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.

More
29 Oct 2014 22:21 #52539 by andypugh

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.
The following user(s) said Thank You: vincentECN

Please Log in or Create an account to join the conversation.

More
29 Oct 2014 22:35 #52540 by vincentECN

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 !
Attachments:

Please Log in or Create an account to join the conversation.

More
29 Oct 2014 22:57 #52542 by andypugh

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.....
The following user(s) said Thank You: vincentECN

Please Log in or Create an account to join the conversation.

Time to create page: 0.080 seconds
Powered by Kunena Forum