I am working on some code that will handle the arm of a robot, and I want to be able to hold the arm in place against the force of gravity. The arm is in 2 parts just like a human arm and I intend to hold the arm in place by setting a certain power to the motor that controls the main arm (equivalent to a human shoulder). Both arms can rotate in any direction around their respective attachment points, but I have code implemented that will keep the second part of the arm from falling down due to gravity. Arm attached to the robot My problem is that I do not know how to calculate the torque of the shoulder part of the arm when the second part is added. So how would I calculate the torque of the main arm at angle 1 with the added force of the second part of the arm at angle 2?

  • $\begingroup$ the torque at a0 is always the force (wherever it is) times the distance from a0. $\endgroup$
    – Tiger Guy
    Commented Jan 17, 2022 at 20:01

2 Answers 2


there is a big difference if you are considering the static or the dynamic case.

static case

In the static case the simplest way is to add the torque from all the forces. (Although this might sound weird) because you are working in a 3D problem the simplest way would be to use the cross product form of the moment (for all load in the system including self weight). I.e.

$$\vec{r}\times \vec{F} = \left|\begin{matrix}\vec{i} & \vec{j} &\vec{k} \\ r_x & r_y & r_z \\ F_x & F_y & F_z \end{matrix}\right|$$


  • $\vec{r}= \begin{bmatrix}r_x\\r_y\\r_z\end{bmatrix}$ the position vector from the position you are calculating the torque to the application of the force
  • $\vec{F}= \begin{bmatrix}F_x\\F_y\\F_z\end{bmatrix}$ the force vector (in the same coordinate system as above).

UPDATE for Rameez Ul Haq and DKNguyen comments

The result of the bending moment can be intimidating (As Rameez Commented). So - as DKNguyen suggested - to find the actual rotor torque you need to:

  1. find the axis of the motor. In the image above both motor rotate about the z-axis, so the motor would be $\vec{\epsilon}_{motor}= \begin{bmatrix}0\\0\\1\end{bmatrix}$
  2. perform a dot product on the result of sum of moments. I.e.:

$$\left(\sum_{i=1}^{n}(\vec{r}_i\times \vec{F}_i\right)\cdot \vec{\epsilon}_{motor}$$

(The remaining moments are relevant for the structural dimensioning of the joint and the arm )

Dynamic case

In the dynamic case (i.e. when there is rotational and translational motion) things are much more complicated.

The distribution of the mass is space plays a role, so if you were to carry a ball and a pipe of the same weight, the torque on the motors could be significantly different (The faster the motion the bigger the differences).

So you would need to account for the moments of inertia of the

  • load
  • both the robotic arms and their accessories.
  • $\begingroup$ The cross product that you have given for the static case, IMHO, it would be difficult to judge for a beginner that which moments will result in bending and which moments will result in torsion. I don't know if the motors used for robotic actions need to know this information (or we just scalar sum the moments to find eqv. torque), because for sizing of the arms, the distinction between these moments become important. $\endgroup$ Commented Jan 17, 2022 at 19:37
  • $\begingroup$ @RameezUlHaq Wouldn't you just dot product the result of the cross product against the arm to remove the torsion component? $\endgroup$
    – DKNguyen
    Commented Jan 17, 2022 at 21:20
  • 1
    $\begingroup$ I think this answer does not consider the OP's claim: "Both arms can rotate in any direction around their respective attachment points." In such a case, the weight of the arms will have significant roles/effects. $\endgroup$
    – r13
    Commented Jan 17, 2022 at 22:09

"I want to be able to hold the arm in place against the force of gravity... Both arms can rotate in any direction around their respective attachment points."

Your system is unstable, which is caused by the fact that there is no fixity against rotation. Note that the "probable force" in the lower sketch can be induced by the deflection shown in the first sketch, and can occur in both X & Z directions. Once the motion starts, the vertical arm 2 will act as a pendulum in the free swing. The resultant (demand on) torques are not predictable without modifying the connection joints or taking into consideration of the kinetic motion and dynamic effects.

enter image description here

enter image description here

  • $\begingroup$ Sorry, I didn't make my question clear enough. Both arms have the ability to rotate, but it is easy enough for me to make code that will hold the secondary arm in place. So you can assume that the secondary arm will always be at the same angle unless I told it to move. $\endgroup$
    – 2Amateurs
    Commented Jan 18, 2022 at 19:59
  • $\begingroup$ Your secondary arm will move with or without code. Unless you provide adequate friction force to restrict the incidental move due to the deflection of arm 1 due to gravity or make both arms weightless, or issue a code to adjust/control arm 1 to be always in the horizontal position. For the last case, the sketch already shows you how to calculate the torque/moment. Finally, your system will not have Tz if the arms are stationary, because there is no gravity force acting. All I want to point out is there are many issues with your design that deserve attention, especially for a sensitive robot. $\endgroup$
    – r13
    Commented Jan 18, 2022 at 21:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.