Go to the documentation of this file.
17 template <
template <
class>
class TLieGroup>
21 static int constexpr
kDof = LieGroupF64::kDof;
22 static int constexpr
kNumParams = LieGroupF64::kNumParams;
24 using Tangent = Eigen::Vector<double, kDof>;
25 using Params = Eigen::Vector<double, kNumParams>;
33 double const* delta_raw,
34 double* t_plus_delta_raw)
const override {
35 LieGroupF64 t = LieGroupF64::fromParams(Eigen::Map<Params const>(t_raw));
36 Eigen::Map<Tangent const> delta(delta_raw);
38 Eigen::Map<Params> out_params(t_plus_delta_raw);
39 LieGroupF64 t_plus_delta = t * LieGroupF64::exp(delta);
40 out_params = t_plus_delta.params();
48 bool PlusJacobian(
double const* t_raw,
double* jacobian_raw)
const override {
49 LieGroupF64 t = LieGroupF64::fromParams(Eigen::Map<Params const>(t_raw));
50 Eigen::Map<Eigen::Matrix<
54 kDof == 1 ? Eigen::ColMajor : Eigen::RowMajor>>
55 jacobian(jacobian_raw);
56 jacobian = t.dxThisMulExpXAt0();
60 bool Minus(
double const* y_raw,
double const* x_raw,
double* y_minus_x_raw)
62 LieGroupF64 y = LieGroupF64::fromParams(Eigen::Map<Params const>(y_raw));
63 LieGroupF64 x = LieGroupF64::fromParams(Eigen::Map<Params const>(x_raw));
64 Eigen::Map<Tangent> out_params(y_minus_x_raw);
65 out_params = (x.inverse() * y).log();
69 bool MinusJacobian(
double const* x_raw,
double* jacobian_raw)
const override {
70 LieGroupF64 x = LieGroupF64::fromParams(Eigen::Map<Params const>(x_raw));
71 Eigen::Map<Eigen::Matrix<double, kDof, kNumParams, Eigen::RowMajor>>
72 jacobian(jacobian_raw);
73 jacobian = x.dxLogThisInvTimesXAtThis();
78 return LieGroupF64::kNumParams;
81 [[nodiscard]]
int TangentSize()
const override {
return LieGroupF64::kDof; }
bool Minus(double const *y_raw, double const *x_raw, double *y_minus_x_raw) const override
Definition: manifold.h:60
int AmbientSize() const override
Definition: manifold.h:77
bool PlusJacobian(double const *t_raw, double *jacobian_raw) const override
Jacobian of LieGroup plus operation for Ceres.
Definition: manifold.h:48
Eigen::Vector< double, kDof > Tangent
Definition: manifold.h:24
TLieGroup< double > LieGroupF64
Definition: manifold.h:20
static constexpr int kDof
Definition: manifold.h:21
Definition: manifold.h:13
Eigen::Vector< double, kNumParams > Params
Definition: manifold.h:25
static constexpr int kNumParams
Definition: manifold.h:22
Templated local parameterization for LieGroup [with implemented LieGroup::Dx_this_mul_exp_x_at_0() ].
Definition: manifold.h:18
bool MinusJacobian(double const *x_raw, double *jacobian_raw) const override
Definition: manifold.h:69
bool Plus(double const *t_raw, double const *delta_raw, double *t_plus_delta_raw) const override
LieGroup plus operation for Ceres.
Definition: manifold.h:31
int TangentSize() const override
Definition: manifold.h:81