Help for Linearangular Axis in Kinematics

More
10 Apr 2016 09:22 #73039 by G0G53Z148
Dear Linuxcnc professionals
Since I was in many prosecute always good advice to the Forum I turn back to you.
This time with a new problem of kinematics.
My colleague and I have been refurbished on several machines and converted to cnc and rebuilt. But with electronics and software our limits are soon reached o as in this case.

Here e is a 5 axis machine with a swiveling axis with a spindle drive and an axis of rotation. So X Y Z A C. The A axis is precisely the pivot axis is a lever with a spindle driven. The A axis is -20 to +110 degrees taverns can and the turntable in 360deg +.
I've read something in the forum
Link:
forum.linuxcnc.org/forum/10-advanced-con...tup-for-linear-delta
and am going to
Link:
buildbot.linuxcnc.org/doc/scratch/v2.8.0...tion/kinematics.html
encountered.

What I have found is that needs to be rebuilt or expanded kinematics.
I have a few pictures uploaded to the illustration. Whereas, since indeed changes the length of the traveling path with each angle must kinematics adapted so Gcode commands of A50 C100 at all can be performed. Is this at all possible as I introduce myself?

Unfortunately, my software and mathematics is understanding here exhausted I'm looking for someone who wants to help us with the project and we will change the kinematics and we will assist in configuring. would also very nice if you could embed the kinematics simulation shown the machine. This is not a must.
We have tried to understand the English lyrics but I do not look through and translated in Google that is of little use because English is not my native language.

I look forward to reply and for your help
Kind regards
Roland
PS: This text has been translated using Google Translator into English.






Attachments:

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

More
11 Apr 2016 13:34 #73104 by andypugh
This system looks a lot like the B-axis of a Centroid milling machine:
www.centroidcnc.com/cnc_porting_machine.html

As far as I can see you need to solve for the angles of a triangle with two fixed-length sides and one variable-length.

www.mathsisfun.com/algebra/trig-solving-sss-triangles.html

You only ever need to solve for one angle, the others do not matter.

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

More
12 Apr 2016 16:41 - 12 Apr 2016 16:43 #73177 by G0G53Z148
Hi Andy!
Thanks for your answer.

The Machine will look like Hermle C30U with Swinging C axis and Rotating A axis

Only the the A-Axis will not driven with Cyclo Gear about the pice in the size Outputtorque 3500n.m they are to Expensive.
The triangle with the calculations was already clear to me. But just where and how do I get Linuxcnc at it this triangle in the A-axis then charged if I motion G1 A +100 F500 to do.

I have the 5axiskins.c to elicit on github trying times how this works but I'm with my knowledge no solution so I'm looking for help.
   1/********************************************************************
   2 * Description: 5axiskins.c
   3 *   Trivial kinematics for 3 axis Cartesian machine
   4 *
   5 *   Derived from a work by Fred Proctor & Will Shackleford
   6 *
   7 * Author:
   8 * License: GPL Version 2
   9 * System: Linux
  10 *    
  11 * Copyright (c) 2007 Chris Radek
  12 *
  13 * Last change:
  14 ********************************************************************/
  15 
  16 #include "kinematics.h"         /* these decls */
  17 #include "posemath.h"
  18 #include "hal.h"
  19 #include "rtapi_math.h"
  20 
  21 #define d2r(d) ((d)*PM_PI/180.0)
  22 #define r2d(r) ((r)*180.0/PM_PI)
  23 
  24 struct haldata {
  25     hal_float_t *pivot_length;
  26 } *haldata;
  27 
  28 static PmCartesian s2r(double r, double t, double p) {
  29     PmCartesian c;
  30     t = d2r(t), p = d2r(p);
  31 
  32     c.x = r * sin(p) * cos(t);
  33     c.y = r * sin(p) * sin(t);
  34     c.z = r * cos(p);
  35 
  36     return c;
  37 }
  38 
  39 int kinematicsForward(const double *joints,
  40                       EmcPose * pos,
  41                       const KINEMATICS_FORWARD_FLAGS * fflags,
  42                       KINEMATICS_INVERSE_FLAGS * iflags)
  43 {
  44     PmCartesian r = s2r(*(haldata->pivot_length) + joints[8], joints[5], 180.0 - joints[4]);
  45 
  46     pos->tran.x = joints[0] + r.x;
  47     pos->tran.y = joints[1] + r.y;
  48     pos->tran.z = joints[2] + *(haldata->pivot_length) + r.z;
  49     pos->a = joints[3];
  50     pos->b = joints[4];
  51     pos->c = joints[5];
  52     pos->u = joints[6];
  53     pos->v = joints[7];
  54     pos->w = joints[8];
  55 
  56     return 0;
  57 }
  58 
  59 int kinematicsInverse(const EmcPose * pos,
  60                       double *joints,
  61                       const KINEMATICS_INVERSE_FLAGS * iflags,
  62                       KINEMATICS_FORWARD_FLAGS * fflags)
  63 {
  64 
  65     PmCartesian r = s2r(*(haldata->pivot_length) + pos->w, pos->c, 180.0 - pos->b);
  66 
  67     joints[0] = pos->tran.x - r.x;
  68     joints[1] = pos->tran.y - r.y;
  69     joints[2] = pos->tran.z - *(haldata->pivot_length) - r.z;
  70     joints[3] = pos->a;
  71     joints[4] = pos->b;
  72     joints[5] = pos->c;
  73     joints[6] = pos->u;
  74     joints[7] = pos->v;
  75     joints[8] = pos->w;
  76 
  77     return 0;
  78 }
  79 
  80 /* implemented for these kinematics as giving joints preference */
  81 int kinematicsHome(EmcPose * world,
  82                    double *joint,
  83                    KINEMATICS_FORWARD_FLAGS * fflags,
  84                    KINEMATICS_INVERSE_FLAGS * iflags)
  85 {
  86     *fflags = 0;
  87     *iflags = 0;
  88 
  89     return kinematicsForward(joint, world, fflags, iflags);
  90 }
  91 
  92 KINEMATICS_TYPE kinematicsType()
  93 {
  94     return KINEMATICS_BOTH;
  95 }
  96 
  97 #include "rtapi.h"              /* RTAPI realtime OS API */
  98 #include "rtapi_app.h"          /* RTAPI realtime module decls */
  99 #include "hal.h"
 100 
 101 EXPORT_SYMBOL(kinematicsType);
 102 EXPORT_SYMBOL(kinematicsForward);
 103 EXPORT_SYMBOL(kinematicsInverse);
 104 MODULE_LICENSE("GPL");
 105 
 106 int comp_id;
 107 int rtapi_app_main(void) {
 108     int result;
 109     comp_id = hal_init("5axiskins");
 110     if(comp_id < 0) return comp_id;
 111 
 112     haldata = hal_malloc(sizeof(struct haldata));
 113 
 114     result = hal_pin_float_new("5axiskins.pivot-length", HAL_IO, &(haldata->pivot_length), comp_id);
 115     if(result < 0) goto error;
 116 
 117     *(haldata->pivot_length) = 250.0;
 118 
 119     hal_ready(comp_id);
 120     return 0;
 121 
 122 error:
 123     hal_exit(comp_id);
 124     return result;
 125 }
 126 
 127 void rtapi_app_exit(void) { hal_exit(comp_id); }

