Advice on implementing a new group... #681
-
|
Hi all - thanks for the nice work on ManifoldsBase.jl and Manifolds.jl. I'm in the process of trying to determine how best to implement a new group - specifically, the "group of extended poses," which is in fact the semidirect product of SE(3) and Notably, the group can be embedded in GL(6) and that's how I will use it, essentially exclusively. I'd like to develop a lightweight, matrix-based implementation - unsure whether to define a new group using Manifolds.jl (also unsure if there's a tutorial on implementing a new group?) or to try to use ManifoldsBase.jl only. Any advice would be appreciated; the best possible speed is important, and given the fixed size of the matrices involved, I intend to use StaticArrays.jl. Also, a rather silly q (as a newbie) - I'm uncertain why the representation size is given as the manifold dimension + 1? What am I missing? Calling J. |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 14 replies
-
|
For now we indeed do not yet have a tutorial on how to implement a (Lie) group – but hopefully the ManifoldsBase.jl tutorial on a manifold is a good starting point – e.g. on how our functions are usually meant to be implemented. this includes the important difference between the allocating and in-place (fast!) variants we usually have in mind. If you feel it is easier, then do not go the For the representation size – that is the array size used to represent points and tangent vectors for a certain manifold – which is unrelated to the dimension. Feel free to ask further questions along the way and if you like, a PR for new manifolds and/or groups is always welcome. |
Beta Was this translation helpful? Give feedback.
-
|
Hi! We don't currently have a tutorial for Lie groups but I think the best way to go is for example copy the implementation of Representing that group by 6x6 matrices is one way to go but it might not be totally efficient. You can also consider using Manifolds.jl interface generally can work with both |
Beta Was this translation helpful? Give feedback.
-
|
Following up on the above after far too long! I've continued to work with Julia and Manifolds.jl in my spare time (never sufficient). Hoping it's alright to slightly diverge from the original topic. I'm still working with various Lie groups and looking at the LieGroups.jl package - notably, I'm in engineering and we're used to working with matrix Lie groups. I wanted to ask about one of the design decisions for Manifolds.jl and LieGroups.jl, namely, passing a 'group' instance along with all calls to exp, log, etc. Typically, in our engineering work, it's most useful/easiest to deal with Lie group objects, so instead of having to call: X = log(SO3, g) it would be more convenient to call: X = log(g) where g is an element of SO(3) and a subtype of AbstractArray (or similar - note that I haven't fully thought this through). The approach is similar to what Rotations.jl does with quaternions (i.e., you don't need to pass an argument to identify a quaternion, you just pass an instance of the quaternion type). Perhaps there are use cases that I'm not familiar with or design choices that motivate the approach? I'd like to start building on top of LieGroups.jl, but want to make sure I understand its design first. Thanks! |
Beta Was this translation helpful? Give feedback.
There has been a recent work and discussion here that you can read for a start: JuliaRobotics/RoME.jl#701 .
IMUDeltaGroupis very similar to the group of extended poses.