Good Morning, and in case I don't see you, good afternoon, good evening, and good night!
- 0. 一些概念
- 1. 坐标系的旋转
- 1.1 轴角法
- 1.2 四元素
- 1.3 基于欧拉角的旋转矩阵
- 1.3.1 单轴旋转矩阵
- 1.3.2 多轴旋转矩阵
- 2. 齐次变换矩阵
- 3. visp实践
0. 一些概念
- 相关概念:旋转矩阵、平移矩阵、单应矩阵、齐次变换矩阵。
- 坐标变换包括旋转变换和平移变换。
- 为什么要坐标变换?引入坐标变换可以解决哪些问题?应用场景?
- 已知一点p在坐标系A中的坐标,计算p在坐标系B中的坐标。
- 已知一向量v在坐标系A中的值,计算v在坐标系B中的值。
- 描述坐标系A和坐标系B之间的位姿关系(姿态和位置)。
- 一向量v绕坐标系A的xyz轴旋转 θ ϕ ψ \theta \phi \psi θϕψ角度并进行一定平移后在坐标系A中的新坐标。
- 在数学建模过程中,往往需要将不同的物量量表示在同一个坐标系内才能列出等式。
- 刚体运动学。
- 图像的投影。
1. 坐标系的旋转
描述坐标系的旋转常用的方法包括:
- 轴角法
- 旋转矩阵
- 欧拉角
- 四元数
这几种旋转表示方法有各自的优缺点和应用场景,这里不作赘叙。
1.1 轴角法
不常用,略…
1.2 四元素
待续…
1.3 基于欧拉角的旋转矩阵
欧拉角指:横滚角 ϕ \phi ϕ,俯仰角 θ \theta θ,偏航角 ψ \psi ψ。
ϕ , θ , ψ \phi, \theta, \psi ϕ,θ,ψ在不同的领域有不同的定义规则:主要的区别是旋转顺序的不同,绕旧坐标轴轴旋转还是绕新坐标轴的不同(也称外旋或内旋)。
在航天航空领域的欧拉角:
- 内旋
- Z–>Y–>X
- 右手系
1.3.1 单轴旋转矩阵
其中 ϕ θ ψ \phi \theta \psi ϕθψ满足右手定则,绕右手坐标系的正方向旋转时为正。
举例:
坐标系A中有一点p,坐标为 [ x a , y a , z a ] T [x_a,y_a,z_a]^T [xa,ya,za]T.
系A绕系A的正x轴旋转 θ \theta θ角度得到新坐标系B,那么点p在坐标系B中的坐标为: [ x b , y b , z b ] T = R A B ( θ ) [ x a , y a , z a ] T [x_b,y_b,z_b]^T=R_A^B(\theta)[x_a,y_a,z_a]^T [xb,yb,zb]T=RAB(θ)[xa,ya,za]T,其中 R A B ( θ ) = R x ( θ ) R_A^B(\theta)=R_x(\theta) RAB(θ)=Rx(θ)称为A到B的旋转矩阵!
A到B的旋转矩阵可以有多种符号表示方式,通常有:
R A B R_A^B RAB
R B A R_{BA} RBA
B R A ^BR_A BRA
都表示 A ~> B 的旋转关系矩阵!!
注意上下标的位置!
1.3.2 多轴旋转矩阵
待续…
2. 齐次变换矩阵
将两个坐标系的旋转关系和平移关系整合成一个4x4的矩阵。
[ x b y b z b 1 ] = b T a [ x a y a z a 1 ] = [ b R a O a b 0 1 ] [ x a y a z a 1 ] \begin{bmatrix} x_b \\ y_b \\ z_b \\ 1 \end{bmatrix}={^bT_a} \begin{bmatrix} x_a \\ y_a \\ z_a \\ 1 \end{bmatrix}= \begin{bmatrix} ^bR_a&O_a^b \\ 0&1 \\ \end{bmatrix} \begin{bmatrix} x_a \\ y_a \\ z_a \\ 1 \end{bmatrix} xbybzb1 =bTa xayaza1 =[bRa0Oab1] xayaza1
b T a = [ b R a O a b 0 1 ] {^bT_a} = \begin{bmatrix} ^bR_a&O_a^b \\ 0&1 \\ \end{bmatrix} bTa=[bRa0Oab1]
其中:
b T a ^bT_a bTa称为坐标系 a 到坐标系 b 的齐次变换矩阵;
b R a ^bR_a bRa是系a到系b的旋转矩阵;
O a b O_a^b Oab是系a原点在系b中的坐标;
坐标系 a 到坐标系 b 的齐次变换矩阵为 b T a ^bT_a bTa,那么坐标系 b 到坐标系 a 的齐次变换矩阵为 a T b = ( b T a ) − 1 ^aT_b=(^bT_a)^{-1} aTb=(bTa)−1,根据齐次矩阵的性质,可知:
a T b = ( b T a ) − 1 = [ a R b − a R b O a b 0 1 ] ^aT_b=(^bT_a)^{-1}= \begin{bmatrix} ^aR_b&-^aR_bO_a^b \\ 0&1 \\ \end{bmatrix} aTb=(bTa)−1=[aRb0−aRbOab1]
3. visp实践
待续…