欧拉角转旋转矩阵

欧拉角转旋转矩阵

绕x,y,z轴的旋转角转换成对应的旋转矩阵

在这里插入图片描述

角度的正负

在这里插入图片描述
逆时针为正,顺时针为负。

相乘顺序

比如Z-X-Y的旋转顺序如果是先转z,再转x,最后转y的话,那组合旋转应该是 R = R y × R x × R z R=Ry\times Rx\times Rz R=Ry×Rx×Rz

euroc中例子:

在这里插入图片描述
相机到imu绕z轴旋转 9 0 o 90^{o} 90o
R = R z = [ cos ⁡ 9 0 ∘ − sin ⁡ 9 0 ∘ 0 sin ⁡ 9 0 ∘ cos ⁡ 9 0 ∘ 0 0 0 1 ] = [ 0 − 1 0 1 0 0 0 0 1 ] R=R_{z}= \left[\begin{array}{ccc} \cos 90^\circ & -\sin 90^\circ & 0 \\ \sin 90^\circ & \cos 90^\circ & 0 \\ 0 & 0 & 1 \end{array}\right] =\left[ \begin{matrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{matrix} \right] R=Rz=cos90sin900sin90cos900001=010100001
在这里插入图片描述
相机到imu先绕y转-90度,再绕x转90度.
R = R x × R y = [ 1 0 0 0 0 − 1 0 1 0 ] × [ 0 0 − 1 0 1 0 1 0 0 ] = [ 0 0 − 1 − 1 0 0 0 1 0 ] R=R_{x}\times R_{y}= \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{matrix} \right] \times \left[ \begin{matrix} 0 & 0 & -1 \\ 0 & 1 & 0 \\ 1 & 0 & 0 \end{matrix} \right] = \left[ \begin{matrix} 0 & 0 & -1 \\ -1 & 0 & 0 \\ 0 & 1 & 0 \end{matrix} \right] R=Rx×Ry=100001010×001010100=010001100

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
欧拉角旋转矩阵的ZYX顺序表示先绕Z轴旋转、再绕Y轴旋转、最后绕X轴旋转。下面是一个示例代码,可以实现欧拉角旋转矩阵的ZYX顺序: ```c #include <stdio.h> #include <math.h> typedef struct { float m[3][3]; } Matrix3x3; void euler_to_matrix_zyx(float roll, float pitch, float yaw, Matrix3x3* matrix) { float cy = cos(yaw); float sy = sin(yaw); float cp = cos(pitch); float sp = sin(pitch); float cr = cos(roll); float sr = sin(roll); matrix->m[0][0] = cy * cp; matrix->m[0][1] = cy * sp * sr - sy * cr; matrix->m[0][2] = cy * sp * cr + sy * sr; matrix->m[1][0] = sy * cp; matrix->m[1][1] = sy * sp * sr + cy * cr; matrix->m[1][2] = sy * sp * cr - cy * sr; matrix->m[2][0] = -sp; matrix->m[2][1] = cp * sr; matrix->m[2][2] = cp * cr; } int main() { float roll = 0.1; // 横滚 float pitch = 0.2; // 俯仰 float yaw = 0.3; // 偏航 Matrix3x3 matrix; euler_to_matrix_zyx(roll, pitch, yaw, &matrix); printf("Rotation Matrix (ZYX):\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { printf("%.4f\t", matrix.m[i][j]); } printf("\n"); } return 0; } ``` 在示例代码中,定义了一个Matrix3x3结构体用于存储旋转矩阵。然后,使用`euler_to_matrix_zyx`函数来实现欧拉角旋转矩阵换。最后,在main函数中给定欧拉角的值,将其换为旋转矩阵,并打印输出结果。 请注意,示例中的欧拉角单位是弧度。如果需要使用度作为输入,可以在换前将换为弧度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值