如何用Matlab实现四元数到欧拉角的转换?(急需转换的代码)

如题所述

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

追问

谢谢,可是我运行了之后怎么老是提示

Undefined function 'quat2angle' for input arguments of type 'double'.

这是截图

可不可以帮我看一下原因啊,非常感谢

追答

可能的原因:

1、你的MATLAB版本较低,没有Aerospace Toolbox这个工具箱(或者早期的工具箱没有这个函数,据我所知,至少在2007b版上面这个函数是可用的);

2、你安装时只选择了部分工具箱,其中不包括该工具箱;

3、你的破解不完整(尤其R2012b之后,网上流传的很多MATLAB破解方法不完整)。

 

解决办法:

1、请确认你的原因属于哪一个,以便针对性的解决;

2、如果想偷懒,可以使用我上传的文件(由2007b的多个函数合并,并进行了少量改写,可适应各种MATLAB版本,包括十年前的6.5)。

追问

非常感谢,但是运行时又出了新的问题,是我调用函数的方法不对吗?

追答

删除第151、157、158行的三个end即可。
原因是,原来的主函数写法使用了嵌套函数(Nested Functions),所以在函数结束的位置有end,但合并到该文件的另外几个函数没有用end结束,所以导致报错(在6.5版上有警告,但不报错)。

追问

太谢谢了,已经可以成功运行了。
可不可以最后麻烦你一件事,有没有欧拉角转四元数的文件,拜托拜托!

追答

其实最简单的做法是你安装 Aerospace Toolbox这个工具箱,就什么都解决了(包括欧拉角、四元数以及方向余弦矩阵相互之间的转换)。

 

给你上传了欧拉角转四元数的文件,调用实例:

>> yaw = 0.7854;
>> pitch = 0.1;
>> roll = 0;
>> q = angle2quat( yaw, pitch, roll )
q =
  Columns 1 through 3
         0.922724572689336       -0.0191262424455658        0.0461747139774634
  Column 4
         0.382206025062786

温馨提示:答案为网友推荐,仅供参考
相似回答