本文主要是介绍位姿变换线性变换与坐标变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
位姿,线性变换与坐标变换.yuque
内旋,外旋, 左乘,右乘很容易把人绕晕是因为缺少一种科学的符号。
自己的符号,如果经常变不稳定,对推理和理解都很不利。
一旦问题复杂起来, 直观和直觉靠不住, 只能靠代数符号来推理
约定
P1: A,B,C…是空间中的标准正交基
P2: [a1,a2,…an] 是系A的基, [b1,b2,…bn] 是系B的基,其中aj 和bj 都是n维列向量
一个坐标系可以用它的基表示,故A=[a1,a2,…an] B=[b1,b2…bn]。 aj 和 bj 的表示需要依赖世界系[e1,e2,…en]
P3:AP是点P在A系中的齐次坐标A [Px,Py,Pz,1]T或欧式坐标A[Px,Py,Pz]T ,根据上下文区分
P4: AT是A系的中的线性变换, 满足AP2=AT * AP1 (就是把P1变换到P2点)
P5: ABT 是B系在A系中的位姿,指的是系B的每一个基在系A的坐标表示即
[b1,b2…bn]=[a1,a2,…an] ABT
ABT * BAT =I
P6: 在线性代数中 T * 0=0 ,即所有系原点重合,但在齐次坐标中根本不存在[0,0,0,0]T, 而是用 [0,0,0,1]T 表示原点,所以齐次坐标可处理平移问题
P7: 常用的线性变换使用作用来描述,比如拉伸,旋转,平移,镜像,透视,而抽象的线性变换则只能使用矩阵来描述。
定理1: 坐标变换定理 AP= ABT BP
坐标变换定理描述了同一个点P在两个系中的关系
P1: B=[b1,b2…bn]=[a1,a2,…an]C=AC ; (C是过渡矩阵)
P2: AP=[p1,p1,…pn]T BP=[p1,p1,…pn,]T P=AAP=BBP=ACBP
P3: AP=CBP ; C就是ABT
P4: 如果P1中的A取I=[e1,e2…en] 则 B=C=ABT
定理2: 线性变换定理 AP2= ABT AP1
令 AT = ABT , 则 AP2= AT AP1
线性变换定理描述了在同一个系中两个点的关系 (线性变换的特点是左上角在一个系中)
AT 产生的作用就是A系到B系的作用
定理3: ACT=ABTBCT
虽然这个定理很好证明,但对它的不同解释延伸出了很多有意思的结论,内旋,外旋都来源于此
P1: AP= ABT BP =ACT CP BP= BCT CP
P2: AP= ABT BCT CP =ACT CP
P3: ABT BCT =ACT
定理4: 内外旋定理
该定理源于对公式 ACT=ABTBCT 的两种解释
本地系的作用是内旋用右乘 , 世界系作用是外旋用左乘
达到上图的状态有两种方式
方式1: 运动系,内旋,右乘的解释
P1: ABC重合
P2: BC相对A运动ABT
P3: C相对B运动BcT
ACT=ABTBCT 可以看作ABT与BCT 的合成, 上面都是相对运动系作用
方式2: 世界系,外旋,左乘的解释
P1: ABC重合
P2: C相对AB运动BcT
P3: BC相对A运动ABT
ACT=ABTBCT 可以看作是先BcT作用后ABT作用, 上面都是相对世界系作用
例1: 在平面上,求绕点(x,y)逆时针旋转θ对应的线性变换
P1: A系为世界系
P2: B系由A系平移到(x,y)得到
P3: C系由B系逆时针旋转θ得到
P4: P1绕B系原点逆时针旋转θ到达P2 ,求在A系中P1到P2的线性变换
AP1=ABTBCTCP1
AP2=ABTBCTCP2
CP2=BCTCP1 ;(同时有BP2=BCTBP1)
AP2=MAP1
联立上面方程可解得 M=ABTBCTBAT (把前三个方程带入第4个方程)
将ABT= [ 1 0 x 0 1 y 0 0 1 ] \begin{bmatrix} 1 &0 & x \\ 0 & 1 & y \\ 0 & 0 &1 \end{bmatrix} 100010xy1 BCT= [ cos θ − sin θ 0 sin θ cos θ 0 0 0 1 ] \begin{bmatrix} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 &1 \end{bmatrix} cosθsinθ0−sinθcosθ0001 BAT= [ 1 0 x 0 1 y 0 0 1 ] − 1 \begin{bmatrix} 1 &0 & x \\ 0 & 1 & y \\ 0 & 0 &1 \end{bmatrix} ^{-1} 100010xy1 −1
带入上式得到
M= [ cos θ − sin θ ( 1 − c o s θ ) ∗ x + s i n θ ∗ y sin θ cos θ − s i n θ ∗ x + ( 1 − c o s θ ) ∗ y 0 0 1 ] \begin{bmatrix} \cos \theta & -\sin \theta & (1-cos\theta)*x+sin\theta*y \\ \sin \theta & \cos \theta & -sin\theta*x+(1-cos\theta)*y \\ 0 & 0 &1 \end{bmatrix} cosθsinθ0−sinθcosθ0(1−cosθ)∗x+sinθ∗y−sinθ∗x+(1−cosθ)∗y1
例1的过程可以自然的推广到三维中绕定轴旋转对应的线性变换
为
这篇关于位姿变换线性变换与坐标变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!