rbdl / rbdl

RBDL is a C++ library that contains some essential and efficient rigid body dynamics algorithms such as the Articulated Body Algorithm (ABA) for forward dynamics, Recursive Newton-Euler Algorithm (RNEA) for inverse dynamics, the Composite Rigid Body Algorithm (CRBA) for the efficient computation of the joint space inertia matrix and is also able to compute forward dynamics with external contact constraints and collision impulses. Furthermore it has some basic support for forward and inverse kinematics.
Other
543 stars 147 forks source link

Get coriolis matrix or transpose of coriolis and centrifugal * velocity #21

Open ad1t7a opened 4 years ago

ad1t7a commented 4 years ago

Is it possible to get the coriolis matrix for a given model? I realize that there is no direct API call, but I wanted to calculate Ctranspose * qdot for my work. Is there a way to get this value?

martinfelis commented 4 years ago

Can you specify what do you mean by coriolis matrix? Do you maybe mean the vector returned by NonlinearEffects (q, qdot, f_ext) (https://rbdl.github.io/d6/d63/group__dynamics__group.html#ga1782fbfb223812259d73fec58deff94e)?

thanhtam-h commented 3 years ago

Martin, the NonlinearEffects term (N) in rbdl library can be expressed as: N = C(q,qdot)*qdot What he meant is, how to get only C(q,qdot) separately. I think that he want to use it to estimate momentum of a robot manipulator for collision detection.

chinahuangyong commented 2 years ago

Martin, the NonlinearEffects term (N) in rbdl library can be expressed as: N = C(q,qdot)*qdot What he meant is, how to get only C(q,qdot) separately. I think that he want to use it to estimate momentum of a robot manipulator for collision detection.

i also meet this problem, solved it?

DaegyuLim commented 1 year ago

One of the easiest ways to circumvent this problem is by using 'Mdotqdot - Cqdot' instead of 'Ctranspose qdot' from the relationship 'Mdot = C + C^T'. Mdot can be obtained from simple numerical derivatives. Cqdot is equal to the NonlinearEffects API values - gravity vector. But this method produces some errors on Mdot especially when the velocity is fast. C matrix also can be obtained from the inertia matrix M using the Christoffel Symbol method. But this method costs a lot of computation if the DoF of the model is large (maybe O(N^3)). I'm trying to implement a recent work presented in this paper (https://arxiv.org/abs/2010.01033) which offers MATLAB code(https://github.com/ROAM-Lab-ND/spatial_v2_extended).