Eigen集合模块学习(角轴,位姿,欧拉角,四元数)--参考SLAM十四讲3.6

#include <iostream>
using namespace std;
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Dense>
#include <ctime>
#include <cmath>//欧拉角
#include <eigen3/Eigen/Geometry>
int main(int argc, char **argv)
{
    Eigen::Matrix3d rotation_matrix3d=Eigen::Matrix3d::Identity();//单位阵
    cout<<"rotation_matrix3d="<<rotation_matrix3d<<endl;
    Eigen::AngleAxisd rotation_vector(M_PI/4,Eigen::Vector3d(0,0,1));
    cout.precision(5);
    //角轴表达
    rotation_matrix3d=rotation_vector.toRotationMatrix();//将角轴转换为矩阵
    cout<<"rotation_vector.matrix()="<<rotation_vector.matrix()<<endl;
    cout<<"rotation_matrix3d="<<rotation_matrix3d<<endl;
    Eigen::Vector3d v(1,0,0);
    Eigen::Vector3d v_rotated=rotation_vector*v;//旋转过后的向量
    cout<<"v_rotated="<<v_rotated.transpose()<<endl;
    //欧拉角
    Eigen::Vector3d euler_angles=rotation_matrix3d.eulerAngles(2,1,0);//ZYX顺序
    cout<<"euler_angles="<<180/M_PI*euler_angles.transpose()<<endl; //角度表示,本身是弧度表示
    //位姿变换
    Eigen::Isometry3d T=Eigen::Isometry3d::Identity();//需要赋值为单位阵,后续好做旋转
    cout<<"T(Identity)="<<T.matrix()<<endl;
    T.rotate(rotation_vector);
    T.pretranslate(Eigen::Vector3d(1,3,4));
    cout<<"T="<<T.matrix()<<endl;
    
    Eigen::Vector3d v_transformed=T*v;//虽然T是四维的,但有运算符重载按照三维计算
    cout<<"v_transformed="<<v_transformed.transpose()<<endl;
    //四元数
    Eigen::Quaterniond q=Eigen::Quaterniond(rotation_vector);
    cout<<"q(四元数,传vector)="<<q.coeffs()<<endl;//顺序[nx*sin(theta/2),ny*sin(theta/2),nz*sin(theta/2),cos(theta/2)]
    //Quaterniond也可以传rotationmatrix
    q=Eigen::Quaterniond(rotation_matrix3d);
    cout<<"q(传matrix)="<<q.coeffs()<<endl;
    v_rotated=q*v;//数学上是qvq',所以乘法有重载
    cout<<"v_rotated="<<v_rotated.transpose()<<endl;
    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值