|Re: [eigen] Eigen and rigid body simulation|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
* a rotation 3d is an element of the special orthogonal group SO(3) which is
a Lie group. We choose to represent it with a quaternion.
That I understood. Do you think that there is a fundamental reason why
you specialize on quaternions? Just a question, I guess it depends on
technical details. Because otherwise you could leverage our
RotationBase infrastructure, which is quite nice, it exactly means "3D
rotation" but allows different kinds of storage, at no cost (in pure
Eigen style, everything is done at compile time).
We use only quaternion for their efficiency, but in order to
generalized, it would be better to use RotationBase with appropriate
* a displacement is an element of the special euclidian group SE(3) = SO(3)
* R^3 (rotations and translations = direct isometries) which is also a Lie
Ok, that too I understood. In Eigen terms, that would be a pair
(Translation, RotationBase). However so far you specialized on the
case where the rotation is reprensented by a quaternion. So that would
be a pair (Translation, Quaternion).
* a Wrench is a member to the dual Lie aglebra se*(3) of se(3).
* a Torque is a member of so*(3) dual of so(3).
Is there a canonical duality? Or does e.g. the natural dot product on
R^3 give you at least a "usual" duality?
If there is a reasonable "usual" duality then there's no need to
implement a separate class for the dual, just implementing the
bilinear form is enough. (Think of how we don't have a class for
linear forms on R^n, the dual of R^n; instead we have the dot product
function; so a linear form can just be represented by the vector that
is dual to it in the usual dot product, and the dot product gives you
the pairing between the vector space and its dual).
I may not clearly understand what you mean by canonical or "usual". But,
I'd say that's a "usual" duality. Generalized forces "wrench" are build
from Twist and the notion of power :
transpose(W)*T = p
so this is a symmetric bilinear form, like the dot product in R^n. But
it's interesting to have the distinction between Twist and Wrench from a
mechanical point of view.
But if there is a reason to add specify methods or operators there,
then I understand that you want to keep them as separate classes
Actually, there's no specific methods for one or the other class, just
the distinction is important.
Or did you mean lowercase so3 and se3? Then yes I very much agree
with your idea, except that "Element" is a bit clumsy, and we must
find a way of putting "so" and "se" in lowercase. Not easy! Perhaps:
yes, se3 and so3.
Lie_so3 and Lie_se3 ?
yes, and users which will use this module will typedef these elements
with a name from their specific field of application.
It depends a lot on how it's going to be used. As I said, we rejected
creating a Point class because it was going to be used exactly like a
Vector. On the other hand we created a Translation class because for
example it allows to do:
Translation * SomeOtherVector
SomeOtherMatrix * Translation
which is completely different semantics than a vector had. So you need
to think about use cases.
OK, I'll think about it.