28 template<
typename G,
typename H>
32 typedef std::pair<G, H> Base;
64 return this->inverse() * g;
70 enum {dimension = dimension1 + dimension2};
71 inline static size_t Dim() {
return dimension;}
72 inline size_t dim()
const {
return dimension;}
74 typedef Eigen::Matrix<double, dimension, 1> TangentVector;
78 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none)
const {
79 if (H1||H2)
throw std::runtime_error(
"ProductLieGroup::retract derivatives not implemented yet");
85 ChartJacobian H1 = boost::none, ChartJacobian H2 = boost::none)
const {
86 if (H1||H2)
throw std::runtime_error(
"ProductLieGroup::localCoordinates derivatives not implemented yet");
98 typedef Eigen::Matrix<double, dimension, dimension> Jacobian;
99 typedef Eigen::Matrix<double, dimension1, dimension1> Jacobian1;
100 typedef Eigen::Matrix<double, dimension2, dimension2> Jacobian2;
104 ChartJacobian H2 = boost::none)
const {
105 Jacobian1 D_g_first; Jacobian2 D_h_second;
110 H1->template topLeftCorner<dimension1,dimension1>() = D_g_first;
111 H1->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
113 if (H2) *H2 = Jacobian::Identity();
117 ChartJacobian H2 = boost::none)
const {
118 Jacobian1 D_g_first; Jacobian2 D_h_second;
123 H1->template topLeftCorner<dimension1,dimension1>() = D_g_first;
124 H1->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
126 if (H2) *H2 = Jacobian::Identity();
130 Jacobian1 D_g_first; Jacobian2 D_h_second;
135 D->template topLeftCorner<dimension1,dimension1>() = D_g_first;
136 D->template bottomRightCorner<dimension2,dimension2>() = D_h_second;
140 static ProductLieGroup Expmap(
const TangentVector& v, ChartJacobian Hv = boost::none) {
141 if (Hv)
throw std::runtime_error(
"ProductLieGroup::Expmap derivatives not implemented yet");
146 static TangentVector Logmap(
const ProductLieGroup& p, ChartJacobian Hp = boost::none) {
147 if (Hp)
throw std::runtime_error(
"ProductLieGroup::Logmap derivatives not implemented yet");
155 return compose(ProductLieGroup::Expmap(v));
158 return ProductLieGroup::Logmap(between(g));
165 template<
typename G,
typename H>
ProductLieGroup()
Default constructor yields identity.
Definition: ProductLieGroup.h:40
Base class and basic functions for Lie types.
Template to construct the product Lie group of two other Lie groups Assumes Lie group structure for G...
Definition: ProductLieGroup.h:29
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition: OptionalJacobian.h:39
Group operator syntax flavors.
Definition: Group.h:37
Lie Group Concept.
Definition: Lie.h:268
A helper class that implements the traits interface for GTSAM lie groups.
Definition: Lie.h:177
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
Global functions in a separate testing namespace.
Definition: chartTesting.h:28