lologame 发表于 2013-5-27 14:37:13

四元数与欧拉角个人理解

发这个帖子,主要是来源与之前思考的两个问题:
1.不同的欧拉角旋转顺序,为什么四元数更新方程都一样,但是得到的欧拉角仅仅只是更改欧拉角输出方程。
2.不同的欧拉角旋转顺序,四元数更新方程一样,为什么初始化方程却不一样,它们之间有什么联系。

以下是我这段时间对这两个问题的解释,我不能保证是对的,如果是错的,希望高人指出。
以免小生一错再错。

已知一个刚体V,通过旋转到V’。
V--->V’用旋转方式1进行旋转,得到roll1、pitch1、yaw1三个欧拉角。
V--->V’用旋转方式2进行旋转,得到roll2、pitch2、yaw2三个欧拉角。
我们知道,已知欧拉角后,可以得到方向余弦矩阵。
两种旋转方式,得到方向余弦矩阵C1与C2.
得到矩阵后,已知V的向量坐标,可以得到V’的向量坐标

V’ = C1*V;

V’ = C2*V;

由以上可知,C1 = C2,也就是说,V--->V’,不管是以何种旋转方式旋转,所得到的方向余弦矩阵都是相同的。也就是,让V--->V’,两种不同的旋转方式下的 roll,pitch,yaw,没有必然联系。

换一句话说,用同样的欧拉角进行两种不同的旋转顺序将刚体V进行旋转,得到刚体向量V1 与 V2,V1与V2之间没有必然的联系。

其实也不难想象,同样的欧拉角,以不同的旋转顺序旋转,得到的刚体姿态之间没有什么联系。(基本不一样,可能会有巧合一样)
----------------------------------------------------------------------------------------------------------------------


刚体四元数,表征了刚体的旋转信息。

我们已知一个V--->V’的旋转:
旋转轴向量
绕旋转轴的旋转角度a
得到一个四元数:

=


已知q0、q1、q2、q3得到一个坐标变换矩阵C3.
V’ = C3*V
其中C3 = C2 = C1

这样我求出四元数,就可以得到刚体的旋转信息。
不同的旋转方式,只要是V---V’,旋转信息就是一样的,我们通过四元数得到的变换矩阵C,都是一样的,但是由于旋转方式不同,所以求得的欧拉角套用的方程不一样,得出的欧拉角也不一样。
根据之前的设想,不同旋转方式下的欧拉角之间,本来就没有什么联系。
所以我们程序和书里面,欧拉角更新方程,不管是以什么方式旋转都是相同的。
----------------------------------------------------------------------------------------------------------------------

那为什么四元数的初始化会不一样呢?
假设四元数初始化用同意的代码,V--->V’,旋转顺序不一样,旋转顺序不一样,得到的欧拉角会不一样、欧拉角不一样,用同意的公式进行四元数初始化,就会得到不同的四元数。但都是V--->V’,只是旋转方式不一样,旋转信息都是一样的,四元数应该是一样的这一条件想矛盾。



以上只是小生对近日的总结,是一种复习,也希望对其他同仁有所帮助,更希望大神可以对我理解有误的地方委婉拍砖。{:smile:}

zouyf12 发表于 2013-5-27 18:11:18

       对于第一个问题,我的理解是,四元数其实就是轴-角表达式演变过来的,所谓轴-角表达式,就是任何姿态的物体, 都可以表示为绕一根过地理坐标系原点的轴旋转一定的角度,那这样看来,对于一个姿态来说就只存在一根轴和一个角度,   所以四元数与姿态是一一对应的。   而由于欧拉角的定义的缘故,所以在变回欧拉角时, 公式上就会有不一样。

lologame 发表于 2013-5-27 18:33:14

zouyf12 发表于 2013-5-27 18:11 static/image/common/back.gif
对于第一个问题,我的理解是,四元数其实就是轴-角表达式演变过来的,所谓轴-角表达式,就是任何 ...

我也是这么理解的。

对于同一个姿态,欧拉角旋转顺序不一样,那么对应的欧拉角之间并没有什么联系、

kmani 发表于 2013-5-27 18:38:29

我研究过工业机器人关节旋转问题,跟你这个很像。
得出的结论是:不管旋转轴线是否交于一点,不管旋转顺序如何,最终得到的姿态是一样的。
我理论计算过,计算机仿真也验证了我的结论。

lologame 发表于 2013-5-27 18:51:33

kmani 发表于 2013-5-27 18:38 static/image/common/back.gif
我研究过工业机器人关节旋转问题,跟你这个很像。
得出的结论是:不管旋转轴线是否交于一点,不管旋转顺序 ...

旋转顺序不管如何 得到的姿态相同。
是指的欧拉角不同的时候吧?

kmani 发表于 2013-5-27 18:59:43

lologame 发表于 2013-5-27 18:51 static/image/common/back.gif
旋转顺序不管如何 得到的姿态相同。
是指的欧拉角不同的时候吧?

