旋转矩阵、四元数、旋转轴和旋转角度(旋转实例)

slam 表示旋转用到的3种数据结构及其转换方法:
旋转矩阵、四元数、旋转轴和旋转角度(旋转实例)

旋转矩阵
Eigen::Matrix3d rotationMatrix;
rotationMatrix <<  0.0, -0.8,  0.6,
                   0.8,  0.0, -0.4,
                  -0.6,  0.4,  0.7;

四元数 (w,x,y,z)

Eigen::Quaterniond quaternion;
1、由旋转矩阵生成四元数
Eigen::Quaterniond quaternion(rotationMatrix);
// 输出转换后的四元数
std::cout << "Quaternion: ("
          << quaternion.w() << ", "
          << quaternion.x() << ", "
          << quaternion.y() << ", "
          << quaternion.z() << ")"
          << std::endl;
2、四元素转换成矩阵
// Eigen::Matrix3d r = quaternion.matrix();

3、四元数可以直接得到旋转轴和旋转角度-旋转实例
Eigen::Vector3d axis = quaternion.vec().normalized(); // 计算旋转轴
double angle = 2.0 * acos(quaternion.w()); // 计算旋转角度

可以由旋转轴和角度得到旋转实例
Eigen::Vector3d axis(1.0, 0.0, 0.0); // 假设有一个旋转轴
double angle = 45.0; // 假设有一个旋转角度,单位为度

axis.normalize(); // 将旋转轴向量归一化

Eigen::AngleAxisd rotation(angle * M_PI / 180.0, axis); // 生成旋转实例,将角度转换为弧度

4、由旋转实例直接得到四元数
Eigen::Quaterniond quaternion2(angle_axis); // 使用旋转实例生成四元数
5、由旋转矩阵得到旋转轴和旋转角度-旋转实例
Eigen::AngleAxisd angle_axis(rotationMatrix);
Eigen::Vector3d axis2 = angle_axis.axis(); // 旋转轴
double angle2 = angle_axis.angle(); // 旋转弧度
6、由旋转轴和旋转角度(旋转实例)得到旋转矩阵
Eigen::Matrix3d rotation_matrix = rotation.toRotationMatrix();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值