作者:Tai Fook
来源:CSDN
原文:https://blog.csdn.net/jiongjiongxia123/article/details/90236737
版权声明:本文为博主原创文章,转载请附上博文链接!
最近在看人头姿态和视线方向检测的东西,需要考虑坐标系与坐标系之间的旋转.用欧拉角表示坐标系的旋转时存在两种旋转方法,另外旋转的顺序也会对旋转结果有影响,查了一些资料总结一下结果.
描述坐标系B相对于坐标系A的姿态有两种方式:第一种是绕固定坐标轴旋转,第二种是绕自身坐标轴旋转.假设坐标系A为世界坐标系(不动),坐标系B为旋转坐标系,两个坐标系在开始时重合,则:
绕固定坐标轴旋转:
先将B绕A的X轴旋转α,再将B绕A的Y轴旋转β,最后将B绕A的Z轴旋转γ.旋转过程中坐标系A是不动的,其三个坐标轴也是固定的,因此称这种旋转方法为绕固定轴旋转.注意这里的旋转方向为先X轴,再Y轴,最后Z轴.
绕自身坐标轴旋转:
先将B绕B的Z轴旋转γ,再将B绕B的Y轴旋转β,最后将B绕B的X轴旋转α.旋转过程中坐标系B是变化的,其三个坐标轴也是变化的,称这种旋转方法为绕固自身旋转.注意这里的旋转方向为先Z轴,再Y轴,最后X轴.和第一种旋转方式的旋转顺序不同,原因是后面要给出的结论.
结论:
以绕固定轴方式,先X轴转α,再Y轴转β,最后Z轴转γ的旋转和以绕自身轴方式,先Z轴转γ,再Y轴转β,最后X轴转α的旋转是等效的,下面给出”僵硬”的数学证明.
证明(僵硬的):
我们知道,坐标轴的旋转可以用旋转矩阵来表示,为了证明上述两种旋转方法是等效的,只需要证明两种旋转方法对应的旋转矩阵是相同的.
对于绕固定轴方式,先X轴转α,再Y轴转β,最后Z轴转γ的旋转,其旋转矩阵R容易得到:
对于绕自身轴方式,先Z轴转γ,再Y轴转β,最后X轴转α的旋转,其旋转矩阵R.首先给出坐标系绕任意以单位向量表示方向的定轴(x,y,z)旋转θ 的旋转矩阵为:
则先Z轴转γ对应的旋转矩阵
旋转后的Y轴由(0,1,0) 变成了(−sin(γ),cos(γ),0) 再按照绕任意轴的公式计算得到绕此时的Y轴旋转β对应的旋转矩阵为:
则两步旋转后的旋转矩阵为
旋转后的X轴由(1.0,0) 变成了(cos(β)cos(γ),−sin(γ),sin(β)cos(γ)) 再按照绕任意轴的公式计算得到绕此时的X轴旋转α对应的旋转矩阵为
这个矩阵实在太长了我不想写了,反正就是按照上面的任意轴公式,把x=cos(β)cos(γ),y=−sin(γ),z=sin(β)cos(γ) 往里一代就行了.
最后总的旋转矩阵
把各部的结果代进去一算,就得到了最终结果:
和第一种旋转方法得到的结果相同.于是证明了前面给出的结论.之所以说这是一种很”僵硬”的证明办法,是因为整个过程是用 Matlab 强行代公式计算出来的,中间结果可能看起来很啰嗦式子很长,但是你把他们都乘起来,就能化简出相同的结果.实际上应该有更优雅的立体几何投影证明方法,但是空间想象能力实在太差,想不出来.如果有清楚的朋友请指点一下.
经过和泡儿鱼的讨论,想出了比较简洁的证明方法,写在下面:
证明(优雅的):
旋转矩阵可以用来表示坐标系和坐标系之间旋转的变换关系,也可以用来表示同一个坐标系下坐标旋转前后的变换关系,从后者的角度出发可以得到一个比较简洁又清晰的证明方法.
我们的任务是证明:以绕固定轴方式,先绕X轴转α,再绕Y轴转β,最后绕Z轴转γ的旋转和以绕自身轴方式,先绕Z轴转γ,再绕Y轴转β,最后绕X轴转α的旋转是等效的.在上述僵硬的证明方法中,我们通过计算证明了两种方式下坐标系前后的变换矩阵是相同的.下面的方法中,我们证明A坐标系中有一个向量,按照这两种方式去旋转,旋转后它们在原A坐标系下转到了同一个位置,即证明了上述结论.
假设有一个固定的世界坐标系A,其中有一个向量a,它在A中的坐标为Ra .
对于第一种方式的变换:
向量a先绕A的X轴转α,再绕A的Y轴转β,最后绕A的Z轴转γ,则三步旋转过后它在坐标系A中的坐标:
其中:
对于第二种方式的变换:
假设除了不动的世界坐标系A以外,还有一个和向量a固连在一起的向量坐标系B.固连的向量坐标系和向量a是固连的不会产生相对运动,即向量a怎么转固连坐标系B就怎么转.那么显然,任何转动后,向量a在固连坐标系B下的坐标都是不变的,且始终等于未发生任何转动时向量a在世界坐标系A下的坐标Ra .因为向量a在固连坐标系B中的位置不变.
第二种方式的变换为:向量a先绕B的Z轴转γ,再绕B的Y轴转β,最后绕B的X轴转α,将转动步骤倒过来叙述更方便
对于第三步转动,即向量a绕第二次转动后的固连坐标系B”的X轴转α,有:
其中Ra2为三次转动后向量a在第二次转动后的固连坐标系B”中的坐标,Ra3 为三次转动后向量a在第三次转动后的固连坐标系B”’ 中的坐标.RX(α) 为第二次转动后的固连坐标系B” 和第三次转动后的固连坐标系B”’ 之间的旋转矩阵.由于第三次旋转就是绕着B”的X轴转了α,因此RX(α) ,或者说B” 和B”’ 之间的变换矩阵就是:
同理对于第二步转动,有:
各变量的意义类似第三步不再赘述.
同理对于第一步转动有:
其中Ra0 为三次转动后向量a在第0次转动后的固连坐标系B” 中的坐标,也就是在世界坐标系中的坐标Ra’,即:
其中:
把三步转动串起来看,有:
又因为Ra3是第三次转动后向量a在第三次转动后的固连坐标系B’’的坐标,由于相对位置不变,这个值就等于未发生转动时向量a在世界坐标系A中的坐标,即:
则有:
与第一种方式的变换结果相同.即同一个向量经过两种方式的变换后在世界坐标系中的坐标相同,也证明了这两种变换是等效的.
总结
总结一下就是,如果是坐标系或者向量绕着固定的坐标轴旋转,相当于每转一次产生一个旋转矩阵,然后按旋转顺序将这些旋转矩阵左乘起来.如果是坐标系或者向量绕着自身的坐标轴旋转,相当于每转一次产生一个旋转矩阵,然后按旋转顺序将这些矩阵右乘起来.要注意后者的每一步旋转产生的旋转矩阵,不要以世界坐标系为基准去算,而是以每次旋转前的坐标系去算,也就是每次旋转矩阵只描述当前这次旋转前后的坐标系之间的转换矩阵!!!
费了半天劲希望把事情说明白了,我其实很担心哪个地方有笔误没写清楚,如果有的话请帮忙指出来.谢谢!
参考
网上也找到了其他类似的证明方法,看起来似乎更简洁也更容易理解,贴出来供参考: