Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement algorithm to compute the C Coriolis Matrix such that dotM = C + C^T #745

Open
traversaro opened this issue Oct 9, 2020 · 9 comments

Comments

@traversaro
Copy link
Member

It is useful to compute the Coriolis matrix in a numerical efficient manner. Two initial references are :

For reference, the code to compute the mass matrix (for floating base systems, and using the left-trivialized base velocity) is:

  • bool CompositeRigidBodyAlgorithm(const Model& model,

    The resulting matrix is then processed in
    bool KinDynComputations::getFreeFloatingMassMatrix(MatrixDynSize& freeFloatingMassMatrix)
    to support also the possibility to express the base velocity as right-trivialized or mixed convention (that is the default that we typically use).
    This code basically implements the CRBA algorithm you can find in Featherstone RBDA book, but adapted for floating base systems.
@traversaro
Copy link
Member Author

cc @singhbal-baljinder @robotology/iit-dynamic-interaction-control

@traversaro
Copy link
Member Author

Apparently an algorithm similar to the one published in Numerical Methods to Compute the CoriolisMatrix and Christoffel Symbols for Rigid-BodySystems. was added in Pinocchio 3 years ago in stack-of-tasks/pinocchio@69cccea, but I am not sure if that one was implemented from some kind of written reference, perhaps @jcarpent has some reference for that.

@jcarpent
Copy link

jcarpent commented Oct 9, 2020

If you want, this feature is already implemented in Pinocchio: https://github.com/stack-of-tasks/pinocchio/blob/820d0f85fbabddce20924a6e0f781fb2be5029e9/src/algorithm/rnea.hpp#L152.
I did that for the analytical derivatives at the beginning ;)

@jcarpent
Copy link

jcarpent commented Oct 9, 2020

Oh, amazing, we had the same thoughts. I don't have any reference, but I may write a technical note if you want.

@traversaro
Copy link
Member Author

Oh, amazing, we had the same thoughts. I don't have any reference, but I may write a technical note if you want.

Thanks @jcarpent for the quick reply! Don't worry, I think the code is enough as a reference. Writing it down with proper notation may be a perfect exercise for some of our students. : )

@jcarpent
Copy link

jcarpent commented Oct 9, 2020

Cool!

@GiulioRomualdi
Copy link
Member

I can try to tackle the problem, however I think I need a short meeting with @traversaro to better discuss the possible approaches

@traversaro
Copy link
Member Author

Sure, let's schedule it when you prefer using the Teams' scheduling helper.

@diegoferigo
Copy link
Member

diegoferigo commented Jun 10, 2024

FYI I finalized a pretty slow implementation of the Coriolis matrix (i.e. not implemented on the kinematic tree) in ami-iit/jaxsim#172. It's not useful for real-time computation (unless 500 µs for 20 DoFs is acceptable), but at least it can provide a ground truth in all three velocity representations (inertial-fixed, body-fixed, and mixed) if anyone is willing to explore/implement more efficient solutions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants