- #1

- 9

- 0

I'm working on a developing a position control system for a robotic shoulder joint driven by a DC motor. To simplify, the robot arm can be viewed as being in a fully extended state.

I have now reached a stage where I can no longer ignore the affect gravity has on the torque generated by the motor.

The robot arm, in a fully extended position slighty above the horizontal, will experience a downwards force of F=mg sin(theta), where theta is measured from the vertical equilibrium point to the centre of gravity of the arm. As the arm is connected to a pivot, a moment is created with magnitude, T=mgr sin(theta), where r is the length of the arm measured from the pivot to the centre of gravity.

The presence of sin(theta) is non-linear and thus has to be linearised around an operating point. If we were to assume that the robot shoulder arm would not pivot at more than +-45deg from the horizontal axis, then, taking theta from the horizontal line, rather than from the vertical as we did previously, we can linearise the torque caused by gravity on the arm, as T = mgr cos(theta), where cos(theta) ~= 1 and so becomes, T = mgr.

The problem with this is that in developing the transfer function for my robot arm, that is (dw/dt) / i, where i is the current fed to the shoulder motor, the torque caused by gravity now appears as a disturbance. i.e., it is not a coefficent of either my input or output. Which is ideally what I would like.

Actually, I've just realised this isn't a problem as I have found a reasonable way to represent this disturbance in my block diagram and hence, my system transfer function. But, having spent all this time writing this I think i'll just post it all the same. Maybe you can criticise the logic of the above.

Rem

I have now reached a stage where I can no longer ignore the affect gravity has on the torque generated by the motor.

The robot arm, in a fully extended position slighty above the horizontal, will experience a downwards force of F=mg sin(theta), where theta is measured from the vertical equilibrium point to the centre of gravity of the arm. As the arm is connected to a pivot, a moment is created with magnitude, T=mgr sin(theta), where r is the length of the arm measured from the pivot to the centre of gravity.

The presence of sin(theta) is non-linear and thus has to be linearised around an operating point. If we were to assume that the robot shoulder arm would not pivot at more than +-45deg from the horizontal axis, then, taking theta from the horizontal line, rather than from the vertical as we did previously, we can linearise the torque caused by gravity on the arm, as T = mgr cos(theta), where cos(theta) ~= 1 and so becomes, T = mgr.

The problem with this is that in developing the transfer function for my robot arm, that is (dw/dt) / i, where i is the current fed to the shoulder motor, the torque caused by gravity now appears as a disturbance. i.e., it is not a coefficent of either my input or output. Which is ideally what I would like.

Actually, I've just realised this isn't a problem as I have found a reasonable way to represent this disturbance in my block diagram and hence, my system transfer function. But, having spent all this time writing this I think i'll just post it all the same. Maybe you can criticise the logic of the above.

Rem

Last edited: