Re: [eigen] Potential unsupported module: Lie Groups

[ Thread Index | Date Index | More Archives ]

Le 07/05/2012 14:19, Hauke Strasdat a écrit :
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:

Actually, I quite like the design of 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've made the design of LGSM and I'm happy to see that you are interested in it. As you said, the hat-operator and vee-operator can be easily added. At least in the interface of LieGroup and LieAlgebra.

I think it would be a great idea to add an unsupported module based on
this proposal.

I also wish to add it as an unsupported module in Eigen since some people are interested in it (see I started two years ago and see Maxime Tournier's reply in this thread).

There is still an issue, how to interface Lie group formalism used for 3d geometry with the Eigen geometry module.

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...

Yes, I agree. In fact, there are two parts in LGSM, the Lie Group part (LieGroup and LieAlgebra classes) which is pure linear algebra and the Solid Mechanism part which inherits from the Lie Group object and are easier to use for people working on robotics or rigid simulations (see for example KDL from It can be split in two modules: the first one named Lie Group and extended to other Lie group and the second one named LGSM with the solid mechanism objects.

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.

It also avoids the problem of differents meaning of log or exp of matrices, quaternion or Lie group. It also enforces type checking by limiting operations between members of Lie groups, or Lie algebras.

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").

There are still some issues that are not documented. When I made the design, the Eigen class hierarchy was different and there are some build errors when you are using block or segment on LieAlgebra, since LieAlgebra objects inherit from MatrixBase. And I'm not confortable enough with Eigen to insert the LieAlgebra object easily in the Eigen class hierarchy. Actually, the recommended method is to write a plugin ( but as I previously mentioned, type checking, collision on log, exp, etc remain an issue. The second proposed solution is to inherit from Plain Matrix type, but then we lose the block, map and other matrixXpr object which are a main feature of Eigen.

Mathieu Gautier

Mail converted by MHonArc 2.6.19+