
MATLAB 2006b之后的版本提供了航空航天工具箱(Aerospace Toolbox),其中有quat2angle函数,就是用于实现四元数到欧拉角转换的。
基本调用格式:
[r1 r2 r3] = quat2angle(q)[r1 r2 r3] = quat2angle(q, s)
其中q为四元数,r1-r3为欧拉角,s为欧拉转序(rotation sequence,有的资料译成“顺规”)。
说明几点:
1、输出的欧拉角单位是弧度;
2、欧拉角的定义有很多种,应用在不同的领域(有时用的名字,例如 Tait-Bryan角)。确切点说,一共有12种定义——第一次旋转可以绕任何一个坐标轴进行(3),第二、第三次旋转要绕除上一次旋转之外的另外两个坐标轴(2x2),所以,一共可以有3x2x2=12种定义。quat2angle支持这全部12种定义,并以三次旋转的坐标轴表示,例如'ZYX', 'ZYZ', 'ZXY',等等。默认的转序是ZYX。
3、上面说的转序涉及到坐标系的定义,该函数的坐标系定义为Z轴为竖轴,可能与某些领域的习惯不同,需要特别注意。
示例:
>> [yaw, pitch, roll] = quat2angle([1 0 1 0])yaw =
0
pitch =
1.5708
roll =
0
如何用matlab求解欧拉角微分方程三维坐标角度α、β、γ?可以考虑用lsqnonlin()函数命令来求解。例如,已知(X,Y,Z)=(26.831.8301-0.66987),(x,y,z)=(102015),求角度α、β、γ值。求解方法如下:
A=[26.831.8301-0.66987]C=[102015]
func=@(x,A,C)A-[cos(x(1)).*cos(x(3))-sin(x(1)).*cos(x(2)).*sin(x(3)) sin(x(1)).*cos(x(3))+cos(x(1)).*cos(x(2)).*sin(x(3)) sin(x(2)).*sin(x(3))...
-cos(x(1)).*sin(x(3))-sin(x(1)).*cos(x(2)).*cos(x(3)) -sin(x(1)).*sin(x(3))+cos(x(1)).*cos(x(2)).*cos(x(3)) sin(x(2)).*cos(x(3))...
sin(x(1)).*sin(x(3)) -cos(x(1)).*sin(x(3)) cos(x(2))]*C
x0=[1 1.5 0.5];
[x,resnorm,residual,exitflag] = lsqnonlin(@(x)func(x,A,C),x0)
运行结果:
α=1.047,β=1.5706,γ=0.52361
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)