我指的是每个关节不管哪个先转后转,只要相对转的角度一样,结果就一样。

WUST_LJS 发表于 2013-5-27 23:16:03

牛!!顶!!

sgzzour 发表于 2013-5-28 00:03:16

貌似不错的说。,大多数人都是直接复制代码,调通了就发视频庆贺,很少有人静下心思考这些原理性的问题。赞一个

lologame 发表于 2013-5-28 08:48:40

sgzzour 发表于 2013-5-28 00:03 static/image/common/back.gif
貌似不错的说。,大多数人都是直接复制代码,调通了就发视频庆贺,很少有人静下心思考这些原理性的问题。赞 ...

嗯,现在感觉单纯用别人的东西感觉意思不大了,我想在惯导领域有所发展,就要有理论基础、、

感觉这东西技术含量颇高.....

虽然现在还有一些疑惑的地方,但我还是会尽力解决、、

woshisangao 发表于 2013-5-28 11:28:40

好深奥啊。关注中。。。

sgzzour 发表于 2013-5-28 13:28:05

lologame 发表于 2013-5-28 08:48 static/image/common/back.gif
嗯,现在感觉单纯用别人的东西感觉意思不大了,我想在惯导领域有所发展,就要有理论基础、、

感觉这东西 ...

好样的,支持你,榜样。

tinymilk 发表于 2013-8-14 08:48:54

LZ
四元数可以根据起始位置不断更新姿态,然后转化为欧拉角,而实际上如果转化不同顺序的欧拉角,则欧拉角值不相同,但是按不同顺序不同的值转动结果相同。

如果我们直接用角速度传感器对角度积分可以直接得到欧拉角,但是欧拉角的转动顺序不同就会导致结果不同,但是陀螺仪的积分值却是相同的,也就是说这个轴仍然转动了这么个角度,只是欧拉
旋转方向顺序不同,所以,所有的欧拉旋转顺序如果可以任意调用的话,就可以避免gimbal lock,但是实际是不可能的,所以就引入了四元数来解决,所以四元数根据陀螺仪的积分无论旋转顺序,都是一个值

想飞的四轴 发表于 2013-8-17 20:57:33

都是牛人 顶了

小汪88 发表于 2013-8-21 11:35:54

我也在努力学习理论

lologame 发表于 2013-8-24 14:26:08

tinymilk 发表于 2013-8-14 08:48 static/image/common/back.gif
LZ
四元数可以根据起始位置不断更新姿态,然后转化为欧拉角,而实际上如果转化不同顺序的欧拉角,则欧拉角 ...

意思是,不同的旋转顺序,相同的欧拉角,仍然是相同的位置吗?

lologame 发表于 2013-8-24 16:59:57

这几日又用到惯导,我重新想象了下

欧拉角数值相等,就算是以不同的旋转顺序旋转,仍然会得到相同的姿态!

但是还不知道为啥,还没用从数学上去理解。

不同的旋转顺序,但是有相同的姿态变换矩阵C。
而得到不同旋转顺序的欧拉角时,使用的的矩阵中的系数不一样,然而得到的角度却是一样的??

lologame 发表于 2013-8-24 20:21:19

晕死了,以前没有搞错,

相同的姿态,不同的旋转方向,得到的欧拉角,是不一样的!

qinshiysb 发表于 2013-8-24 22:49:47

好深奥啊,没有深究,只是复制了代码。

linhui102 发表于 2013-8-31 21:35:24

真心晕了。。。楼主有研究精神       很想认识你

wenziheni 发表于 2013-11-6 18:57:40

至今未懂。。

my_ve 发表于 2013-11-11 17:54:46

其实四元数根本不关心坐标系是怎么旋转的,它只关心起始坐标系和目标坐标系,只要这两个确定了四元数的旋转轴和旋转角就确定了,而目标坐标系到底在哪里才是由欧拉角大小和旋转顺序决定的,所以两者的关系只是用一个变换矩阵联系起来,其实没什么太大联系。

kdaiee 发表于 2013-11-11 18:15:18

看公式没看懂,哎

gunsir 发表于 2014-3-5 13:26:06

kmani 发表于 2013-5-27 18:59
我指的是每个关节不管哪个先转后转,只要相对转的角度一样,结果就一样。 ...

额,你这个是多刚体运动,相互之间有约束,只要运动学上没有达到奇异点,必然是一一对应的~~这里说的是单刚体的转动,不太一样哦~~

s15200380596 发表于 2014-3-8 15:13:45

mark学习中

hawkyao 发表于 2014-3-11 14:37:32

lologame 发表于 2013-8-24 16:59
这几日又用到惯导,我重新想象了下

欧拉角数值相等,就算是以不同的旋转顺序旋转,仍然会得到相同的姿态! ...

