Consider closed loop on a pivot for a telescoping arm. The PID and or the Feed Forward values would be different if the telescoping portion were retracted or extended because the weight would out so much farther.

Then consider closed loop control on the telescoping portion. Its closed loop constants are different if the arm is pointing up, level, or down.

Now consider trying to raise or lower the arm and extend or retract at the same time.

How would one handle the fact that each mechanism alters the force needed on the other mechanism.

I have a feeling it will have more to do with the Feed Forward than the PID. Maybe interpolating the feed forward based on observed properties at different points. I am sure someone has solved this problem.

A solution is to just accept imperfect values at anything but the middle. Middle of the extension or middle of imparted torque

Another solution is to create several different values as the arm moves and change it on the fly. Not a great idea in my opinion as I’d be curious to how it would react to constantly changing pid constants

You’re describing a multi-input multi-output (MIMO) control problem. PID is really used for single input single output (SISO) control problems or MIMO problems with loose coupling between variables. To really solve a tightly coupled MIMO problem you need a dynamic model of the system as a starting point. You could try to create a linearized state space model of your system and compute closed loop gains using something like a linear quadratic regulator (LQR) controller or some other approach like quantitative feedback theory (QFT). Multivariate control is a fairly advanced topic that requires a good grasp of differential equations and linear algebra. You can google it and you’ll quickly get a sense of what the math looks like.

That said, you could still try to tune a pair of PIDs. The effectiveness of the gains will likely vary with your operating points, and you’ll need to back off on the gains a fair bit to avoid a lot of oscillation as your inputs and outputs interact.

Its mostly feedforward (calculate with torque = length of arm * force of gravity * cos(theta)) where theta is angle off the ground. The force of gravity remains constant but the arm length is the distance from the axel to the center of mass of the arm

To calculate distance to center of mass you take the center of mass of the stage that’s not moving and the center of mass of the stage that is moving and do a weighted average using (M1 * distance1 + M2 * distance2) / (M1 + M2) = distance to center of mass of whole arm

Unless you want to try your hand at control theory