eigen 四元数转欧拉角 输出单位
时间: 2025-04-23 21:25:49 浏览: 35
### 使用Eigen库实现四元数到欧拉角的转换
为了将四元数转换为欧拉角,可以利用Eigen库中的`Quaterniond`类和`Matrix3d`类。具体来说,可以通过创建一个`Quaterniond`对象表示四元数,并通过该对象获取对应的旋转矩阵,再由旋转矩阵计算出欧拉角。
#### 输出角度单位
默认情况下,Eigen库返回的角度是以弧度为单位[^3]。如果希望获得以度为单位的结果,则需要手动将弧度转换成度。
下面是一个简单的例子展示如何完成这一过程:
```cpp
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main(){
// 定义一个四元数 q(w, x, y, z)
Quaterniond q(0.70710678, 0.0, 0.0, 0.70710678);
// 将四元数转化为旋转矩阵
Matrix3d rotation_matrix = q.toRotationMatrix();
// 计算并打印三个欧拉角 (roll, pitch, yaw), 即绕X,Y,Z轴的旋转角度
Vector3d euler_angles = rotation_matrix.eulerAngles(2, 1, 0); // ZYX顺序
cout << "Euler Angles in Radians:" << endl;
cout << "Roll: " << euler_angles.x() << ", Pitch: " << euler_angles.y()
<< ", Yaw: " << euler_angles.z() << endl;
// 如果想要输出的是角度而不是弧度的话,
// 可以使用如下方式将其转换为度
const double rad_to_degrees = 180 / M_PI;
cout << "\nEuler Angles in Degrees:" << endl;
cout << "Roll: " << euler_angles.x()*rad_to_degrees << ", Pitch: "
<< euler_angles.y()*rad_to_degrees << ", Yaw: "
<< euler_angles.z()*rad_to_degrees << endl;
return 0;
}
```
这段代码首先定义了一个四元数$q$,接着调用了`.toRotationMatrix()`方法得到相应的旋转矩阵,之后使用`.eulerAngles()`函数指定了ZYX序列来提取欧拉角。注意这里传入参数`(2, 1, 0)`代表分别对应于Z、Y、X轴上的旋转次序[^4]。最后部分展示了两种不同的输出形式——弧度制与角度制。
阅读全文
相关推荐


















