TCP 5-axis kinematics
- grandixximo
- Offline
- Premium Member
- Posts: 132
- Thank you received: 5
Please Log in or Create an account to join the conversation.
Please Log in or Create an account to join the conversation.
We have developed a patch for linuxcnc 2.8pre with joints/axes separation which allows you to switch between 2 different kinematics which will allow the axes positions to be updated from the new kinematics during the switch.
The new axes positions are calculated from the current joint positions. You donot need B,C axes to be at 0 position during the switch.
I will upload this patch to github in the near future.
We have been using this patch for a non-standard machine developed for which we needed G2,G3 arc commands to be used in X,Y axes in one configuration and in X,B axes in another configuration from the same Gcode file.
We have selected to do it via G12.1 P,Q (new gcode added to the gcode interpreter). So the patch is a little long and touches multiple files.
Good work on the 5 axis kinematics and implementation. Impressive...
-automata
Please Log in or Create an account to join the conversation.
With regards to you comments on Axis vs joint velocities and accelerations being related by non-linear functions...
Do you have any idea how commercial controllers solve them?
One way I can think of is to break down the commanded line into small segments and check for the axes to joints velocity and acceleration transformations/kinematics for each segment and limit the overall velocity of the commanded motion by the limitation of the lease joints velocity. Is this viable in real life? It could be done inside the interpreter OR before the motion block is passed to realtime with a feed value.
For jerk limitation and S curve planning, my observation has been the both Siemens and Fanuc donot use true jerk limitation in their lower and mid level offerings. Fanuc uses a jerk time limiter method (parameter 1772). This is also called the acceleration change time and is specified on a vector path instead of each individual joints/axes. It also has a jerk change time percentage which allows for bell shaped acceleration.
My take on this has been to first do the planning as a trapezoidal planner and then convert that to a jerk percentage planner as is shown in this article (support.motioneng.com/Software-MPI_04_00...s/diff_mtn_types.htm).
Do you have any insight into these issues?
-automata
Please Log in or Create an account to join the conversation.
Fanuc uses twp (tilting work plane) for 3+2. This let's you use canned cycles and normal cuttercomp, g43. Xyz move as xyz. The control tracks the work offset point.
Then when you are doing 4or5 axis work it uses TCP and g43.4 .
Most major machines do this but all call it something different
Please Log in or Create an account to join the conversation.
jsskangas:
For jerk limitation and S curve planning, my observation has been the both Siemens and Fanuc donot use true jerk limitation in their lower and mid level offerings. Fanuc uses a jerk time limiter method (parameter 1772). This is also called the acceleration change time and is specified on a vector path instead of each individual joints/axes. It also has a jerk change time percentage which allows for bell shaped acceleration.
My take on this has been to first do the planning as a trapezoidal planner and then convert that to a jerk percentage planner as is shown in this article (support.motioneng.com/Software-MPI_04_00...s/diff_mtn_types.htm).
Do you have any insight into these issues?
-automata
if you read the manual for the M80/M800 mitsubishi controls they even still do it like this it seems too, as they do have a nice section on it how it works, they seem to apply the jerk limit after the planning also, and this is on a current new level control. only when you have there smooth pathing for high speed machining things seem to get alittle different .
your takeon the fanuc way also seems correct from what i have read and understood, again only when you apply there nano path control but thats just a high speed look ahead in truth.
little off topic for this post i think..
Please Log in or Create an account to join the conversation.
Any mathematical function can be written in either cases.
Further I also have planned to have variables passing along with G12.1 Pxx Qx.xx which can be transported to Kinematics switch method.
One can call G12.1 in order to switch between 2 modes.
Please Log in or Create an account to join the conversation.
Hi,
We have developed a patch for linuxcnc 2.8pre with joints/axes separation which allows you to switch between 2 different kinematics which will allow the axes positions to be updated from the new kinematics during the switch.
The new axes positions are calculated from the current joint positions. You donot need B,C axes to be at 0 position during the switch.
I will upload this patch to github in the near future.
We have been using this patch for a non-standard machine developed for which we needed G2,G3 arc commands to be used in X,Y axes in one configuration and in X,B axes in another configuration from the same Gcode file.
We have selected to do it via G12.1 P,Q (new gcode added to the gcode interpreter). So the patch is a little long and touches multiple files.
Good work on the 5 axis kinematics and implementation. Impressive...
-automata
Here's the branch .
Please Log in or Create an account to join the conversation.
Kindly checkout Switch Kins Branch I've added a new gCode G12.1, which invokes a switch in kinematics.
Any mathematical function can be written in either cases.
Further I also have planned to have variables passing along with G12.1 Pxx Qx.xx which can be transported to Kinematics switch method.
One can call G12.1 in order to switch between 2 modes.
so basically if i position a tool relative to the center of rotation (z/c axis) for example it shows x50y0 then i enable TCP, rotate 90 degrees, disable TCP and the readout shows X0Y50? this is what i was hoping forever Linuxcnc should be able to do.
how would that work? specify two kinematic files in the hal/ini? or call the kinematics like this G12.1 <5axis>?
but most importantly, how do i update to 2.8 and would my machine config work with 2.8?
i need a video demonstration asap, if anyone could share i would be very happy!
thanks
Please Log in or Create an account to join the conversation.
Your expectation is on the correct lines but slightly off.
Please bear my pedagogy for a bit, but I believe a few lines of explaination will bring the problem into a good perspective for the casual reader too.
We can liken the machine operation to that of a Robot. There are 2 reference cartesian coordinate frames (with rotation matrix), one attached to the base (World coordinates) and one attached to the Tool tip (tool frame).
The essential objective of kinematics (both forward and inverse) is to transform the tool frame coordinates (expressed in the world frame coordinates) into the joint frame (actual positions of each joint) and vice-versa).
In the case of using RTCP, the position to achieve is specified in cartesian/task coordinates attached to the workpiece (similar to the tool position of the robot). This position needs to be transformed to the joint coordinates for the machine to move. Further for comparison, the joint coordinates of the machine need to be transformed into the cartesian frame attached to the workpiece (tool tip in the robot analogy).
So, we have Joints and axes which are related via kinematics. At startup J0 <-> X, J1<->Y, J2<->Z, J3<->A, J4<->B, J5<->C.
So your expectation for transforming between the two frames is:
1. Start machine in joint coordinate space. Move tool to J0 to 50.
2. Switch kinematics to task space, and observe that X=50, Y=0.
3. Switch kinematics back to Joint space. Move J5 by 90 degrees.
4. Switch to task space and observe that X=0,Y=50.
This is possible with current implementation of kinematics in linuxcnc without any patches applied.
Can you clarify if you want something different?
The patch we have made allows switching between two different kinematics applied to the same machine. Of course you can consider the joints positions as trivial kinematics and the machine kinematics as something else. But point remains that linuxcnc has had the capability of switching between joints(trivial) and task kinematics atleast since the merge of joints axes branch.
Regards,
-automata
Please Log in or Create an account to join the conversation.