eigin 欧拉角转换

参考:https://blog.csdn.net/weicao1990/article/details/86148828

欧拉角转其他

初始化欧拉角(Z-Y-X,即RPY, 先绕x轴roll,再绕y轴pitch,最后绕z轴yaw)

Eigen::Vector3d ea(0.785398, -0, 0);

 欧拉角转换为旋转矩阵

    Eigen::Matrix3d rotation_matrix3;
    rotation_matrix3 = Eigen::AngleAxisd(ea[0], Eigen::Vector3d::UnitZ()) * 
                       Eigen::AngleAxisd(ea[1], Eigen::Vector3d::UnitY()) * 
                       Eigen::AngleAxisd(ea[2], Eigen::Vector3d::UnitX());
    cout << "rotation matrix3 =\n" << rotation_matrix3 << endl;   

 欧拉角转换为四元数,

    Eigen::Quaterniond quaternion3;
    quaternion3 = Eigen::AngleAxisd(ea[0], Eigen::Vector3d::UnitZ()) * 
                  Eigen::AngleAxisd(ea[1], Eigen::Vector3d::UnitY()) * 
                  Eigen::AngleAxisd(ea[2], Eigen::Vector3d::UnitX());
    cout << "quaternion3 x: " << quaternion3.x() << endl;
    cout << "quaternion3 y: " << quaternion3.y() << endl;
    cout << "quaternion3 z: " << quaternion3.z() << endl;

欧拉角转换为旋转向量


    Eigen::AngleAxisd rotation_vector3;
    rotation_vector3 = Eigen::AngleAxisd(ea[0], Eigen::Vector3d::UnitZ()) * 
                       Eigen::AngleAxisd(ea[1], Eigen::Vector3d::UnitY()) * 
                       Eigen::AngleAxisd(ea[2], Eigen::Vector3d::UnitX());  
    cout << "rotation_vector3 " << "angle is: " << rotation_vector3.angle() * (180 / M_PI)<< " axis is: " << rotation_vector3.axis().transpose() << endl;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Eigen是一个C++模板库,用于高效的线性代数运算。在Eigen中,矩阵可以使用Matrix类来表示。下面是一个简单的例子,展示如何使用Eigen库进行矩阵的赋值和调用。 首先,我们需要包含Eigen头文件: ```cpp #include <Eigen/Dense> ``` 然后,我们可以定义一个2x3的矩阵,并将其所有元素都设置为1: ```cpp Eigen::Matrix<int, 2, 3> mat; mat.setOnes(); ``` 这里我们使用了Matrix<int, 2, 3>来表示一个2x3的整数矩阵,并调用了setOnes()函数来将所有元素都设置为1。 我们还可以使用下标运算符来访问矩阵中的元素: ```cpp int value = mat(1,2); // 访问第2行第3列的元素 ``` 这里我们使用mat(1,2)来访问第2行第3列的元素,并将其赋值给变量value。 除了使用setOnes()函数来设置矩阵的所有元素,我们还可以使用其他函数来设置矩阵的不同部分。例如,我们可以使用setZero()函数来将矩阵的所有元素都设置为0: ```cpp mat.setZero(); ``` 我们还可以使用block()函数来访问矩阵的一个子矩阵。例如,下面的代码将访问矩阵中第1行到第2行、第1列到第2列的子矩阵,并将其所有元素都设置为2: ```cpp mat.block(0, 0, 2, 2).setConstant(2); ``` 这里我们使用了block()函数来访问矩阵中的子矩阵,并调用了setConstant()函数来将所有元素都设置为2。 这些都是Eigen库中矩阵赋值和调用的基本用法,你可以根据具体需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值