-
Notifications
You must be signed in to change notification settings - Fork 72
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.
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:
- A short introduction to SpaceVecAlg and RBDyn for the spatial-vector and rigid-body libraries used in this controller;
- A Beginner's Guide to 6-D Vectors for the core concepts they rely on.
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 matrixR
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, thenR = 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 fromX_a_b.rotation()
is the rotation matrixR_a_b
from a to b. It is the inverse of the rotation matrix you would get with an affine transform.
All content on this wiki is under the CC-BY 4.0 license.