AI学习笔记(五)坐标变换与视觉测量

左右手坐标系即转换

左手坐标系、右手坐标系、笛卡尔坐标系

左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y正反向,其他三个手指指向Z轴正方向。
右手坐标系:伸开右手,大拇指指向X轴正方向,食指指向Y正反向,其他三个手指指向Z轴正方向。
在这里插入图片描述
在高等数学中使用的三维空间是笛卡尔坐标系:
笛卡尔坐标系其实就是右手坐标系,OpenGL中使用右手坐标系,Direct3D使用的是左手坐标系。
在这里插入图片描述

左手旋转规则、右手旋转规则

在这里插入图片描述

左手坐标系和右手坐标系相互转换

位置(location)与位移(Translation)
位置与位移的转换是相同的,都是顶点位置,转换也比较简单,将X、Y、Z中任意一个取反即可。
旋转
右手坐标系下旋转RR,那么左手坐标系下的旋转应为:
M = [ 1 0 0 0 0 − 1 0 0 0 0 1 0 0 0 0 1 ]          L R = M ⋅ R R ⋅ M M=\begin{bmatrix}1&0&0&0\\0&-1&0&0\\0&0&1&0\\0&0&0&1\end{bmatrix}\;\;\;\;LR=M\cdot RR\cdot M M=1000010000100001LR=MRRM
注意,一定要和Location,Translation取反的值一致,也就是说Location是y轴取反,那么矩阵M一定要第二行为-1,其他两个周同理,要对应起来。

旋转矩阵

对于两个三维点 P 1 ( x 1 , y 1 , z 1 ) , P 2 ( x 2 , y 2 , z 2 ) P_1\left(x_1,y_1,z_1\right),P_2\left(x_2,y_2,z_2\right) P1(x1,y1,z1),P2(x2,y2,z2),由点 P 1 P_1 P1经过旋转矩阵 R R R旋转到 P 2 P_2 P2,则有:
R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ]                        [ x 2 y 2 z 2 ] = R [ x 1 y 2 z 2 ] R=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{bmatrix}\;\;\;\;\;\;\;\;\;\;\;\begin{bmatrix}x_2\\y_2\\z_2\end{bmatrix}=R\begin{bmatrix}x_1\\y_2\\z_2\end{bmatrix} R=r11r21r31r12r22r32r13r23r33x2y2z2=Rx1y2z2
旋转矩阵为正交矩阵,满足 R R T = E RR^T=E RRT=E

  • 绕x轴旋转:
    R x ( θ ) = [ 1 0 0 0 cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ ] R_x\left(\theta\right)=\begin{bmatrix}1&0&0\\0&\cos\theta&-\sin\theta\\0&\sin\theta&\cos\theta\end{bmatrix} Rx(θ)=1000cosθsinθ0sinθcosθ
  • 绕y轴旋转:
    R x ( θ ) = [ cos ⁡ θ 0 sin ⁡ θ 0 1 0 − sin ⁡ θ 0 cos ⁡ θ ] R_x\left(\theta\right)=\begin{bmatrix}\cos\theta&0&\sin\theta\\0&1&0\\-\sin\theta&0&\cos\theta\end{bmatrix} Rx(θ)=cosθ0sinθ010sinθ0cosθ
  • 绕z轴旋转:
    R x ( θ ) = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] R_x\left(\theta\right)=\begin{bmatrix}\cos\theta&-\sin\theta&0\\\sin\theta&\cos\theta&0\\0&0&1\end{bmatrix} Rx(θ)=cosθsinθ0sinθcosθ0001
    任何一个旋转可以表示为依次绕着三个旋转轴旋转三个角度的组合。这三个角度称为欧拉角。三个轴可以指固定的世界坐标系轴,也可以指被旋转物体坐标系的轴,三个旋转轴次序不同,会导致结果不同。
    R x ( − θ 1 ) R y ( − θ 2 ) R z ( θ ) R y ( θ 2 ) R x ( θ 1 ) R_x\left(-\theta_1\right)R_y\left(-\theta_2\right)R_z\left(\theta\right)R_y\left(\theta_2\right)R_x\left(\theta_1\right) Rx(θ1)Ry(θ2)Rz(θ)Ry(θ2)Rx(θ1)

