I've been working on Humanoid Robot, and I face the problem of finding the Center of Mass of the Robot which will help in balancing the biped. Although COM has a very simple definition, I'm unable to find a simple solution to my problem.

My view: I have already solved the Forward and Inverse Kinematics of the Robot with Torso as the base frame. So, if I can find the position(and orientation) of each joint in the base frame, I can average all of them to get the COM. Is this approach reasonable? Will it produce the correct COM?

Can anyone offer any series of steps that I can follow to find the COM of the biped? Any help would be appreciated.


  • 2
    $\begingroup$ Use the forward kinematics to calculate the COM of each link in the frame of interest (torso for you). Calculate the humanoid COM using en.wikipedia.org/wiki/Rigid_body_dynamics#Mass_properties $\endgroup$
    – hauptmech
    Commented Feb 4, 2016 at 22:42
  • 4
    $\begingroup$ Good answer @hauptmech. Please make it a real answer so we can up-vote it! Comments are for clarifications to questions and answers. $\endgroup$
    – Ben
    Commented Feb 5, 2016 at 0:08
  • $\begingroup$ @Bilal Wasim - Do you know the individual center of masses of all the links in the humanoid? $\endgroup$
    – bluebird
    Commented Feb 8, 2016 at 5:56

1 Answer 1


Yes. As @hauptmech mentioned, you can use your forward kinematics to get the center of mass of each link in the base frame. Then you can simply compute the weighted average of the masses and positions to get the overall center of mass.

In other words:

$$ M = \sum_{i=0}^n m_i $$ $$ \mathbf{P}_i^0 = pos( \mathbf{T}_i^0(\mathbf{q}) \mathbf{T}_{i_m}^i) $$ $$ \mathbf{COM}^0 = \frac{1}{M} \sum_{i=0}^n m_i \mathbf{P}_i^0 $$


  • $m_i$ = mass of link $i$
  • $M$ = total mass
  • $\mathbf{q}$ = vector of joint angles
  • $\mathbf{T}_i^0$ = Transform from base frame $0$ to link $i$. (The forward kinematics which is a function of $\mathbf{q}$).
  • $\mathbf{T}_{i_m}^i$ = Transform from the link $i$ frame to it's center of mass.
  • $pos()$ = function to extract position vector from full transform.
  • $\mathbf{P}_i^0$ = position of mass of link $i$ in base frame $0$.
  • $\mathbf{COM}^0$ = center of mass of system in base frame $0$.

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.