76 lines
1.9 KiB
C++
76 lines
1.9 KiB
C++
/* ----------------------------------------------------------------------------
|
|
|
|
* GTSAM Copyright 2010, Georgia Tech Research Corporation,
|
|
* Atlanta, Georgia 30332-0415
|
|
* All Rights Reserved
|
|
* Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
|
|
|
* See LICENSE for the license information
|
|
|
|
* -------------------------------------------------------------------------- */
|
|
|
|
/**
|
|
* @file LieScalar.h
|
|
* @brief A wrapper around scalar providing Lie compatibility
|
|
* @author Kai Ni
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <gtsam/base/Testable.h>
|
|
#include <gtsam/base/Lie.h>
|
|
|
|
namespace gtsam {
|
|
|
|
/**
|
|
* LieScalar is a wrapper around double to allow it to be a Lie type
|
|
*/
|
|
struct LieScalar : public Lie<LieScalar>, Testable<LieScalar> {
|
|
|
|
/** default constructor - should be unnecessary */
|
|
LieScalar() {}
|
|
|
|
/** wrap a double */
|
|
LieScalar(double d) : d_(d) {}
|
|
|
|
/** print @param s optional string naming the object */
|
|
inline void print(const std::string& name="") const {
|
|
std::cout << name << ": " << d_ << std::endl;
|
|
}
|
|
|
|
/** equality up to tolerance */
|
|
inline bool equals(const LieScalar& expected, double tol=1e-5) const {
|
|
return fabs(expected.d_ - d_) <= tol;
|
|
}
|
|
|
|
/**
|
|
* Returns dimensionality of the tangent space
|
|
*/
|
|
inline size_t dim() const { return 1; }
|
|
|
|
/**
|
|
* Returns Exponential map update of T
|
|
* Default implementation calls global binary function
|
|
*/
|
|
inline LieScalar expmap(const Vector& v) const { return LieScalar(d_ + v(0)); }
|
|
|
|
/** expmap around identity */
|
|
static inline LieScalar Expmap(const Vector& v) { return LieScalar(v(0)); }
|
|
|
|
/**
|
|
* Returns Log map
|
|
* Default Implementation calls global binary function
|
|
*/
|
|
inline Vector logmap(const LieScalar& lp) const {
|
|
return Vector_(1, lp.d_ - d_);
|
|
}
|
|
|
|
/** Logmap around identity - just returns with default cast back */
|
|
static inline Vector Logmap(const LieScalar& p) { return Vector_(1, p.d_); }
|
|
|
|
|
|
private:
|
|
double d_;
|
|
};
|
|
} // \namespace gtsam
|