Re: [eigen] Eigen and rigid body simulation

```* 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 specialization.
```
```
```* 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
Group.
```
```
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).
```
```
Indeed

```
```* 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
or
SomeOtherMatrix * Translation
which is completely different semantics than a vector had. So you need
```