坐标变换

坐标变换在机器人领域十分常见,推导了几种从易到难的坐标转换:

1.二维平面绕原点旋转

 如图所示,O为原点,旋转角为$\theta$,P0、P1坐标分别为$(x_0,y_0)、(x_1,y_1)$,P0与X轴夹角为$\alpha$,设P0和P1到原点距离为$r$,则P0坐标为:

\begin{equation}
\left\{
\begin{array}{lr}
x_0 = r\cos\alpha \\
y_0 = r\sin\alpha 
\end{array}
\right.
\end{equation}

P1坐标为:

\begin{equation}
\left\{
\begin{array}{lr}
x_1 = r\cos(\alpha+\theta) = r\cos\theta\cos\alpha-r\sin\theta\sin\alpha \\
y_1 = r\sin(\alpha+\theta) = r\sin\theta\sin\alpha+r\cos\theta\sin\alpha
\end{array}
\right.
\end{equation}

 将公式(1)带入到公式2,,消去$r$得

\begin{equation}
\left\{
\begin{array}{lr}
x_1 = x_0\cos\theta-y_0\sin\theta \\
y_1 = x_0\sin\theta+y_0\cos\theta
\end{array}
\right.
\end{equation}

式(3)为由P0逆时针旋转至P1的表达式,也可通过该式求出由P1到P0的变换:

\begin{equation}
\left\{
\begin{array}{lr}
x_0 = -x_1\sin\theta+y_1\cos\theta \\
y_0 = x_1\cos\theta+y_1\sin\theta
\end{array}
\right.
\end{equation}

也可以用矩阵来表示变换,逆时针旋转$\theta$:

\begin{equation}
\left[
\begin{array}{lr}
x_1\\
y_1
\end{array}
\right ]
=
\left[
\begin{array}{lr}
cos\theta&-sin\theta \\
sin\theta&cos\theta
\end{array}
\right ]
\left[
\begin{array}{lr}
x_0\\
y_0
\end{array}
\right ]
\end{equation}

顺时针旋转$\theta$:

\begin{equation}
\left[
\begin{array}{lr}
x_0\\
y_0
\end{array}
\right ]
=
\left[
\begin{array}{lr}
-sin\theta&cos\theta \\
cos\theta&sin\theta
\end{array}
\right ]
\left[
\begin{array}{lr}
x_1\\
y_1
\end{array}
\right ]
\end{equation}

 二者的系数矩阵相互可逆。

2.二维平面绕固定点旋转

 

 如上图所示,现在改为绕P点旋转,点到P的距离为$r$。推导的方法和1中一致,设P0与x轴正方向夹角为$\alpha$。则P0坐标为:

\begin{equation}
\left\{
\begin{array}{lr}
x_0 = r\cos\alpha+x \\
y_0 = r\sin\alpha+y 
\end{array}
\right.
\end{equation}

P1坐标为:

\begin{equation}
\left\{
\begin{array}{lr}
x_1 = r\cos(\alpha+\theta) +x = r\cos\theta\cos\alpha-r\sin\theta\sin\alpha+x \\
y_1 = r\sin(\alpha+\theta) +x = r\sin\theta\sin\alpha+r\cos\theta\sin\alpha+y
\end{array}
\right.
\end{equation}

将(7)式代入(8)式,消去$r$得:

\begin{equation}
\left\{
\begin{array}{lr}
x_1 = (x_0-x)\cos\theta-(y_0-y)\sin\theta +x\\
y_1 = (x_0-x)\sin\theta+(y_0-y)\cos\theta +y
\end{array}
\right.
\end{equation}

同理也可以由式(9)得到$x_0$、$y_0$的表达式

\begin{equation}
\left\{
\begin{array}{lr}
x_0 =-(x_1-x)\sin\theta+(y_1-y)\cos\theta+x \\
y_0 = (x_1-x)\cos\theta+(y_1-y)\sin\theta+y
\end{array}
\right.
\end{equation}

使用矩阵来表示,逆时针旋转$\theta$:

\begin{equation}
\left[
\begin{array}{lr}
x_1\\
y_1
\end{array}
\right ]
=
\left[
\begin{array}{lr}
cos\theta&-sin\theta \\
sin\theta&cos\theta
\end{array}
\right ]
\left[
\begin{array}{lr}
x_0-x\\
y_0-y
\end{array}
\right ]
+
\left[
\begin{array}{lr}
x\\
y
\end{array}
\right ]
\end{equation}

顺时针旋转$\theta$:

\begin{equation}
\left[
\begin{array}{lr}
x_0\\
y_0
\end{array}
\right ]
=
\left[
\begin{array}{lr}
-sin\theta&cos\theta \\
cos\theta&sin\theta
\end{array}
\right ]
\left[
\begin{array}{lr}
x_1-x\\
y_1-y
\end{array}
\right ]
+
\left[
\begin{array}{lr}
x\\
y
\end{array}
\right ]
\end{equation}

posted @ 2019-07-09 16:22  dlutjwh  阅读(1059)  评论(0编辑  收藏  举报