矩阵 R12\boldsymbol{R}_{12}R12 是旋转矩阵,其描述了坐标系1到坐标系2的旋转。矩阵 R12\boldsymbol{R}_{12}R12 的下标有两个含义:
- 表示坐标系1到坐标系2的旋转
- 表示将坐标系2中点的坐标通过旋转变换,从而得到同一个点在坐标系1中的坐标
向量 t12\boldsymbol{t}_{12}t12 是平移向量,其描述了坐标系1到坐标系2的平移。其下标同样也有两个含义:
- 表示坐标系1到坐标系2的平移(对应坐标系1的原点指向坐标系2的原点的向量)
- 表示将坐标系2中点的坐标通过平移变换,从而得到同一个点在坐标系1中的坐标
首先看一个简单的例子
如图1,P0,P1P_0, P_1P0,P1是坐标系 WWW 下的两个点,其中 P1P_1P1 由 P0P_0P0 旋转 θ\thetaθ (逆时针为正)而来,则二者之间的坐标满足关系:
x1=r∗cos(θ+θ0)=r∗cos(θ)cos(θ0)−r∗sin(θ)sin(θ0)=x0∗cos(θ)−y0∗sin(θ)y1=r∗sin(θ+θ0)=r∗sin(θ)cos(θ0)+r∗cos(θ)sin(θ0)=x0∗sin(θ)+y0∗cos(θ)
\begin{aligned}
x_1 &= r * \cos(\theta + \theta_0) \\
&= r * \cos(\theta)\cos(\theta_0) - r*\sin(\theta)\sin(\theta_0) \\
&= x_0 * \cos(\theta) - y_0*\sin(\theta) \\
y_1 &= r * \sin(\theta + \theta_0) \\
&= r * \sin(\theta)\cos(\theta_0) + r*\cos(\theta)\sin(\theta_0) \\
& = x_0 * \sin(\theta) + y_0*\cos(\theta) \\
\end{aligned}
x1y1=r∗cos(θ+θ0)=r∗cos(θ)cos(θ0)−r∗sin(θ)sin(θ0)=x0∗cos(θ)−y0∗sin(θ)=r∗sin(θ+θ0)=r∗sin(θ)cos(θ0)+r∗cos(θ)sin(θ0)=x0∗sin(θ)+y0∗cos(θ)
即 P1=RP0P_1 = RP_0P1=RP0, 其中
R=(cos(θ)−sin(θ)sin(θ)cos(θ))
R =
\begin{pmatrix}
\cos(\theta)& -\sin(\theta) \\
\sin(\theta)& \cos(\theta) \\
\end{pmatrix}
R=(cos(θ)sin(θ)−sin(θ)cos(θ))
这个比较容易理解了,不多赘述。
如图2,P1P_1P1 是 P0P_0P0 在旋转之后多了一个平移而来,则 P0,P1P_0, P_1P0,P1 之间的关系为:
P1=RP0+tP_1 = RP_0 + tP1=RP0+t, 其中 t=(Δx,Δy)Tt = (\Delta x, \Delta y)^Tt=(Δx,Δy)T
现在我们换一种角度,不再将点看作普通的点,而是一个新坐标系的原点,如图3。那么如何描述从一个坐标系到另一个坐标系呢? 例如在图3中,将 WWW 坐标系转到 P0P_0P0 坐标系,那么可以仿照上述两个例子写出这个变换:
R=(cos(θ0)−sin(θ0)sin(θ0)cos(θ0)),t=(x0y0)
R =
\begin{pmatrix}
\cos(\theta_0)& -\sin(\theta_0) \\
\sin(\theta_0)& \cos(\theta_0) \\
\end{pmatrix},
t =
\begin{pmatrix}
x_0 \\
y_0 \\
\end{pmatrix}
R=(cos(θ0)sin(θ0)−sin(θ0)cos(θ0)),t=(x0y0)
其中 (x0,y0)(x_0, y_0)(x0,y0) 是 P0P_0P0 坐标系原点在 WWW 坐标系下的表示, θ0\theta_0θ0 是坐标系旋转的角度.
具体地, 对于 P0P_0P0 坐标系描述下的一点 p(xp,yp)p(x_p, y_p)p(xp,yp), 其在 WWW 坐标系下的表示为
(xwyw)=R(xpyp)+t
\begin{pmatrix}
x_w \\
y_w \\
\end{pmatrix}
= R
\begin{pmatrix}
x_p \\
y_p \\
\end{pmatrix} + t
(xwyw)=R(xpyp)+t
注意!此时我们称 TP0W=(Rt01)T_{P_0}^W = \begin{pmatrix}
R & t \\
0 & 1 \\
\end{pmatrix}TP0W=(R0t1) 为 WWW 坐标系 到 P0P_0P0 坐标系的变换,它可以将 点在 P0P_0P0 坐标系的表示 转为在 WWW 坐标系的表示。
通常,WWW 坐标系 到 P0P_0P0 坐标系的变换 称为 PPP 的位姿。这种称呼比较好理解,因为 TP0WT_{P_0}^WTP0W 的 ttt 部分刚好就是 P0P_0P0 在世界坐标系中的坐标,用欧拉角表示旋转的话,这个角度就是WWW 转到 P0P_0P0 的角度(逆时针为正)。另一方面,也可以将其视做在 WWW 的基础上的旋转和平移变化。
最后一个例子,如图4,一辆车从 P0P_0P0 移动到 P1P_1P1,它们也被两个时刻下的车坐标系,那么如何描述它们之间的变换呢?
显然根据上述例子,我们很容易地得到 WWW 坐标系到两个车坐标系的变换:
RRR 描述 从 WWW 转到 目标系 的 角度,ttt 是 从WWW原点指向 目标系原点 的向量 在 WWW 系下的表示,即
RP0W=(cosθ0−sinθ0sinθ0cosθ0),t=(x0y0)RP1W=(cosθ1−sinθ1sinθ1cosθ1),t=(x1y1)
\begin{aligned}
R_{P_0}^W &= \begin{pmatrix}
\cos\theta_0 & -\sin\theta_0 \\
\sin\theta_0 & \cos\theta_0 \\
\end{pmatrix}, t = \begin{pmatrix}
x_0 \\
y_0 \\
\end{pmatrix} \\
R_{P_1}^W &= \begin{pmatrix}
\cos\theta_1 & -\sin\theta_1 \\
\sin\theta_1 & \cos\theta_1 \\
\end{pmatrix}, t = \begin{pmatrix}
x_1 \\
y_1 \\
\end{pmatrix} \\
\end{aligned}
RP0WRP1W=(cosθ0sinθ0−sinθ0cosθ0),t=(x0y0)=(cosθ1sinθ1−sinθ1cosθ1),t=(x1y1)
- 从坐标系变换的角度来看,P0P_0P0 到 P1P_1P1 的变换等同于 P0P_0P0 到 WWW,再从 WWW 到 P1P_1P1, 即
TP1P0=(TP0W)TTP1W T_{P_1}^{P_0} = \begin{pmatrix} T_{P_0}^{W} \end{pmatrix}^T T_{P_1}^{W} TP1P0=(TP0W)TTP1W
具体地,我们也可以直接根据规则直接写出二者之间的变换,令 θ=θ1−θ0\theta = \theta_1 - \theta_0θ=θ1−θ0,
RP1P0=(cosθ−sinθsinθsinθ)tP1P0=(RP0W)T(tP1W−tP0W) \begin{aligned} R_{P_1}^{P_0} &= \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \sin\theta \\ \end{pmatrix} \\ t_{P_1}^{P_0} &= \begin{pmatrix} R_{P_0}^W \end{pmatrix}^T (t_{P_1}^W - t_{P_0}^W) \end{aligned} RP1P0tP1P0=(cosθsinθ−sinθsinθ)=(RP0W)T(tP1W−tP0W) - 从坐标点转换来看,上述变换又可解释为 将 点在P1P_1P1坐标系下的表示 转到 点在P0P_0P0坐标系的表示,即
p0=TP1P0p1=(TP0W)TTP1Wp1 p_0 = T_{P_1}^{P_0} p_1 = \begin{pmatrix} T_{P_0}^{W} \end{pmatrix}^T T_{P_1}^{W} p_1 p0=TP1P0p1=(TP0W)TTP1Wp1