10 #ifndef EIGEN_LGSM_LIE_ALGEBRA_se3_H 11 #define EIGEN_LGSM_LIE_ALGEBRA_se3_H 28 template<
class Derived>
30 :
public MatrixBase<Derived>
34 typedef MatrixBase<Derived>
Base;
65 template<class OtherDerived> EIGEN_STRONG_INLINE Derived& operator=(const MatrixBase<OtherDerived>& other);
68 template<class OtherDerived> PlainObject
bracket(const
LieAlgebraBase<BaseType, OtherDerived>& a) const;
71 inline Group
exp(const Scalar precision = 1.e-6) const;
75 inline Matrix<Scalar, 6, 6> dexp() const;
83 inline Map<so3Element> getso3Element(){
return Map<so3Element>(this->
derived().get().template head<3>().data()); }
85 inline Map<const so3Element>
getso3Element()
const {
return Map<const so3Element>(this->
derived().get().template head<3>().data()); }
87 inline Map<Vector3>
getR3Element() {
return Map<Vector3>(this->
derived().get().template tail<3>().data()); }
89 inline Map<const Vector3>
getR3Element()
const {
return Map<const Vector3>(this->
derived().get().template tail<3>().data()); }
102 template<
class Derived>
106 this->
get() = other.
get();
110 template<
class Derived>
111 template<
class OtherDerived>
121 template<
class Derived>
122 template<
class OtherDerived>
125 OtherDerived>& a)
const 127 return PlainObject(this->getso3Element().cross(a.getso3Element()),
128 this->getso3Element().cross(a.getR3Element()) - a.getso3Element().cross(this->getR3Element()) );
142 template<
class Derived>
inline 144 LieAlgebraBase<Matrix<typename internal::traits<Derived>::Scalar, 6, 1>, Derived>
::exp(
const Scalar precision)
const 146 return Group(this->getso3Element().dexp().transpose() * this->getR3Element()
147 ,this->getso3Element().
exp());
151 template<
class Derived>
152 inline typename LieAlgebraBase<Matrix<typename internal::traits<Derived>::Scalar, 6, 1>, Derived >
::Matrix6 153 LieAlgebraBase<Matrix<typename internal::traits<Derived>::Scalar, 6, 1>, Derived>::dexp()
const 155 Matrix<Scalar, 6, 6> res;
158 res.template block<3,3>(0,0) = this->getso3Element().dexp();
159 res.template block<3,3>(3,3) = res.template block<3,3>(0,0);
160 res.template block<3,3>(0,3).setZero();
161 res.template block<3,3>(3,0) = this->getso3Element().d2exp(this->getR3Element());
182 template<
class Derived>
186 typedef MatrixBase<Derived>
Base;
210 inline Map<so3Element> getso3Element(){
return Map<so3Element>(this->
derived().get().template head<3>().data()); }
212 inline Map<const so3Element>
getso3Element()
const {
return Map<const so3Element>(this->
derived().get().template head<3>().data()); }
214 inline Map<Vector3>
getR3Element() {
return Map<Vector3>(this->
derived().get().template tail<3>().data()); }
216 inline Map<const Vector3>
getR3Element()
const {
return Map<const Vector3>(this->
derived().get().template tail<3>().data()); }
239 template<
typename Scalar>
241 :
public traits<LieAlgebraBase<Matrix<Scalar, 6, 1>, LieAlgebra<Matrix<Scalar, 6, 1> > > >
247 template<
typename Scalar,
int Options>
248 struct traits<Map<
LieAlgebra<Matrix<Scalar, 6, 1> >, Options> >
249 :
public traits<LieAlgebraDualBase<Matrix<Scalar, 6, 1>, LieAlgebraDual<Matrix<Scalar, 6, 1> > > >
255 template<
typename Scalar,
int Options>
256 struct traits<Map<const
LieAlgebra<Matrix<Scalar, 6, 1> >, Options> >
257 :
public traits<LieAlgebraDualBase<Matrix<Scalar, 6, 1>, LieAlgebraDual<Matrix<Scalar, 6, 1> > > >
265 template<
typename _Scalar>
class LieAlgebra<Matrix<_Scalar, 6, 1> > :
266 public LieAlgebraBase<Matrix<_Scalar, 6, 1>, LieAlgebra<Matrix<_Scalar, 6, 1> > >
275 EIGEN_INHERIT_ASSIGNMENT_OPERATORS(
LieAlgebra)
289 inline LieAlgebra(Scalar rx, Scalar ry, Scalar rz, Scalar vx, Scalar vy, Scalar vz) {
298 inline LieAlgebra(
const typename Base::so3Element& r,
const typename Base::Vector3& v) {
299 this->getR3Element() = v;
300 this->getso3Element() = r;
328 public LieAlgebraDualBase<Matrix<_Scalar, 6, 1>, LieAlgebraDual<Matrix<_Scalar, 6, 1> > >
343 inline LieAlgebraDual(Scalar rx, Scalar ry, Scalar rz, Scalar vx, Scalar vy, Scalar vz) {
344 m_coeffs << rx, ry, rz, vx, vy, vz;
346 inline LieAlgebraDual(
const typename Base::so3Element& r,
const typename Base::Vector3& v) {
347 this->getR3Element() = v;
348 this->getso3Element() = r;
Matrix< Scalar, 3, 1 > Vector3
Map< const Vector3 > getR3Element() const
internal::traits< Derived >::Coefficients Coefficients
LieAlgebra(const BaseType &g)
Class describing an element of a Lie Algebra.
Map< const so3Element > getso3Element() const
MatrixBase< Derived > Base
Map< const Vector3 > getR3Element() const
LieAlgebraDual(Scalar rx, Scalar ry, Scalar rz, Scalar vx, Scalar vy, Scalar vz)
LieAlgebra(const typename Base::so3Element &r, const typename Base::Vector3 &v)
LieAlgebra(Scalar rx, Scalar ry, Scalar rz, Scalar vx, Scalar vy, Scalar vz)
LieAlgebraDual(const Matrix< Scalar, 6, 1 > &g)
const Derived & derived() const
Matrix< Scalar, 6, 1 > Coefficients
LieAlgebraDualBase< Matrix< _Scalar, 6, 1 >, LieAlgebraDual< Matrix< _Scalar, 6, 1 > > > Base
Matrix< Scalar, 6, 1 > BaseType
LieAlgebraDual(const typename Base::so3Element &r, const typename Base::Vector3 &v)
Map< Matrix< Scalar, 6, 1 >, Options > Coefficients
Group exp(Scalar precision=1.e-6) const
Matrix< Scalar, 6, 1 > BaseType
internal::traits< LieAlgebraDual< Matrix< Scalar, 6, 1 > > >::Coefficients Coefficients
LieAlgebra(const LieAlgebra &g)
LieGroup< Array< Scalar, 7, 1 > > Group
#define LIE_INHERIT_MATRIX_BASE(r, c)
Map< Vector3 > getR3Element()
LieAlgebraDual(const LieAlgebraDual &g)
internal::traits< Derived >::Group Group
Map< Vector3 > getR3Element()
LieAlgebraBase< Matrix< _Scalar, 6, 1 >, LieAlgebra< Matrix< _Scalar, 6, 1 > > > Base
Base class for all Lie Algebra class.
LieGroup< Array< Scalar, 7, 1 > > Group
Matrix< Scalar, 6, 6 > Matrix6
Class describing an element of a Lie Group.
MatrixBase< Derived > Base
Map< const so3Element > getso3Element() const
internal::traits< LieAlgebra< Matrix< Scalar, 6, 1 > > >::Coefficients Coefficients
Class describing an element of a Lie algebra dual.
Matrix< Scalar, 3, 1 > Vector3
internal::traits< Derived >::Coefficients Coefficients
PlainObject bracket(const LieAlgebraBase< BaseType, OtherDerived > &a) const
Map< const Matrix< Scalar, 6, 1 >, Options > Coefficients
LieGroup< Array< Scalar, 7, 1 > > Group
LieAlgebra< BaseType > PlainObject