不同的旋转次序,得到的每个(三次旋转对应三个旋转矩阵)旋转矩阵中的角度是不一样的。比如若按照XYZ旋转,第一次旋转X轴得到的γ角度,和按照ZYX第三次旋转X轴得到的γ角度是不一样的,但是他们三次旋转矩阵的乘积是一样的。

香樟树 发表于 2014-7-20 20:12:56

               学习了

zhan278047442 发表于 2014-7-20 21:11:51

学习一下

yat 发表于 2014-7-25 13:53:13

mark四元数与欧拉角个人理解

huang_4115 发表于 2014-9-6 10:40:27

楼主两次否定了自己的看法,,,,,,不过还是学习了,顶12楼

zjzly 发表于 2014-11-7 20:01:40

你好,我想问一下9150内置DMP出来的四元数可否用来将加速度从机体坐标系转到地理坐标系?

wyudcl 发表于 2015-9-8 18:55:24

标记,谢谢楼主分享,不懂呢,还得看呢。

小憨不傻 发表于 2015-9-8 19:51:54

{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}

小憨不傻 发表于 2015-9-8 20:57:20

一看帖子已经是2013年的帖子了,好久了,大概LZ现在应该明白了吧!
我就随便说说自己的看法吧!
第一点,表示姿态的方式大概有这个四种,欧拉角、四元数、方向余弦矩阵DCM、旋转矢量!
这里面最直观、最易理解的就是欧拉角了,欧拉角也是控制中常用的姿态表示方式。
对于欧拉角来说XYZ三个轴的旋转顺序是非常重要的!因为不同的旋转顺序会得到不一样的DCM,这就说可以用欧拉角来表示DCM,这也就是不同描述方式下姿态的互相转化了。
欧拉角能够表示DCM,同样的四元式肯定也是可以表示出DCM,将物体的姿态比喻成一个人的话,这四种姿态描述方式,不过是这个人身上所穿的不同衣服而已,他还是他。
因此欧拉角和四元数之间的关系就可以通过DCM互相转化了。
因此这里不同的DCM表达方式,联系欧拉角与四元数之前的桥梁就不一样了!
因此在姿态解算过程中,如果没有严格按照某一旋转顺序,四元数转化到欧拉角肯定是错误。
本人亲历姿态解算定义欧拉角旋转顺序的重要性,目前所有开源飞控欧拉角旋转顺序都是Z->Y->X,也称为航空顺序角。
因此,LZ所说的不同的旋转顺序,对应结果没有区别,是不靠谱的。估计楼主没自己写过姿态解算的算法。

ronnie0701 发表于 2015-11-18 17:45:09

小憨不傻 发表于 2015-9-8 20:57
一看帖子已经是2013年的帖子了,好久了,大概LZ现在应该明白了吧!
我就随便说说自己的看法吧!
第一点,表 ...

想问一下,如何将四元数表示的姿态矩阵和不同顺序的方向余弦矩阵对应起来?四元数姿态矩形式是固定的啊 那么求解欧拉角的时候,旋转顺序不同,方向余弦表达式也不同,用到的元素就不一样,这一点一直没搞明白。。。

1041625507 发表于 2016-1-14 21:10:25

感谢楼主分享

jamesdeep 发表于 2016-3-3 01:41:52

不错的讨论

Suna 发表于 2016-3-3 03:36:52

MARK                              

Huyaoyou 发表于 2016-3-6 09:09:59

MARK,谢谢楼主,,,,,,,,,,,,,,,,,

cchwhk 发表于 2016-3-7 15:08:25

小憨不傻 发表于 2015-9-8 20:57
一看帖子已经是2013年的帖子了,好久了,大概LZ现在应该明白了吧!
我就随便说说自己的看法吧!
第一点,表 ...

我最近也在看这方面的东西,想请问一下您这里谈到的航空顺序角是不是指先绕Z轴旋转ψ,再绕X轴旋转θ,再绕Y轴旋转γ
ψ是航向角,θ是俯仰角,γ是横滚角

小憨不傻 发表于 2016-3-7 18:00:21

cchwhk 发表于 2016-3-7 15:08
我最近也在看这方面的东西,想请问一下您这里谈到的航空顺序角是不是指先绕Z轴旋转ψ,再绕X轴旋转θ,再 ...

旋转顺序是Z->Y->X

cchwhk 发表于 2016-3-8 09:53:02

小憨不傻 发表于 2016-3-7 18:00
旋转顺序是Z->Y->X

对对,是Z-Y-X

liupanliang 发表于 2016-3-8 17:11:25

mark{:smile:}{:smile:}{:smile:}

Crazy_snail 发表于 2016-8-17 15:57:28

厉害,顶一下

liub007 发表于 2016-8-17 20:59:05

不明觉厉,学习了 。

shenfeipascal 发表于 2016-8-17 22:12:05

学习了,谢谢楼主~{:smile:}
页: [1]
查看完整版本: 四元数与欧拉角个人理解