这段时间一直在搞一些关于坐标旋转的东西,刚开始的时候很苦恼,不知道这三种方式之间怎么转换。最近终于明白怎么用Matlab来实现他们之间的转换,所以记录下来。
用R表示旋转矩阵,yaw pitch roll分别表示Z Y X轴的转角,q=[q0,q1,q2,q3]'表示单位四元数。
R=angle2dcm(r1,r2,r3,S);
[r2,r2,r3]=dcm2angle(R, S); // 结果为弧度,需要转化为角度
R=quat2dcm([q0 q1 q2 q3]);
[r1,r2,r3]=quat2angle([q0 q1 q2 q2],S);
[q0 q1 q2 q2]=dcm2quat(R);
[q0 q1 q2 q2]=angle2quat(r1,r2,r3,S);
r1,r2,r3 表示三次转动的转轴转角,S表示转动的次序,共有12种,‘ZYX’,‘ZXY’等等。如果不加S,则默认转序为‘ZYX’,
R=angle2dcm(yaw/180*pi,pitch/180*pi,roll/180*pi);
R=angle2dcm(roll/180*pi,yaw/180*pi,pitch/180*pi,'XZY');表示XZY的转序
而四元数与欧拉角的转换,不加S的话,求角的顺序默认为
[yaw,pitch,roll]=quat2angle([q0 q1 q2 q2]); 无论转序如何
其他公式类似,注意转序对应。
如果想要看更加详尽的解释,可以去Matlab中看相应函数的定义。