1- struct MetricLieGroup{
2- 𝔽,
3- O <: AbstractGroupOperation ,
4- M <: ManifoldsBase.AbstractManifold{𝔽} ,
5- L <: LieGroup{𝔽, O, M} ,
6- G <: RiemannianMetric ,
7- } <: AbstractLieGroup{𝔽, O, M}
8- lie_group:: L
9- metric:: G
10- end
11-
12- ManifoldsBase. base_manifold (G:: MetricLieGroup ) = G. lie_group
13- function ManifoldsBase. submanifold_component (G:: MetricLieGroup , args... )
14- return submanifold_component (G. lie_group, args... )
15- end
16- function ManifoldsBase. submanifold_components (G:: MetricLieGroup , args... )
17- return submanifold_components (G. lie_group, args... )
18- end
19- LieGroups. LieAlgebra (G:: MetricLieGroup ) = LieAlgebra (base_manifold (G))
20- LieGroups. inv! (G:: MetricLieGroup , args... ) = inv! (base_manifold (G), args... )
21- LieGroups. inv (G:: MetricLieGroup , args... ) = inv (base_manifold (G), args... )
22- LieGroups. compose! (G:: MetricLieGroup , args... ) = compose! (base_manifold (G), args... )
23- LieGroups. compose (G:: MetricLieGroup , args... ) = compose (base_manifold (G), args... )
24- function LieGroups. identity_element (G:: MetricLieGroup , args... )
25- return identity_element (base_manifold (G), args... )
26- end
27- function LieGroups. identity_element! (G:: MetricLieGroup , args... )
28- return identity_element! (base_manifold (G), args... )
29- end
1+ using LieGroups: MetricLieGroup
302
313# Left Invariant Rigid Body Kinematics Metric CrokeKumar eq 61.
324# A family of left invariant metrics:
4618SOnxRn_MetricManifoldType =
4719 Union{typeof (SOnxRn_MetricManifold (2 )), typeof (SOnxRn_MetricManifold (3 ))}
4820
21+ #
22+ LieGroups. LieAlgebra (G:: SOnxRn_MetricManifoldType ) = LieAlgebra (G. lie_group)
23+
4924# geodesics for metric (61) are the same as geodesics on the product manifold SO(3)×IR3
5025function Manifolds. exp (M:: SOnxRn_MetricManifoldType , X)
51- G = base_manifold (M)
52- ε = identity_element (M , typeof (X))
26+ G = base_lie_group (M)
27+ ε = identity_element (G , typeof (X))
5328 return exp (base_manifold (G), ε, X)
5429end
5530
@@ -60,7 +35,7 @@ function Manifolds.exp!(M::SOnxRn_MetricManifoldType, g, X)
6035end
6136
6237function ManifoldsBase. log (M:: SOnxRn_MetricManifoldType , p)
63- G = base_manifold (M)
38+ G = base_lie_group (M)
6439 # ε = identity_element(G, typeof(p))
6540 # X = log(base_manifold(G), ε, p)
6641 PG = ProductLieGroup (map (LieGroup, G. manifold. manifolds, G. op. operations)... )
0 commit comments