- Configuring LinuxCNC
- Basic Configuration
- Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
- 3radfahrer
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 5
04 Jan 2021 22:46 #194082
by 3radfahrer
Dear linuxcnc-community
First of all a big thank you all to this great community: I‘m successfully operating my homebrew 4ax router with linuxcnc since 8 years now and most of my issues and questions could be solved and I found a lot of hints for experiments like implementing EtherCat-Amps with the help of this forum → So thank you very much
Right now, I’m running V2.8.1 and since I operate my mill on trivkins , my latest project is to experiment with the kinematics implementation with the aim of upgrading my configuration to 4ax-kinematics (either with modded linear-genserkins or a close solution algebraic transformation).
Therefore, I set up a simulation-configuration with genserkins and parameterized a Kuka Agilus KR10, because I have this one already running in Matlab including the dh-parameters and know the results for the forward and inverse transformation, and got this to a working state in linuxcnc including the visualization with vismach, except one thing:
In the ini-file of the configuration, I parameterized among other things the max_velocity for each axis and each joint. The parameters seem to be accepted correctly since linuxcnc starts without error and:
My expectation in this case was, that the [JOINT_N].MAX_VELOCITY would never be exceeded. Instead, the TCP/axis-velocity should be slowed down so that the [JOINT_N].MAX_VELOCITY gets not exceeded.
I also encountered this behavior for the example-configurations “sim-xyzbc-trt”, “sim-xyzac-trt” and the “ldelta”…
So my question is now: is my expectation wrong, and this behavior is as it should or am I missing something in my configuration?
Attached is the gif that visualizes the overrun of the JOINT.MAX_VELOCITY limits, the ini-file of my configuration and the hal-file with the genserkins-parametrization
If more files are helpful, please let me know.
Thanks in advance for your hints and sorry for the long post. Just wanted to make my problem clear
First of all a big thank you all to this great community: I‘m successfully operating my homebrew 4ax router with linuxcnc since 8 years now and most of my issues and questions could be solved and I found a lot of hints for experiments like implementing EtherCat-Amps with the help of this forum → So thank you very much
Right now, I’m running V2.8.1 and since I operate my mill on trivkins , my latest project is to experiment with the kinematics implementation with the aim of upgrading my configuration to 4ax-kinematics (either with modded linear-genserkins or a close solution algebraic transformation).
Therefore, I set up a simulation-configuration with genserkins and parameterized a Kuka Agilus KR10, because I have this one already running in Matlab including the dh-parameters and know the results for the forward and inverse transformation, and got this to a working state in linuxcnc including the visualization with vismach, except one thing:
In the ini-file of the configuration, I parameterized among other things the max_velocity for each axis and each joint. The parameters seem to be accepted correctly since linuxcnc starts without error and:
- when jogging joint_0 in joint-mode, the actual velocity is [JOINT_0].MAX_VELOCITY
- when jogging axis_x in world-mode (after homing) the actual velocity is [AXIS_X].MAX_VELOCITY
My expectation in this case was, that the [JOINT_N].MAX_VELOCITY would never be exceeded. Instead, the TCP/axis-velocity should be slowed down so that the [JOINT_N].MAX_VELOCITY gets not exceeded.
I also encountered this behavior for the example-configurations “sim-xyzbc-trt”, “sim-xyzac-trt” and the “ldelta”…
So my question is now: is my expectation wrong, and this behavior is as it should or am I missing something in my configuration?
Attached is the gif that visualizes the overrun of the JOINT.MAX_VELOCITY limits, the ini-file of my configuration and the hal-file with the genserkins-parametrization
If more files are helpful, please let me know.
Thanks in advance for your hints and sorry for the long post. Just wanted to make my problem clear
Please Log in or Create an account to join the conversation.
- tommylight
- Away
- Moderator
Less
More
- Posts: 19209
- Thank you received: 6438
04 Jan 2021 23:18 #194087
by tommylight
Replied by tommylight on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Something i noticed in your ini file, the velocity settings are all over the place, they should be the same for the corresponding axis/joint.
Try starting that config from the terminal, see if you get warning about velocities not being set correctly.
Try starting that config from the terminal, see if you get warning about velocities not being set correctly.
The following user(s) said Thank You: 3radfahrer
Please Log in or Create an account to join the conversation.
- 3radfahrer
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 5
05 Jan 2021 22:25 #194172
by 3radfahrer
Replied by 3radfahrer on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Hi Tommy,
thanks for your fast reply. I started linuxcnc from terminal, please find the output below.
Unfortunately no warnings, I just get a "note" about the VMAX. I'll check the origin of this value and remove the tooltable error...
Am I missing an option to get more information?
Thank you,
Dominik
thanks for your fast reply. I started linuxcnc from terminal, please find the output below.
Unfortunately no warnings, I just get a "note" about the VMAX. I'll check the origin of this value and remove the tooltable error...
Am I missing an option to get more information?
Thank you,
Dominik
dom@debian:~$ linuxcnc ~/linuxcnc/configs/KukaTest/do_kuka1.ini
LINUXCNC - 2.8.1
Machine configuration directory is '/home/dom/linuxcnc/configs/KukaTest'
Machine configuration file is 'do_kuka1.ini'
check_config: Unchecked: [KINS]KINEMATICS=genserkins
Starting LinuxCNC...
emc/iotask/ioControl.cc 702: can't load tool table.
Found file(REL): ./do_kuka1.hal
Found file(REL): ./simulated_home_kuka.hal
note: MAXV max: 200.000 units/sec 12000.000 units/min
note: LJOG max: 200.000 units/sec 12000.000 units/min
note: LJOG default: 0.250 units/sec 15.000 units/min
note: AJOG max: 10.000 units/sec 600.000 units/min
note: AJOG default: 10.000 units/sec 600.000 units/min
note: jog_order='XYZABC'
note: jog_invert=set([])
task: main loop took 0.010127 seconds
task: main loop took 0.011059 seconds
RTAPI: ERROR: Unexpected realtime delay on task 1
This Message will only display once per session.
Run the Latency Test and resolve before continuing.
Please Log in or Create an account to join the conversation.
- 3radfahrer
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 5
06 Jan 2021 11:25 #194206
by 3radfahrer
Replied by 3radfahrer on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Hi again Tommy,
I startet linuxcnc from terminal with debugmode 0x7FFFFFF and can't see anything suspicious regarding the parametrization of the axis/joints, except the entries "waiting for s.joints<0>, s.kinematics_type<0>". is this normal, or is this a kind of sync-problem?
I startet linuxcnc from terminal with debugmode 0x7FFFFFF and can't see anything suspicious regarding the parametrization of the axis/joints, except the entries "waiting for s.joints<0>, s.kinematics_type<0>". is this normal, or is this a kind of sync-problem?
emcTrajSetJoints(6) returned 0
emcTrajSetSpindles(1) returned 0
emcTrajSetAxes(6, 63)
emcTrajSetUnits(1.0000, 1.0000)
emcTrajSetVelocity(0.0000, 1.0000) returned 0
emcTrajSetMaxVelocity(4.0000) returned 0
emcTrajSetAcceleration(80.0000) returned 0
emcTrajSetMaxAcceleration(100.0000)
emcTrajSetHome(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000) returned 0
emcJointSetType(0, 2)
emcJointSetUnits(0, 1.0000)
emcJointSetBacklash(0, 0.0000) returned 0
emcJointSetMinPositionLimit(0, -800.0000) returned 0
emcJointSetMaxPositionLimit(0, 800.0000) returned 0
emcJointSetFerror(0, 0.5000) returned 0
emcJointSetMinFerror(0, 0.0500) returned 0
emcJointSetHomingParams(0, 0.0000, 0.0000, -1.0000, 20.0000, 20.0000, 0, 0, 0, 0, 0) returned 0
emcJointSetMaxVelocity(0, 10.0000) returned 0
emcJointSetMaxAcceleration(0, 100.0000) returned 0
emcJointActivate(0) returned 0
emcJointSetType(1, 2)
emcJointSetUnits(1, 1.0000)
emcJointSetBacklash(1, 0.0000) returned 0
emcJointSetMinPositionLimit(1, -800.0000) returned 0
emcJointSetMaxPositionLimit(1, 800.0000) returned 0
emcJointSetFerror(1, 0.5000) returned 0
emcJointSetMinFerror(1, 0.0500) returned 0
emcJointSetHomingParams(1, 0.0000, 0.0000, -1.0000, 20.0000, 20.0000, 0, 0, 0, 1, 0) returned 0
emcJointSetMaxVelocity(1, 10.0000) returned 0
emcJointSetMaxAcceleration(1, 100.0000) returned 0
emcJointActivate(1) returned 0
emcJointSetType(2, 2)
emcJointSetUnits(2, 1.0000)
emcJointSetBacklash(2, 0.0000) returned 0
emcJointSetMinPositionLimit(2, -800.0000) returned 0
emcJointSetMaxPositionLimit(2, 800.0000) returned 0
emcJointSetFerror(2, 0.5000) returned 0
emcJointSetMinFerror(2, 0.0500) returned 0
emcJointSetHomingParams(2, 0.0000, 0.0000, -1.0000, 20.0000, 20.0000, 0, 0, 0, 1, 0) returned 0
emcJointSetMaxVelocity(2, 1.0000) returned 0
emcJointSetMaxAcceleration(2, 100.0000) returned 0
emcJointActivate(2) returned 0
emcJointSetType(3, 2)
emcJointSetUnits(3, 1.0000)
emcJointSetBacklash(3, 0.0000) returned 0
emcJointSetMinPositionLimit(3, -800.0000) returned 0
emcJointSetMaxPositionLimit(3, 800.0000) returned 0
emcJointSetFerror(3, 0.5000) returned 0
emcJointSetMinFerror(3, 0.0500) returned 0
note: MAXV max: 100.000 units/sec 6000.000 units/minemcJointSetHomingParams(3, 0.0000, 0.0000, -1.0000, 20.0000, 20.0000, 0, 0, 0, 1, 0) returned 0
note: LJOG max: 100.000 units/sec 6000.000 units/min
note: LJOG default: 0.250 units/sec 15.000 units/min
note: AJOG max: 10.000 units/sec 600.000 units/min
note: AJOG default: 10.000 units/sec 600.000 units/min
waiting for s.joints<0>, s.kinematics_type<0>
emcJointSetMaxVelocity(3, 1.0000) returned 0
emcJointSetMaxAcceleration(3, 100.0000) returned 0
emcJointActivate(3) returned 0
emcJointSetType(4, 2)
emcJointSetUnits(4, 1.0000)
waiting for s.joints<0>, s.kinematics_type<0>
emcJointSetBacklash(4, 0.0000) returned 0
emcJointSetMinPositionLimit(4, -800.0000) returned 0
emcJointSetMaxPositionLimit(4, 800.0000) returned 0
waiting for s.joints<0>, s.kinematics_type<0>
emcJointSetFerror(4, 0.5000) returned 0
emcJointSetMinFerror(4, 0.0500) returned 0
emcJointSetHomingParams(4, 0.0000, 0.0000, -1.0000, 20.0000, 20.0000, 0, 0, 0, 1, 0) returned 0
emcJointSetMaxVelocity(4, 1.0000) returned 0
emcJointSetMaxAcceleration(4, 100.0000) returned 0
waiting for s.joints<0>, s.kinematics_type<0>
emcJointActivate(4) returned 0
emcJointSetType(5, 2)
emcJointSetUnits(5, 1.0000)
emcJointSetBacklash(5, 0.0000) returned 0
emcJointSetMinPositionLimit(5, -800.0000) returned 0
emcJointSetMaxPositionLimit(5, 800.0000) returned 0
emcJointSetFerror(5, 0.5000) returned 0
emcJointSetMinFerror(5, 0.0500) returned 0
emcJointSetHomingParams(5, 0.0000, 0.0000, -1.0000, 20.0000, 20.0000, 0, 0, 0, 1, 0) returned 0
emcJointSetMaxVelocity(5, 1.0000) returned 0
waiting for s.joints<0>, s.kinematics_type<0>
emcJointSetMaxAcceleration(5, 100.0000) returned 0
emcJointActivate(5) returned 0
emcAxisSetMinPositionLimit(0, -8000.0000) returned 0
emcAxisSetMaxPositionLimit(0, 8000.0000) returned 0
emcAxisSetMaxVelocity(0, 100.0000) returned 0
emcAxisSetMaxAcceleration(0, 100.0000) returned 0
emcAxisSetLockingJoint(0, -1) returned 0
emcAxisSetMinPositionLimit(1, -8000.0000) returned 0
emcAxisSetMaxPositionLimit(1, 8000.0000) returned 0
emcAxisSetMaxVelocity(1, 100.0000) returned 0
emcAxisSetMaxAcceleration(1, 100.0000) returned 0
emcAxisSetLockingJoint(1, -1) returned 0
emcAxisSetMinPositionLimit(2, -8000.0000) returned 0
emcAxisSetMaxPositionLimit(2, 8000.0000) returned 0
emcAxisSetMaxVelocity(2, 100.0000) returned 0
emcAxisSetMaxAcceleration(2, 100.0000) returned 0
emcAxisSetLockingJoint(2, -1) returned 0
waiting for s.joints<0>, s.kinematics_type<0>
emcAxisSetMinPositionLimit(3, -800.0000) returned 0
emcAxisSetMaxPositionLimit(3, 800.0000) returned 0
emcAxisSetMaxVelocity(3, 100.0000) returned 0
emcAxisSetMaxAcceleration(3, 100.0000) returned 0
emcAxisSetLockingJoint(3, -1) returned 0
emcAxisSetMinPositionLimit(4, -800.0000) returned 0
emcAxisSetMaxPositionLimit(4, 800.0000) returned 0
emcAxisSetMaxVelocity(4, 100.0000) returned 0
emcAxisSetMaxAcceleration(4, 100.0000) returned 0
emcAxisSetLockingJoint(4, -1) returned 0
emcAxisSetMinPositionLimit(5, -800.0000) returned 0
emcAxisSetMaxPositionLimit(5, 800.0000) returned 0
emcAxisSetMaxVelocity(5, 100.0000) returned 0
emcAxisSetMaxAcceleration(5, 100.0000) returned 0
emcAxisSetLockingJoint(5, -1) returned 0
emcJointSetMotorOffset(0, -69.7725) returned 0
emcJointSetMotorOffset(1, 4.8505) returned 0
emcJointSetMotorOffset(2, 24.0837) returned 0
emcJointSetMotorOffset(3, -0.0000) returned 0
emcJointSetMotorOffset(4, -28.9342) returned 0
emcJointSetMotorOffset(5, -69.7725) returned 0
emcJointSetMotorOffset(6, -0.0000) returned 0
emcJointSetMotorOffset(7, -0.0000) returned 0
emcJointSetMotorOffset(8, -0.0000) returned 0
Please Log in or Create an account to join the conversation.
- tommylight
- Away
- Moderator
Less
More
- Posts: 19209
- Thank you received: 6438
06 Jan 2021 12:44 #194212
by tommylight
Replied by tommylight on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
It all seems OK, and it shows at what value the velocities are being set for each joint:
emcAxisSetMaxVelocity(0, 100.0000) returned 0
So that will be 6000mm/m, and that still falls under what you are getting in the video above, so all is good.
I would definitely set the same value for the corresponding joint/axis for velocity and acceleration.
emcAxisSetMaxVelocity(0, 100.0000) returned 0
So that will be 6000mm/m, and that still falls under what you are getting in the video above, so all is good.
I would definitely set the same value for the corresponding joint/axis for velocity and acceleration.
Please Log in or Create an account to join the conversation.
- 3radfahrer
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 5
06 Jan 2021 20:32 #194282
by 3radfahrer
Replied by 3radfahrer on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Thats right, all seems ok.
You are right, the 100mm/s for the AXIS are larger than the driven speed, so that limit is not violated.
But the values for the JOINTS maximum velocity (emcJointSetMaxVelocity) are all set properly to 1mm/s and 10mm/s respectively, and these are the limits that get exceeded when driving in world-mode. That the values are somehow set properly, which can be shown when driving in joint-mode: then the joint-limits are respected properly.
regarding your last suggestion, if I understood you correctly:
Why would you set the same values for corresponding axis/joints? This would make the separation in joints and axis kind of redundant, or?
and how would you determine the correct axis/joints-correspondances, since there is (for this six-roational robot-kinematic) never a generally valid correspondace between a cartesian axis and any of the joints?
You are right, the 100mm/s for the AXIS are larger than the driven speed, so that limit is not violated.
But the values for the JOINTS maximum velocity (emcJointSetMaxVelocity) are all set properly to 1mm/s and 10mm/s respectively, and these are the limits that get exceeded when driving in world-mode. That the values are somehow set properly, which can be shown when driving in joint-mode: then the joint-limits are respected properly.
regarding your last suggestion, if I understood you correctly:
Why would you set the same values for corresponding axis/joints? This would make the separation in joints and axis kind of redundant, or?
and how would you determine the correct axis/joints-correspondances, since there is (for this six-roational robot-kinematic) never a generally valid correspondace between a cartesian axis and any of the joints?
Please Log in or Create an account to join the conversation.
- tommylight
- Away
- Moderator
Less
More
- Posts: 19209
- Thank you received: 6438
06 Jan 2021 21:04 #194283
by tommylight
Replied by tommylight on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Yeah that is a bit complicated for some use cases, but in robots one axis is one joint, and in world mode the Axis setting appear to be used as they should, so setting them to the same value would also limit them in world mode.
To tired, can not think properly, later.
To tired, can not think properly, later.
Please Log in or Create an account to join the conversation.
- 3radfahrer
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 5
06 Jan 2021 21:28 #194289
by 3radfahrer
Replied by 3radfahrer on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Thanks for your fast anwser.
I followed your suggestion from your previous post: all joints and all axis set on 10mm/s max velocity. But the result is the same: The TCP-Velocity is limited to the values from the axis-sections, and the limits of the max_velocities of the joints seem not to be considered...
I don't want to keep you from your rest, maybe you can share a document or link, that explains this context in particular for linuxcnc because I thought (till now) I'm sort of familiar with this axis/joint topic since I implemented the transformations for several kinematics in matlab that implicate this joint/axis item
Cheers and have a good rest
I followed your suggestion from your previous post: all joints and all axis set on 10mm/s max velocity. But the result is the same: The TCP-Velocity is limited to the values from the axis-sections, and the limits of the max_velocities of the joints seem not to be considered...
I don't want to keep you from your rest, maybe you can share a document or link, that explains this context in particular for linuxcnc because I thought (till now) I'm sort of familiar with this axis/joint topic since I implemented the transformations for several kinematics in matlab that implicate this joint/axis item
Cheers and have a good rest
Please Log in or Create an account to join the conversation.
- 3radfahrer
- Offline
- New Member
Less
More
- Posts: 18
- Thank you received: 5
06 Jan 2021 21:48 #194295
by 3radfahrer
Replied by 3radfahrer on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
It's me again
one additional note: according to the linuxcnc 2.8.1 documentation the demand on "axis value must be the same as joint value" is only necessary for idendity-kinematics like "trivkins"...
I am confused
Cheers, Do
one additional note: according to the linuxcnc 2.8.1 documentation the demand on "axis value must be the same as joint value" is only necessary for idendity-kinematics like "trivkins"...
I am confused
Cheers, Do
Please Log in or Create an account to join the conversation.
07 Jan 2021 07:39 #194329
by rodw
Replied by rodw on topic Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Do the individual joints violate their limits?
Think about this. If you are moving the X & Y axis to traverse at 45 degrees, and both axes are travelling at their max velocity, the actual velocity of the milling cutter will be higher.
Think about this. If you are moving the X & Y axis to traverse at 45 degrees, and both axes are travelling at their max velocity, the actual velocity of the milling cutter will be higher.
Please Log in or Create an account to join the conversation.
- Configuring LinuxCNC
- Basic Configuration
- Exceeding JOINT_N.MAX_VELOCITY limits with genserkins kinematics
Time to create page: 0.120 seconds