Re: [eigen] Potential unsupported module: Lie Groups

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


On Sun, May 6, 2012 at 7:20 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
> Last year, something reminiscent of this was announced on this list:
> http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2011/08/msg00089.html

Actually, I quite like the design of LGSM:
https://bitbucket.org/jsreng/eigen/src/9220daa0078a/unsupported/Eigen/src/Lgsm.
It has similar features to my proposal (e.g. quaternion-based SO(3),
vector-based Lie brackets, adjoint...), but offers nice interfaces
(LieGroup, LieAlgebra).  Some features seem to be missing (e.g.
hat-operator & vee-operator which are especially useful to test the
correctness of the Lie bracket in unit tests), but these could be
added easily.
I think it would be a great idea to add an unsupported module based on
this proposal.
Then, we could merge other Lie group/algebra classes and unit tests
into it. LGSM offers at the moment SO(3) and SE(3).
Just, I think we should rename LGSM to "LieGroups" or something else
more general...
(Maybe, we could also add a more general interface "Manifold", so that
the 2-sphere S^2 could added too.)

> I'm afraid you missed a singularity for log of the negative unit quaternion
> (w=-1, v=0).
Oh, yes, thanks for that! I checked for singularities using
"exp(log(x)) = x" tests,
but thereby I ignored the quaternion double cover. I fixed it and
updated my tests.
(An atan2-based implementation seems to be a good strategy
for non-unit quaternions. There is also one in LGSM.)

> I think a first step could be to integrate quaternion exp and log into
> Eigen, maybe also add scaled-axis representation (i.e. the result of
> SO3::log) as another representation for rotations.

This would be nice. Still, I'd like the idea of a Lie Group module.
In my opinion, the Lie group module should offer an convenient and
unified API, while
some implementation could be in the Geometry module in order
to avoid code duplicates.
(e.g. SO3::log could be implemented as "Vector3
Quaternion<...>::GetRotationVector(...) const").

Hauke S.



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/