四元数、变换矩阵、欧拉角转换关系

四元数to变换矩阵

   	Eigen::Quaterniond quaternion(w, x, y, z);
    Eigen::Matrix3d rotation_matrix;
    rotation_matrix = quaternion.matrix();
    transformation.rotate(rotation_matrix);
    transformation.pretranslate(Eigen::Vector3d(tx, ty, tz));
    cout << transformation.matrix() << endl;

变换矩阵to四元数

transfor为已知的变换矩阵,从icp配准得到的就是

//获取变换矩阵,求四元数q和位移t_vector
    Eigen::Matrix4f transfor;
    transfor = icp.getFinalTransformation();
    Eigen::Matrix3f r_matrix = Eigen::Matrix3f::Identity();
    for(int i=0;i<3;i++)
    {
   
   
	for(int j=0;j<3;j++)
	{
   
   
	    r_matrix(i,j) = transfor(i,j);
	}
    }
    Eigen::Vector3f t_vector(transfor(0,3),transfor(1,3),transfor(2,3));
    Eigen::Quaternionf q;
    q = Eigen::Quaternionf ( r_matrix );

欧拉角转换to旋转矩阵

参考:https://zhuanlan.zhihu.com/p/144032401
https://blog.youkuaiyun.com/shyjhyp11/article/details/111701127
Eigen库:

    Eigen::Vector3d eulerAngle(1.0, 2.0, 3.0);//欧拉角
    Eigen::AngleAxisd rollAngle(Eigen::AngleAxisd(eulerAngle(0),Eigen::Vector3d::UnitX()));
    Eigen::AngleAxisd pitchAngle(Eigen::AngleAxisd(eulerAngle(1),Eigen::Vector3d::UnitY()));
    Eigen::AngleAxisd yawAngle(Eigen::AngleAxisd(eulerAngle(2),Eigen::Vector3d::UnitZ()))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值