欧拉旋转角到轴角?

Euler angle of rotation to Axis-angle?

提问人:wiswasi 提问时间:10/4/2023 更新时间:10/4/2023 访问量:61

问:

我有一个包含 Pitch X、Yaw Y 和 Roll Z 值的 CSV 文件。我想将这些 XYZ 值转换为轴角度值(XYZ 和 Theta)。我尝试执行以下操作,但在与在线转换进行比较后,我得到的值似乎不正确。

void eulerToAxisAngle(double euler[3], double axis_angle[4]) {
    double cy = cos(euler[1] * 0.5);
    double sy = sin(euler[1] * 0.5);
    double cp = cos(euler[0] * 0.5);
    double sp = sin(euler[0] * 0.5);
    double cr = cos(euler[2] * 0.5);
    double sr = sin(euler[2] * 0.5);

    axis_angle[0] = cy * cp * cr + sy * sp * sr;
    axis_angle[1] = cy * cp * sr - sy * sp * cr;
    axis_angle[2] = sy * cp * sr + cy * sp * cr;
    axis_angle[3] = sy * cp * cr - cy * sp * sr;
}

double euler_input[3] = {-6.017, 0.487, -0.412};
double axis_angle_output[4];
eulerToAxisAngle(euler_input, axis_angle_output);
printf("x: %f, y: %f, z: %f, angle: %f\n", axis_angle_output[0], axis_angle_output[1], axis_angle_output[2], axis_angle_output[3]);

经过一些研究,似乎我的方法是正确的,我只是无法弄清楚我做错了什么。 如果有人能帮助我或为我指明正确的方向,我将不胜感激。谢谢!

c 数学 矩阵 旋转 三角函数

评论

2赞 Weather Vane 10/4/2023
你的角度是度数吗?
1赞 wiswasi 10/4/2023
@WeatherVane XYZ 值标记为(陀螺仪 - X 俯仰、Y 偏航、Z 滚动),所以我假设 Rads/Sec?下面是一个示例:X 间距:-6.017,Y 偏航:0.487,Z 横滚:-0.412
0赞 Weather Vane 10/4/2023
为什么是“rads/sec”而不仅仅是“rads”?指定弧度(即弧度)没有错,但不合时宜-6.0170.266
0赞 wiswasi 10/4/2023
@WeatherVane我不确定我是否理解你的意思。-6.017 是我在工作表中给出的音高值。我假设 rads/sec,因为这就是陀螺仪读数,对吗?
0赞 Weather Vane 10/4/2023
弧度通常以 ±π 表示。这就是为什么我问他们是否是这里的学位。陀螺罗盘通常给出角度,而不是转弯率,但这可能取决于传感器的复杂程度。

答: 暂无答案


上一个:度/秒到轴角

下一个:查找圆锥法线