闲话
明天就要考机器人学了,复习了一段时间也很无聊,便想不通转换矩阵中固定角与欧拉角的左乘右乘之原因(只怪听课不认真,多有忝列),果然后来用自己一套笨拙又通俗易懂的说辞说服了自己。这里分享出来,看看就好。
实质与等价
凡事通俗易懂就不得不看看事物的本质,一个转换的可以从两个不同角度看实质:
{ 向 量 旋 转 角 度 坐 标 系 旋 转 角 度 \begin{cases} 向量旋转角度 \\ 坐标系旋转角度\end{cases} {向量旋转角度坐标系旋转角度
这里为了简单与方便就只考虑二维的,并且也只有旋转变换。
有:
{ x 1 / c o s ( β + α ) = x 0 / c o s ( α ) y 1 / s i n ( β + α ) = y 0 / s i n ( α ) \begin{cases} x_1/cos(\beta+\alpha)=x_0/cos(\alpha)\\ y_1/sin(\beta+\alpha)=y_0/sin(\alpha) \end{cases} {x1/cos(β+α)=x0/cos(α)y1/sin(β+α)=y0/sin(α)
化简得:
{ x 1 = x 0 ∗ c o s ( β ) − y 0 ∗ s i n ( β ) y 1 = x 0 ∗ s i n ( β ) + y 0 ∗ c o s ( β ) \begin{cases} x_1=x_0*cos(\beta)-y_0*sin(\beta)\\ y_1=x_0*sin(\beta)+y_0*cos(\beta)\end{cases} {x1=x0∗cos(β)−y0∗sin(β)y1=x0∗sin(β)+y0∗cos(β)
即:
( x 1 y 1 ) = ( c o s ( β ) − s i n ( β ) s i n ( β ) c o s ( β ) ) ∗ ( x 0 y 0 ) \begin{pmatrix} x_1\\ y_1 \end{pmatrix}= \begin{pmatrix} cos(\beta) & -sin(\beta)\\ sin(\beta) & cos(\beta) \end{pmatrix}* \begin{pmatrix} x_0\\ y_0 \end{pmatrix} (x1y1)=(cos(β)sin(β)−sin(β)cos(β))∗(x0y0)
论述一:可见变换矩阵(旋转矩阵)的实质是对一个向量进行旋转平移(旋转)操作,从而得到旋转后的向量在原坐标系的坐标值,这里仅仅是一个坐标系而言。(这个理解是基于只有一个坐标系的角度)
同样的,我们也可以在坐标系旋转的角度看待这个问题:
论述二:我们已知一个向量在旋转后坐标系下坐标值,通过旋转矩阵作用于该坐标值,则得到了在原坐标系下的坐标值,如下图所示。(这个理解是基于两个相关联的坐标系的角度)
我们可以发现,论述一基于向量的旋转,论述二基于坐标系的旋转,但他们得到的坐标值都是一样的——原坐标系下的坐标值,所以论述一与论述二是等价的,由论述一可以推出论述二,反之亦然,理解这一点是很重要的。
对于左乘右乘的理解
左乘:
左乘代表的固定角,即所有的坐标变换都用基坐标描述.这里我们可以很好用论述:
对于原始向量 v 0 v_0 v0,先后经过 M 1 , M 2 M_1,M_2 M1,M2两次固定角的矩阵变换,第一次可以看作:
v 1 = M 1 ∗ v 0 v_1=M_1*v_0 v1=M1∗v0
经过向量 v 0 v_0 v0的旋转得到了新的向量 v 1 v_1 v1,之后又经过 M 2 M_2 M2的作用:
v 2 = M 2 ∗ v 1 v_2=M_2*v_1 v2=M2∗v1
经过向量 v 1 v_1 v1的旋转得到了新的向量 v 2 v_2 v2,总的来说就是:
v
2
=
M
2
∗
M
1
∗
v
0
v_2=M_2*M_1*v_0
v2=M2∗M1∗v0
很容易看出这样的变换是串联在一起的,所以很自然固定角的表示必须是左乘,因为每次都是基于同一个坐标系(即基坐标系)做变换。根据上面论述一与论述二的等价性,就很好证明固定角的坐标系变换是要用左乘,以上描述中也充分体现了“所有的坐标变换都用基坐标描述”这个观点。
右乘:
右乘代表的是欧拉角,即所有的坐标变换都用上一次变换的坐标系描述.这里我们就会觉得很困惑了:
如果正向理解:
对于原始向量 v 0 v_0 v0,经过 M 1 M_1 M1一次欧拉角的矩阵变换:
v 1 = M 1 ∗ v 0 v_1=M1*v_0 v1=M1∗v0
这很容易理解,毕竟上一次的坐标系就是基坐标系,所以形式上和固定角的相同。但在加上一次欧拉角变换 M 2 M_2 M2呢?
v 2 = M 1 ∗ M 2 ∗ v 0 v_2=M_1*M_2*v_0 v2=M1∗M2∗v0
这个就很困惑了,毕竟代数知识中只有在原来向量基础上左乘或者右乘,但“中间乘”就没定义过。
这里我们可以反向来理解:
我们先定义坐标系
O
0
,
O
1
,
O
2
O_0,O_1,O_2
O0,O1,O2:
O
0
O_0
O0指的基坐标系
O
1
O_1
O1指的
O
0
O_0
O0经过欧拉变换
M
1
M_1
M1的坐标系
O
2
O_2
O2指的
O
1
O_1
O1经过欧拉变换
M
2
M_2
M2的坐标系
这里的
v
0
,
v
1
,
v
2
v_0,v_1,v_2
v0,v1,v2分别指的相同向量在不同坐标系
O
2
,
O
1
,
O
0
O_2,O_1,O_0
O2,O1,O0中的坐标值。
这里的
v
0
v_0
v0可以看作我们已知的
O
2
O_2
O2中的坐标,之后经过:
v
1
=
M
2
∗
v
0
v_1=M_2*v_0
v1=M2∗v0
的作用,得到了
v
1
v_1
v1,这个指的是原本向量在
O
1
O_1
O1中的坐标值,之后经过:
v
2
=
M
1
∗
v
1
v_2=M_1*v_1
v2=M1∗v1
的作用,得到了
v
2
v_2
v2,这个指的是原本向量在
O
0
O_0
O0中的坐标值。运用论述一与论述二的等价性也很好证明固定角的坐标系变换是要用右乘。
以上描述中都体现了“坐标变换都用上一次变换的坐标系描述”这个观点。
续
再次比较这两个等式:
v
2
=
M
2
∗
M
1
∗
v
0
v_2=M_2*M_1*v_0
v2=M2∗M1∗v0(固定角)
v
2
=
M
1
∗
M
2
∗
v
0
v_2=M_1*M_2*v_0
v2=M1∗M2∗v0(欧拉角)
如果用固定角的理解方式去理解欧拉角,如果用欧拉角的理解方式去理解固定角,会有什么好玩的地方呢?
或者说矩阵左乘右乘所谓的“行变换,列变换”的实质有是什么呢?
以后有空再想一想,也希望读到这篇博客的朋友可以解答一下我的疑问
以上论述仅出自作者观点,如有错误,欢迎指正