|Re: [eigen] Potential unsupported module: Lie Groups|
[ Thread Index |
| More lists.tuxfamily.org/eigen 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
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
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
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 orocos.org). 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
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
Actually, the recommended method is to write a plugin
(http://eigen.tuxfamily.org/dox-3.0/TopicCustomizingEigen.html) 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.