class SO3
{
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
//构造函数
SO3 ();
SO3 (const SO3 & other);
explicit
SO3 (const Matrix3d & _R);//从旋转矩阵 Matrix3d构造
explicit
SO3 (const Quaterniond & unit_quaternion);//从单位四元数构造
SO3 (double rot_x,
double rot_y,
double rot_z);//从欧拉角构造,注意顺序,依次旋转xyz轴
//
void
operator= (const SO3 & so3);
SO3
operator* (const SO3 & so3) const;
void
operator*= (const SO3 & so3);
Vector3d
operator* (const Vector3d & xyz) const;
//常用函数
SO3
inverse () const;//返回逆
Matrix3d
matrix () const;//返回对应的3×3旋转矩阵
Matrix3d
Adj () const;返回对应的伴随矩阵
Matrix3d
generator (int i);
Vector3d
log () const;//返回对应的李代数(旋转向量)
//静态函数
static SO3
exp (const Vector3d & omega);//返回李代数(旋转向量)对应的SO3
static SO3
expAndTheta (const Vector3d & omega,
double * theta);
static Vector3d
log (const SO3 & so3);//返回SO3对应的李代数
static Vector3d
logAndTheta (const SO3 & so3,
double * theta);
static Matrix3d
hat (const Vector3d & omega);//返回旋转向量对应的反对称矩阵
static Vector3d
vee (const Matrix3d & Omega);//返回反对称矩阵对应的旋转向量
static Vector3d
lieBracket (const Vector3d & omega1,
const Vector3d & omega2);
static Matrix3d
d_lieBracketab_by_d_a (const Vector3d & b);
void
setQuaternion (const Quaterniond& quaternion);
const Quaterniond & unit_quaternion() const
{
return unit_quaternion_;
}
static const int DoF = 3;
protected:
Quaterniond unit_quaternion_;//SO3是以单位四元数的形式保存并执行各类运算的
};
//重载<<输出的是对应的李代数
inline std::ostream& operator <<(std::ostream & out_str,
const SO3 & so3)
{
out_str << so3.log().transpose() << std::endl;
return out_str;
}
} // end namespace
Sophus::SO3
最新推荐文章于 2024-12-17 19:25:44 发布