欧拉角与万向锁

欧拉角

欧拉角有两种:
1、静态:即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态;
2、动态:即绕物体坐标系三个轴的旋转,由于五一旋转过程中坐标轴随着物体做相同的转动,所以称为动态。
使用动态欧拉角会出现万向锁现象,静态欧拉角不存在万向锁问题。
对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。
参考系又称为实验室参考系,是静止不动的。
而坐标系则固定于刚体,随着刚体的旋转而旋转。
设定xyz-轴为参考系的参考周。称xy-平面与XY-平面的相交为交点线,用英文字母(N)代表。
zxz的欧拉角可以静态地这样定义:

  • α \alpha α是x-轴与交点线的夹角;
  • β \beta β是z-轴与Z-轴的夹角;
  • γ \gamma γ是交点线与X-轴的夹角;
    在这里插入图片描述
    图中三个欧拉角分别为: ( α , β , γ ) (\alpha,\beta,\gamma) (α,β,γ)
    蓝色的轴为:xyz轴;红色的轴为:XYZ轴;绿色的线为交线:N
    实际上,有许多方法可以设定两个坐标系的相对取向。欧拉角方法只是其中的一种。此外,不同的作者会用不同组合的欧拉角来描述,或用不同的名字表示同样的欧拉角。因此,在使用欧拉角之前,必须先做好明确的定义。
    欧拉角的基本思想是将角位移分解为绕三个互相垂直的三个旋转组成的序列。所以,欧拉旋转的三个角,可以对应于三个旋转矩阵:
    1、Yaw(偏航):欧拉角向量的y轴
    2、Pitch(俯仰):欧拉角向量的x轴
    3、Roll(翻滚):欧拉角向量的z轴
    欧拉角的缺点
    1、欧拉角的表示方式不唯一。给定某个其实朝向和坐标朝向,基石戈丁yaw、pitch、roll的顺序,也可以通过不同的yaw、pitch、roll的角度组合来表示所需的旋转。这其实主要是由于万向锁(Gimbal Lock)引起的;
    2、欧拉角的插值比较难(以实现“平滑”旋转);
    3、计算旋转变换时,一般需要转换成旋转矩阵,这时候需要计算很多sin,cos计算量较大。
    由欧拉角求旋转矩阵
    设三个轴x,y,z的欧拉角分别为 θ x , θ y , θ z \theta_x,\theta_y,\theta_z θx,θy,θz,正弦值、余弦值分别为 R ( θ x , θ y , θ z ) = R z ( θ z ) R y ( θ y ) R x ( θ x ) = [ c y c z c z s x s y − c x s z c x s z + c x s z s y c y c z c x s z + s x s y s z c x s y s z − c z s z − s y c y s x c x c y ] R(\theta_x,\theta_y,\theta_z)=R_z(\theta_z)R_y(\theta_y)R_x(\theta_x)=\begin{bmatrix}c_yc_z&c_zs_xs_y-c_xs_z&c_xs_z+c_xs_zs_y\\c_yc_z&c_xs_z+s_xs_ys_z&c_xs_ys_z-c_zs_z\\-s_y&c_ys_x&c_xc_y\end{bmatrix} R(θx,θy,θz)=Rz(θz)Ry(θy)Rx(θx)=cyczcyczsyczsxsycxszcxsz+sxsyszcysxcxsz+cxszsycxsyszczszcxcy
    由旋转矩阵求欧拉角
    R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] = [ c y c z c z s x s y − c x s z c x s z + c x s z s y c y c z c x s z + s x s y s z c x s y s z − c z s z − s y c y s x c x c y ] R=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{bmatrix}=\begin{bmatrix}c_yc_z&c_zs_xs_y-c_xs_z&c_xs_z+c_xs_zs_y\\c_yc_z&c_xs_z+s_xs_ys_z&c_xs_ys_z-c_zs_z\\-s_y&c_ys_x&c_xc_y\end{bmatrix} R=r11r21r31r12r22r32r13r23r33=cyczcyczsyczsxsycxszcxsz+sxsyszcysxcxsz+cxszsycxsyszczszcxcy
    解方程得:
    { θ x = a tan ⁡ 2 ( r 32 , r 33 ) θ y = a tan ⁡ 2 ( − r 31 , r 32 2 + r 33 2 θ z = a tan ⁡ 2 ( r 21 , r 11 ) \left\{\begin{array}{l}\theta_x=a\tan2(r_{32},r_{33})\\\theta_y=a\tan2(-r_{31},\sqrt{r_{32}^2+r_{33}^2}\\\theta_z=a\tan2(r_{21},r_{11})\end{array}\right. θx=atan2(r32,r33)θy=atan2(r31,r322+r332 θz=atan2(r21,r11)

万向锁

正常状态:三个独立的旋转轴
万向锁:一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,表示丢失了一个维度。
在这里插入图片描述

  • pitch是围绕x轴旋转,也叫做俯仰角;
  • yaw是围绕y轴旋转,也叫做偏航角
  • roll是围绕z轴旋转,也叫做翻滚角。
    在这里插入图片描述
    万向锁含义:当两个旋转轴重合时,导致只剩下2个旋转,2个旋转不能将所有情况进行描述,其产生的根本原因是绕三个轴的旋转不是同事进行的。
    在这里插入图片描述

四元数

  • 除了知名的数集(自然数、整数、实数、分数)之外,复数系统引入了一个新的数集——虚数。虚数的发明是为了解决一些特定无解的方程,例如 x 2 + 1 = 0 x^2+1=0 x2+1=0
  • 虚数有这样的形式: i 2 = − 1 i^2=-1 i2=1
  • 复数的集合是一个实数和一个虚数的和,形式: z = a + b i ( a , b ∈ R , i 2 = − 1 ) z=a+bi(a,b\in R,i^2=-1) z=a+bi(a,bR,i2=1)(可以认为所有实数都是b=0的复数、所有虚数都是a=0的复数
  • 拓展—复数的运算
  • 四元数是简单的超复数。
  • 四元数都是由实数加上三个虚数单位i、j、k组成,而且他们有如下联系: i 2 = j 2 = k 2 = − 1 , i 0 = j 0 = k 0 = 1 i^2=j^2=k^2=-1,i^0=j^0=k^0=1 i2=j2=k2=1,i0=j0=k0=1
  • 每个四元数都是1、i、j和k的现行组合,及四元数一般表示为:
    z = a + b i + c j + d k z=a+bi+cj+dk z=a+bi+cj+dk,其中a、b、c、d是实数。

四元数的定义

q = q 0 + q 1 i + q 2 j + q 3 k = [ s , v ] q=q_0+q_1i+q_2j+q_3k=\lbrack s,v\rbrack q=q0+q1i+q2j+q3k=[s,v]

  • 其中, q 0 , q 1 , q 2 , q 3 q_0,q_1,q_2,q_3 q0,q1,q2,q3均为实数, s = q 0 , v = [ q 1 , q 2 , q 3 ] , i 2 = j 2 = k 2 = − 1 s=q_0,v=[q_1,q_2,q_3],i^2=j^2=k^2=-1 s=q0v=[q1,q2,q3]i2=j2=k2=1
  • 对于i、j、k本身的几何意义可以理解为一种旋转,其中i代表x轴与y轴相交平面中x轴正方向向y轴正向的旋转,j旋转代表z轴与x轴相交平面中z轴正向向x轴正向的旋转,k旋转代表y轴与z轴相交平面中y轴正向向z轴正向的玄幻,-i、-j、-k分别代表i、j、k的反向旋转。

四元数的几何意义

  • 三维空间的任意旋转,都可以用绕三维空间的某个轴旋转过某个角度来表示。
  • 这种表示方法里,axis可用一个三维向量(x,y,z)来表示, θ \theta θ可以用一个角度值来表示。
  • 直观来讲,一个思维向量 ( θ , x , y , z ) (\theta,x,y,z) (θ,x,y,z)就可以表示三维空间任意的旋转。
  • 注意,这里的三维向量(x,y,z)只是用来表示axis的方向朝向,因此更紧凑的表示方式是一个单位向量来表示axis,而用该三维向量的长度来表示角度值 θ \theta θ.
  • 这样一来,可以用一个三维向量 ( θ ∗ x , θ ∗ y , θ ∗ z ) (\theta*x,\theta*y,\theta*z) (θx,θy,θz)就可以表示三维空间任意的旋转,前提是其中(x,y,z)是单位向量。
  • 这就是旋转向量(Rotation Vector)的表示方式。
    ( cos ⁡ θ 2 , x ∗ sin ⁡ θ 2 , y ∗ sin ⁡ θ 2 , z ∗ sin ⁡ θ 2 ) \left(\cos\frac\theta2,x\ast\sin\frac\theta2,y\ast\sin\frac\theta2,z\ast\sin\frac\theta2\right) (cos2θ,xsin2θ,ysin2θ,zsin2θ)

四元数求旋转矩阵

  • 已知四元数:$ q=q_0+q_1i+q_2j+q_3k=\lbrack s,v\rbrack$
  • 利用Rodrigues公式可以由四元数求得旋转矩阵R:
    R = [ 1 − 2 q 2 2 − 2 q 3 2 2 q 1 q 2 − 2 q 0 q 3 2 q 1 q 3 + 2 q 0 q 2 2 q 1 q 2 + 2 q 0 q 3 1 − 2 q 1 2 − 2 q 3 2 2 q 2 q 3 − 2 q 0 q 1 2 q 1 q 3 − 2 q 0 q 2 2 q 2 q 3 + 2 q 0 q 1 1 − 2 q 1 2 − 2 q 2 2 ] R=\begin{bmatrix}1-2q_2^2-2q_3^2&2q_1q_2-2q_0q_3&2q_1q_3+2q_0q_2\\2q_1q_2+2q_0q_3&1-2q_1^2-2q_3^2&2q_2q_3-2q_0q_1\\2q_1q_3-2q_0q_2&2q_2q_3+2q_0q_1&1-2q_1^2-2q_2^2\end{bmatrix} R=12q222q322q1q2+2q0q32q1q32q0q22q1q22q0q312q122q322q2q3+2q0q12q1q3+2q0q22q2q32q0q112q122q22

旋转矩阵求四元数

R = [ 1 − 2 q 2 2 − 2 q 3 2 2 q 1 q 2 − 2 q 0 q 3 2 q 1 q 3 + 2 q 0 q 2 2 q 1 q 2 + 2 q 0 q 3 1 − 2 q 1 2 − 2 q 3 2 2 q 2 q 3 − 2 q 0 q 1 2 q 1 q 3 − 2 q 0 q 2 2 q 2 q 3 + 2 q 0 q 1 1 − 2 q 1 2 − 2 q 2 2 ]    R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ]                      [ x 2 y 2 z 2 ] = R [ x 1 y 1 z 1 ] ⇒ { q 0 = 1 + r 11 + r 22 + r 33 2 q 1 = r 32 − r 23 4 q 0 q 2 = r 13 − r 31 4 q 0 q 2 = r 21 − r 12 4 q 0 R=\begin{bmatrix}1-2q_2^2-2q_3^2&2q_1q_2-2q_0q_3&2q_1q_3+2q_0q_2\\2q_1q_2+2q_0q_3&1-2q_1^2-2q_3^2&2q_2q_3-2q_0q_1\\2q_1q_3-2q_0q_2&2q_2q_3+2q_0q_1&1-2q_1^2-2q_2^2\end{bmatrix}\;\\R=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{bmatrix}\;\;\;\;\;\;\;\;\;\;\begin{bmatrix}x_2\\y_2\\z_2\end{bmatrix}=R\begin{bmatrix}x_1\\y_1\\z_1\end{bmatrix}\\\Rightarrow\left\{\begin{array}{l}q_0=\frac{\sqrt{1+r_{11}+r_{22}+r_{33}}}2\\q_1=\frac{r_{32}-r_{23}}{4q_0}\\q_2=\frac{r_{13}-r_{31}}{4q_0}\\q_2=\frac{r_{21}-r_{12}}{4q_0}\end{array}\right. R=12q222q322q1q2+2q0q32q1q32q0q22q1q22q0q312q122q322q2q3+2q0q12q1q3+2q0q22q2q32q0q112q122q22R=r11r21r31r12r22r32r13r23r33x2y2z2=Rx1y1z1q0=21+r11+r22+r33 q1=4q0r32r23q2=4q0r13r31q2=4q0r21r12

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值