-
Notifications
You must be signed in to change notification settings - Fork 457
Description
Hi guys.
First let me explain some notation.
A Jacobian Jabc is a jacobian that when post-multiplied by the joint velocities, calculate the spatial velocity of a point c, relative to a frame b, expressed in the coordinates of frame a.
Likewise, dJabc is the time-derivative of Jabc.
Some examples:
Joof @ dq
-> calculate the spatial velocity of a point coincident with the origin of frame f, relative to the origin o, in the coordinates of the origin o. This is equivalent to pin.ReferenceFrame.LOCAL_WORLD_ALIGNED
Jofo @ dq
-> calculate the spatial velocity of a point at the origin, relative to frame f, in the coordinates of the origin o. I think this is equivalent to pin.ReferenceFrame.WORLD, but I might be wrong?
Jfof @ dq
-> calculate the spatial velocity of a point coincident with the origin of frame f, relative to the origin o, in the coordinates of f. I think this is equivalent to pin.ReferenceFrame.LOCAL.
A SE3 transform Tab is the pose of frame a expressed in frame b
Does pinocchio provide any functionality for any of the following situations out of the box?
- Transforming some Jacobian Jabc to be evaluated in the coordinates of another frame k: Jabc -> Jkbc (i.e. using the rotation only adjoint action of Tak)
- Transforming some Jacobian Jabc to evaluate the velocity at some other point k: Jabc -> Jabk (i.e. "spatial velocity shift", should be something like
Y = np.eye(6,6); Y.topRight() = pin.skew<vector from c to k expressed in a>
) - Transforming some Jacobian Jabc to evaluate the velocity relative to some other frame k: Jabc -> Jakc (I'm not certain what this operation is. I guess it's related to Y, above)
- Combinations of the above (e.g. Joof -> Jkki, where c is fixed relative to f, and k is fixed relative to o, should look something like
Ad(Tok) @ Y(f->i) @ Joof)
- Identical functions for time derivative Jacobians. Final example only via chain rule:
dJoof->dJkki
dJkki = ad(Vok) @ Ad(Tok) @ Y(f->i) @ Joof + Ad(Tok) @ dY(f->i) @ Joof + Ad(Tok) @ Y(f->i) @ dJoof
etc.
Even functionality for ad(V) would be helpful - I am aware that we have pin.SE3.toActionMatrix() (why isn't this called adjoint?), but there doesn't seem to be a pin.Motion.toActionMatrix() or pin.Motion.toAdjointMatrix().
Of course I can implement these myself, but it's hard to debug errors, and manually writing in linear vs angular-first representations etc. is error-prone.
For context, I'm trying to calculate Jacobians and derivatives of e.g. instantaneously lumped bodies, or artificial inertial frames etc.