Skip to content

Transforming of Jacobian / Jacobian Time Derivative Functionality #2740

@Nickick-ICRS

Description

@Nickick-ICRS

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?

  1. 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)
  2. 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>)
  3. 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)
  4. 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)
  5. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions