Skip to content

What does the X_a_b notation mean?

Stéphane Caron edited this page Oct 31, 2020 · 1 revision

This code follows the writing style of SpaceVecAlg where the transformation from frame a to frame b is written X_a_b. Note that X_a_b is a Plücker transform (whose matrix representation is 6×6) rather than a affine transform (whose matrix representation is 4×4). This is because, like most modern control frameworks, mc_rtc is based on spatial vectors.

Spatial vector algebra

If you are not familiar with spatial vector algebra and want to get started with it for the purpose of understanding this controller, I recommend checking out the following introductory resources:

Note on rotation matrices

An important fact is that the rotation matrix of a Plücker transform is the inverse of that of an affine transform:

  • With an affine transform T = [R & p \\ 0 & 1], the rotation matrix R goes from the target frame to the source one. If we write frame subscripts explicitly, if the source frame is a and the target frame is b, then R = R_b_a, the rotation matrix from b to a.
  • With a Plücker transform X_a_b, the rotation matrix goes from the source frame to the target one, i.e. what you get in the code from X_a_b.rotation() is the rotation matrix R_a_b from a to b. It is the inverse of the rotation matrix you would get with an affine transform.