I'm really just machine operators Simple 3 axis machines I have already established with Step and PNCCONF but at the special functions I had to always get help.

I have somewhere the two start angle and leg lengths to define the need to be accessed when the machine is referenced.
Of course you could always calculate every corner in the program but that is little sense I guess and uncomfortable.

Furthermore, I also do not know where this kinematics find file, then must pass and as I must call them.
Due thus sees you there with a complete "low level user :silly: " do the easy has just a few ideas. ;)

I say thank you and best regards
Roland
Last edit: 12 Apr 2016 16:43 by G0G53Z148.

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

More
12 Apr 2016 22:30 #73201 by andypugh

I have the 5axiskins.c to elicit on github trying times how this works but I'm with my knowledge no solution so I'm looking for help.


5axiskins uses some clever maths, but you can do the same with ordinary trigonometry if you want.

pos->b is the number that is sent out by the B-word in G-code. If you issue a G1 B12 then the value of pos->b will slowly change to 12.

joints[4] is the output value to the motor. ie, the value that appears on the axis.4.motor-position-cmd HAL pin.

In the reverse direction, axis.4.motor-position-fb is converted by the forward kins function into a value for B that is shown on the DRO.

The two sets of equations have to match perfectly or you get following errors.

But that is all there is to it. The maths is up to you.

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

More
13 Apr 2016 14:29 #73233 by G0G53Z148
Hi Andy,
I think you misunderstood me. The Planned machine has in the normal fashion no B axis. Only when the table is therefore the A axis pivoted to the spindle would for B axis if you were installing a transformation.
Only X Y Z A and C, I refer to the model in the Annex.


So I think you mean the line 49 pos-> a = joints [3];
And again you think it is sufficient to calculate the row insert?
Have you done that before? I still do not. As you very well know your way in the theme you'd me the kinematics please describe for our needs? Unfortunately, there is here with us, although these professionals do not deal with Linuxcnc but only with the adults control systems.
Kind regards
Roland
This text has been translated using Google Translator from German to English.
Attachments:

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

More
13 Apr 2016 14:33 #73234 by andypugh

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

More
13 Apr 2016 15:38 #73237 by G0G53Z148
yes, i have with googletranslator but not understood
no problem i will look for an other reason

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

More
14 Apr 2016 17:17 #73317 by G0G53Z148
Hello Again
As non native englisch speaker it is verry hard to combine the syntaxes

does anyone KNOW and WANT TO DO changing Kinematics for an service charge?
Hera are many People they do so knowing all and can only post comments to hide theyr brain.

thank you
ich you want to help please send an private massege to discuss the therm

thank you and have a nice day

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

Time to create page: 0.243 seconds
Powered by Kunena Forum