4
$\begingroup$

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!

$\endgroup$
  • 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 Feb 4 '16 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 Feb 5 '16 at 0:08
  • $\begingroup$ @Bilal Wasim - Do you know the individual center of masses of all the links in the humanoid? $\endgroup$ – bluebird Feb 8 '16 at 5:56
7
$\begingroup$

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$.
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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