Compensating for mechanically coupled axes

More
11 Jan 2018 17:01 #104296 by Cpk_Rbt
2 axes on our machine are mechanically coupled, when one axis moves, the other axis also moves (at the gearing, not at the motor, so the position feedback is wrong). The movement is 1:1. Independent axis moves 30 degrees, dependent axis moves -30 degrees.

We are considering ways to solve this, and have a rough concept but wanted to get some more feedback on the best way to go about this. Basically, we're thinking if we hook up the axis position command output pin to something else before connecting to the drive command input pin, we can add/subtract the proper amount to the dependent axis's position.

I don't know how common or uncommon this scenario is, maybe I'm overthinking it, or maybe it's harder than I thought. If anyone has any input, I'd really appreciate it.

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

More
11 Jan 2018 19:17 #104307 by rodw
I'm not exactly sure of your machine config but it sounds like this is a joint axis and therefore using master branch and configuring it the same as my gantry machine would achieve exactly what you want to achieve. It will be very simple then. But the two joint axes sill show as a single axis (in my case Y). There is a big difference between a joint (eg a motor) and an axis (which may include multiple joints)

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

More
11 Jan 2018 19:43 #104309 by Cpk_Rbt
Sorry, I completely forgot to mention that these axes are serial. It's not two motors driving one axis, but two serial joints (so when the parent moves, the child needs to compensate for the parent's movements.)

We actually did some testing with our idea and the theory works, but our implementation isn't quite right yet.
We basically set up a couple sum2 functions.

sum2.0.in0 = axis1CMD
sum2.0.in1 = axis1FB
sum2.0.gain1 = -1
#sum2.0 calculates the amount that axis 1 is moving THIS LOOP - small increment
sum2.1.in0 = axis2CMD
sum2.1.in1 = sum2.0.out
sum2.1.out => axis2CMD_OUT

With a simplified example, if we are jogging axis 1 at a rate of 1 degree per thread execution, it will add 1 degree to the axis 2 command, and axis 2 will move to follow that. BUT when we stop jogging axis 1, axis 2 goes back to its original position. I can process the logic of the operation, but I don't know how to accomplish it in LinuxCNC.

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

More
08 Feb 2018 16:39 #105586 by andypugh
You might want to consider if the calculations actually belong in a custom kinematics module.

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

Time to create page: 0.204 seconds
Powered by Kunena Forum