# Finding Center of Mass for Humanoid Robot

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.

Cheers!

• 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 Commented Feb 4, 2016 at 22:42
– Ben
Commented Feb 5, 2016 at 0:08
• @Bilal Wasim - Do you know the individual center of masses of all the links in the humanoid? Commented Feb 8, 2016 at 5:56

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$$

Where:

• $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$.