1 #ifndef DEF_COMMON_SO3_GROUP 2 #define DEF_COMMON_SO3_GROUP 7 #include <Eigen/Geometry> 16 template <
typename T_SCALAR_TYPE>
20 Eigen::Quaternion<T_SCALAR_TYPE> m_q;
27 : m_q(Eigen::Quaternion<T_SCALAR_TYPE>::Identity())
38 const T_SCALAR_TYPE& x,
39 const T_SCALAR_TYPE& y,
40 const T_SCALAR_TYPE& z)
46 template<
class Derived>
53 template<
typename Derived>
57 template<
class OtherScalar,
int OtherOptions>
66 Eigen::Quaternion<T_SCALAR_TYPE>
71 q (
const Eigen::Quaternion<T_SCALAR_TYPE>& q_)
72 { m_q = q_; m_q.normalize(); }
76 q (
const T_SCALAR_TYPE& w,
77 const T_SCALAR_TYPE& x,
78 const T_SCALAR_TYPE& y,
79 const T_SCALAR_TYPE& z)
80 { m_q = Eigen::Quaternion<T_SCALAR_TYPE>(w,x,y,z); m_q.normalize(); }
84 q (
const T_SCALAR_TYPE* data)
85 { m_q = Eigen::Quaternion<T_SCALAR_TYPE>(data); m_q.normalize(); }
88 template<
class Derived>
90 q (
const Eigen::QuaternionBase<Derived>& other)
91 { m_q = Eigen::Quaternion<T_SCALAR_TYPE>(other); m_q.normalize(); }
95 q (
const Eigen::AngleAxis<T_SCALAR_TYPE>& aa)
96 { m_q = Eigen::Quaternion<T_SCALAR_TYPE>(aa); m_q.normalize(); }
99 template<
typename Derived>
101 q (
const Eigen::MatrixBase<Derived>& other)
102 { m_q = Eigen::Quaternion<T_SCALAR_TYPE>(other); m_q.normalize(); }
105 template<
class OtherScalar,
int OtherOptions>
107 q (
const Eigen::Quaternion<OtherScalar,OtherOptions>& other)
108 { m_q = Eigen::Quaternion<T_SCALAR_TYPE>(other); m_q.normalize(); }
130 { m_q *= g.
q(); m_q.normalize(); }
151 Eigen::Matrix<T_SCALAR_TYPE,3,1>
161 Eigen::Matrix<T_SCALAR_TYPE,3,1>
162 operator* (Eigen::Matrix<T_SCALAR_TYPE,3,1>
const& v)
const 163 {
return m_q._transformVector(v); }
168 Eigen::Matrix<T_SCALAR_TYPE,3,3>
170 {
return m_q.toRotationMatrix(); }
175 Eigen::Matrix<T_SCALAR_TYPE,3,3>
177 {
return Eigen::AngleAxis<T_SCALAR_TYPE>(m_q); }
183 Eigen::Matrix<T_SCALAR_TYPE,3,1>
186 Eigen::AngleAxis<T_SCALAR_TYPE> aa(m_q);
187 return aa.angle()*aa.axis();
192 {
return m_q.isApprox(g.
q()); }
198 template <
typename T_SCALAR_TYPE>
200 operator<< (std::ostream& stream, SO3::Group<T_SCALAR_TYPE>
const& G)
202 stream << G.toRotationMatrix();
Eigen::Matrix< T_SCALAR_TYPE, 3, 3 > toRotationMatrix() const
Definition: SO3_Group.hpp:169
Definition: SO3_Group.hpp:17
Eigen::Matrix< T_SCALAR_TYPE, 3, 1 > toVector() const
Definition: SO3_Group.hpp:184
Definition: SO3_Algebra.hpp:13
Eigen::Matrix< T_SCALAR_TYPE, 3, 3 > toAxisAngle() const
Definition: SO3_Group.hpp:176
Eigen::Matrix< T_SCALAR_TYPE, 3, 1 > transformVector(const Eigen::Matrix< T_SCALAR_TYPE, 3, 1 > &v) const
Definition: SO3_Group.hpp:152
Definition: LieGroupBase.hpp:10
Eigen::Quaternion< T_SCALAR_TYPE > q() const
Definition: SO3_Group.hpp:67
Group< T_SCALAR_TYPE > inverse() const
Definition: SO3_Group.hpp:116
Group< T_SCALAR_TYPE > operator*(Group< T_SCALAR_TYPE > const &g) const
Definition: SO3_Group.hpp:140
static Group< T_SCALAR_TYPE > Identity()
Definition: SO3_Group.hpp:123