eigen转欧拉角
时间: 2025-03-21 22:11:10 浏览: 34
### 使用 Eigen 库将旋转矩阵或四元数转换为欧拉角
在 Eigen 库中,可以通过 `Eigen::Quaterniond` 和 `Eigen::Matrix3d` 类型的对象来实现旋转矩阵和四元数之间的相互转换,并进一步将其转换为欧拉角。以下是具体方法:
#### 将旋转矩阵转换为欧拉角
如果已知一个旋转矩阵 `rotation_matrix`,可以利用其 `.eulerAngles()` 方法直接获取对应的欧拉角序列。该函数返回的是指定顺序下的三个角度值。
```cpp
#include <iostream>
#include <Eigen/Dense>
int main() {
// 假设我们有一个旋转矩阵
Eigen::Matrix3d rotation_matrix;
rotation_matrix << 0, -1, 0,
1, 0, 0,
0, 0, 1;
// 转换为欧拉角 (Z-Y-X 欧拉角,默认顺序)
Eigen::Vector3d euler_angles = rotation_matrix.eulerAngles(2, 1, 0);
std::cout << "Euler Angles (radians): " << euler_angles.transpose() << std::endl;
return 0;
}
```
上述代码片段展示了如何通过调用 `.eulerAngles(2, 1, 0)` 来获得 ZYX 的欧拉角表示形式[^1]。
---
#### 将四元数转换为欧拉角
对于四元数到欧拉角的转换,首先需要创建一个 `Eigen::Quaterniond` 对象,然后同样使用 `.toRotationMatrix().eulerAngles()` 函数完成操作。
```cpp
#include <iostream>
#include <Eigen/Dense>
int main() {
// 定义一个四元数
Eigen::Quaterniond quaternion(0.7071, 0, 0.7071, 0);
// 创建旋转矩阵并计算欧拉角
Eigen::Matrix3d rotation_matrix = quaternion.toRotationMatrix();
Eigen::Vector3d euler_angles = rotation_matrix.eulerAngles(2, 1, 0);
std::cout << "Euler Angles from Quaternion (radians): " << euler_angles.transpose() << std::endl;
return 0;
}
```
此部分说明了从四元数出发,先转化为旋转矩阵再提取欧拉角的过程[^2]。
注意,在实际应用过程中需明确所使用的欧拉角约定(例如 XYZ 或者 ZYX),因为不同的次序会产生完全不一样的结果。
---
#### 关键点总结
- **旋转矩阵转欧拉角**:可以直接调用 `.eulerAngles(axis_2, axis_1, axis_0)` 方法。
- **四元数转欧拉角**:应先借助 `.toRotationMatrix()` 得到旋转矩阵后再执行前述步骤。
- 所有角度默认单位为弧度制而非度数;如有必要可自行乘以 `(180 / M_PI)` 进行单位变换。
---
阅读全文
相关推荐


















