相机标定

针对第一章相机标定中的公式的推导详见我的另一篇博客:相机标定

Kalman Filter

推导详见博客:卡尔曼滤波核心公式推导

圆柱包围盒碰撞检测:

空间中直线间的距离

考虑空间中,ABAB 和 CDCD 是两条异面直线,A、B、C、D四个点的坐标分为 (XA,YA,ZA)(XB,YB,ZB)(XC,YC,ZC)(XD,YD,ZD)(X_A,Y_A,Z_A) \quad (X_B,Y_B,Z_B) \quad (X_C,Y_C,Z_C) \quad (X_D,Y_D,Z_D)。记 AB→\overrightarrow{AB} 的方向向量为 S1→\overrightarrow{S_1} ,CD→\overrightarrow{CD} 的方向向量为 S2→\overrightarrow{S_2}
则

S1→=(XB−XA,YB−YA,ZB−ZA)\overrightarrow{S_1} = (X_B - X_A, Y_B - Y_A, Z_B - Z_A)

S2→=(XD−XC,YD−YC,ZD−ZC)\overrightarrow{S_2} = (X_D - X_C, Y_D - Y_C, Z_D - Z_C)

记

S3→=S1→×S2→=(M,N,P)=((YB−YA)⋅(ZD−ZC)−(ZB−ZA)⋅(YD−YC),(ZB−ZA)⋅(XD−XC)−(XB−XA)⋅(ZD−ZC),(XB−XA)⋅(YD−YC)−(YB−YA)⋅(XD−XC))\begin{aligned} \overrightarrow{S_3} = \overrightarrow{S_1} \times \overrightarrow{S_2} & = (M, N, P) \\= \Big( &(Y_B-Y_A)\cdot(Z_D-Z_C)-(Z_B-Z_A)\cdot(Y_D-Y_C), \\ & (Z_B-Z_A)\cdot(X_D-X_C)-(X_B-X_A)\cdot(Z_D-Z_C),\\ & (X_B-X_A)\cdot(Y_D-Y_C)-(Y_B-Y_A)\cdot(X_D-X_C)\Big) \end{aligned}

由平面的点法式方程(点 AA 和方向向量 S3→\overrightarrow{S_3})可得一个过直线 ABAB 且平行CDCD的平面 π\pi。

π\pi的方程为:M(x−XA)+N(y−YB)+P(z−ZB)=0M(x-X_A)+N(y-Y_B)+P(z-Z_B) = 0,将其化为一般形式 Mx+Ny+Pz+Q=0Mx + Ny + Pz + Q= 0 可得,

Q=−[M,N,P]⋅[XAYAZA]Q = - \begin{bmatrix} M,N,P \end{bmatrix} \cdot \begin{bmatrix} X_A \\ Y_A \\ Z_A \end{bmatrix}

于是π\pi的方程写成矩阵形式:

[M,N,P]⋅[x−XAy−YAz−ZA]=0\begin{bmatrix} M,N,P \end{bmatrix} \cdot \begin{bmatrix} x-X_A \\ y-Y_A \\ z-Z_A \end{bmatrix} = 0

则点 C(XC,YC,ZC)C(X_C, Y_C, Z_C) 或点 D(XD,YD,ZD)D(X_D, Y_D, Z_D)到 π\pi 的距离即为异面直线 ABAB 和 CDCD 间的距离

d=∣MXC+NYC+PZC+Q∣M2+N2+P2=(S1→×S2→)⋅(AC→)∣S1→×S2→∣=[S1→,S2→,AC→]∣S1→×S2→∣\begin{aligned} d &= \frac{|MX_C + NY_C + PZ_C + Q|}{\sqrt{M^2 + N^2 + P^2}}\\ & = \frac{(\overrightarrow{S_1} \times \overrightarrow{S_2})\cdot(\overrightarrow{AC})}{|\overrightarrow{S_1} \times \overrightarrow{S_2}|}\\ & = \frac{[\overrightarrow{S_1} , \overrightarrow{S_2},\overrightarrow{AC}]}{|\overrightarrow{S_1} \times \overrightarrow{S_2}|} \end{aligned}

将具体坐标带入上式即得论文中公式(4-5)

两个线段共面时候的距离

平面上两条线段之间的最短距离定义:

两线段 ABAB 和 CDCD 用其端点 (A,B)(A,B),(C,D)(C,D) 表示

ABAB, CDCD 上距离最近的两点之间的距离d(A,B)d(A,B),分为三种情况讨论。

  1. 若两线段有交点,距离d为0

  2. 计算点A和点B到CD线段所在直线的距离,记为l1l_1和l2l_2 ;计算点C和点D到AB线段所在直线的距离,记为l3l_3和l4l_4。

    d(A,l2)d(A,l_2), d(B,l2)d(B,l_2), d(C,l3)d(C,l_3),d(D,l4)d(D,l_4)

    选择距离最小,且垂足落在对方线段内的,作为 d(A,B)d(A,B)

  3. 若四个垂足都落在对方线段外,计算四个端点两两之间的距离,取最小值作为 d(A,B)d(A,B)