--- tags: 機器狗勾 --- # 04. robot kinematics analysis (forward) 機器人運動學可分為兩種: * **順向運動學(forward kinematics)** 已知各關節角度或伸縮長度,推算末端的座標的過程。 * **逆向運動學(backward kinematics)** 已知機器人的末端目標點,回推各關節應該如何旋轉或伸縮。 此節前面的鋪陳,都是為了最後學習 Denavit-Hartenberg Conevntion,一種<font color="yellow">很有系統的分析正向運動學的方法</font>。 ## <font color = "orange">4-1. pronoun definition</font> > 這些名詞之後都會用英文表示,避免歧義。 ![](https://i.imgur.com/BgRfpty.png =48%x) ![](https://i.imgur.com/HueafYN.png =48%x) * <font color="magenza"> Joint </font>:**有自由度的點**。分為有 revolute 和 prismatic 兩種。 * revolute:自由度是旋轉。實際機構就是各種馬達。 * prismatic:自由度是伸縮。實際機構有線性滑軌、滑塊等。 * <font color="magenza"> link</font>:**連接兩點的物件**。本身不具有自由度。 * <font color="magenza"> frame</font>:**坐標系**。通常我們的 frame 會以各個 joint 為參考點。 * <font color="magenza"> end effector</font>:**機器人末端接點**。在左圖中是 gripper,右圖中是 frame4 的原點。 ## <font color = "orange">4-2. matrix</font> 我們先重新檢視一下高中學過的矩陣,和一些額外的小補充。 ### <font color = "pink">4-2-1. reference frame</font> 我們可慮二維平面中有一點 $P$,和兩個 frame。 ![](https://i.imgur.com/plFejgc.png =80%x) $P$ 在 frame 0 中的位置可以表示為 $P^0(6,8)$。 $P$ 在 frame 1 中的位置則可以表為 $P^1(-5,7)$。 :::info **注意上標代表的是 reference frame,代表我們是從什麼 frame 去看的。** ::: 類似地,上圖中的向量可以表示如下(長度亂寫,只須在意正負號): $V^0_1=(6,8)$、$V^1_1=(8,0)$、$V^1_2=(-5,7)$、$V^0_2=(-4,2)$ ### <font color = "pink">4-2-2. 2D rotation matrix </font> 從 frame $XY$ 旋轉到 frame $X'Y'$: ![](https://i.imgur.com/IyTImND.png =80%x) 從這個例子我們可以輕易得到旋轉矩陣:$\begin{bmatrix}cos(\theta) & -sin(\theta) \\sin(\theta) & cos(\theta) \end{bmatrix}$。 單從幾何學分析看待有點太「特殊」了,我們用更宏觀的方式去看待旋轉矩陣。 從 frame 0 旋轉到 frame 1,<font color="yellow">旋轉矩陣表示了 frame 1 的 X、Y 軸在 frame 0 中的樣貌</font>: $R^1_0=\begin{bmatrix}x^0_1 &|& y^0_1\end{bmatrix}=\begin{bmatrix}x_1.x_0 & y_1.x_0\\x_1.y_0 & y_1.y_0 \end{bmatrix}=\begin{bmatrix}cos(\theta) & -sin(\theta) \\sin(\theta) & cos(\theta) \end{bmatrix}$ 上式的 $xy$ 都是單位向量。 在上圖中,透過旋轉矩陣我們可以計算新的 P 點: $P'=R^1_0\,P\Rightarrow\begin{bmatrix}P_{x'}\\P_{y'}\end{bmatrix}=\begin{bmatrix}cos(\theta) & -sin(\theta) \\sin(\theta) & cos(\theta) \end{bmatrix}\begin{bmatrix}P_{x}\\P_{y}\end{bmatrix}$ 如果經歷了多次旋轉變換則是: $P_m=R^{m-1}_0\,P_{m-1}=R^{m-1}_0\,R^{m-2}_0\,P_{m-2}=\;...\,=R^{m-1}_0\,R^{m-2}_0...R^1_0\,P_0$ ### <font color = "pink">4-2-3. 3D rotation matrix </font> 我們上小節定義了 2D 的旋轉矩陣: $R^1_0=\begin{bmatrix}x^0_1 &|& y^0_1\end{bmatrix}=\begin{bmatrix}x_1.x_0 & y_1.x_0\\x_1.y_0 & y_1.y_0 \end{bmatrix}$ 現在推廣到 3D: $R^1_0=\begin{bmatrix}x^0_1 &|& y^0_1 &|& z^0_1\end{bmatrix}=\begin{bmatrix}x_1.x_0 & y_1.x_0 & z_1.x_0\\x_1.y_0 & y_1.y_0 & z_1.y_0\\x_1.z_0 & y_1.z_0 & z_1.z_0\end{bmatrix}$ :::warning 2D 的旋轉只有 theta,但 3D 有三種軸向的旋轉 raw, yall, pitch。 用旋轉角度表達旋轉矩陣就會很麻煩。 **這是為什麼上個小節要先以內積的方式來表達旋轉矩陣。 不管在概念或數學表示上我個人認為都比較好。** ::: 接著我們考慮 Z軸不動,只有 XY 座標旋轉的三維旋轉: ![](https://i.imgur.com/iCwURdj.png =50%x) 根據上述內積定義,我們可以得到 $R^1_0=\begin{bmatrix}cos(\theta) & -sin(\theta) & 0\\sin(\theta) & cos(\theta) & 0\\0 & 0 & 1\end{bmatrix}$,因為 Z 軸固定,特別記為 $R_{z,\theta}$。 同理分別對於 X 軸、Y 軸固定的旋轉也可表示為: $R_{x,\theta}=\begin{bmatrix}1 & 0 & 0\\0 & cos(\theta) & sin(\theta)\\0 & -sin(\theta) & cos(\theta)\end{bmatrix}$$\;$, $\;$$R_{y,\theta}=\begin{bmatrix}cos(\theta)& 0 & -sin(\theta)\\0 & 1 & 0\\sin(\theta) & 0 & cos(\theta)\end{bmatrix}$ 理論上對於三維的任意旋轉都可以將上三個矩陣相乘而得。 但如果坐標系是動態的,即隨物體坐標系轉動而轉動,將產生有著名的 [gimble lock problem](https://www.youtube.com/watch?v=zc8b2Jo7mno&t=418s&ab_channel=GuerrillaCG)。 不過這不是本節重點,現在知道旋轉矩陣怎麼應用的就可以了。 ### <font color = "pink">4-2-4. 4x4 matrix in 3D </font> 雖然 3D 中只有三個座標,但實務上我們更喜歡使用四階矩陣來描述: $P =\begin{bmatrix}x&y& z &1\end{bmatrix}^T =\begin{bmatrix}x\\y\\z\\1\end{bmatrix}$ $H =\begin{bmatrix}x_1.x_0 & y_1.x_0 & z_1.x_0 & t_x\\x_1.y_0 & y_1.y_0 & z_1.y_0& t_y\\x_1.z_0 & y_1.z_0 & z_1.z_0& t_z\\0 & 0 & 0& 1\end{bmatrix}$ 其中 $t_x$、$t_y$、$t_z$ 是平移量,因此矩陣 $H$ 是旋轉矩陣與平移矩陣的融合。 <font color="yellow">這個矩陣 $H$ 是為了方便我們計算而構建出來的,與數學證明無關。</font> 多出來的一個維度並沒有實質上的意義,僅僅為了計算方便。 我們只考慮平移而不旋轉就會懂為什麼要這樣了: $HP =\begin{bmatrix}1 & 0 & _0 & t_x\\0 & 1 & 0& t_y\\0 & 0 & 1& t_z\\0 & 0 & 0& 1\end{bmatrix}\begin{bmatrix}x\\y\\z\\1\end{bmatrix}=\begin{bmatrix}x+t_x\\y+t_y\\z+t_z\\1\end{bmatrix}$ 之後的 Devanit-Hartenberg's convention 中的 H 就會是這個形式。 <font color="yellow">H 代表的是 Homogeneous Transformation Matrix。</font> ## <font color = "orange">4-3. Denavit-Hartenberg Convention</font> 終於 QQ .... 這是一個**超棒的**分析機器人正向運動學的方法。 這個方法分為三大步驟: 1. 標示 joint frame 2. 建立 parameters table 3. 代公式 homogeneous transformation matrix (HTM) ### <font color = "pink">4-3-1. frame -- drawing</font> 根據上述所說,一般我們只會標示機器人的 joint 和 frame 資訊: ![](https://i.imgur.com/Znyd2tl.png =80%x) 有時候為了標示清楚 revolute joint 的軸向會加上平面,但這看個人習慣。 ![](https://i.imgur.com/orJTsEl.png =80%x) 這邊先注意關節的畫法,完整的 frame 後面小節會有。 </br> ### <font color = "pink">4-3-2. frame -- XYZ axis rule</font> <font color = "yellow">以下是 Convention</font> : * 所有 frame 都是右手座標系。 * Z 軸必須是轉動軸或伸縮軸,非 joint 時則自定義。 * X 軸必須是垂直於當前的 Z 軸與上一個 frame 的 Z 軸。 * 起頭的 frame 0 的 X 軸只要注意不要和 frame 1 的 Z 軸同向。 * 最後的 frame n 的 X 軸只要注意不要和 frame n-1 的 Z 軸。 * 當 X、Z 軸確定時,根據右手法則 Y 軸必有唯一解。 * 兩相鄰 frame M 和 M-1 的原點不能在 M-1 的 Y 軸上有偏移。如果可以透過 M-1 的旋轉使得該 Y 軸向的原點偏移為零則允許。 <font color = "yellow">以下是建立順序</font>: 1. 根據 joint 軸向標出所有 frame 的 Z 軸,起頭和最後的 frame 之 Z 軸自定義。 2. 標出所有 frame 的 X 軸,注意 X 不可和相鄰的 frame 之 Z 軸同向。 3. 以右手法則標出所有 Y 軸。 4. 檢查相鄰坐標系沒有 Y 軸向上的偏移,有的話回第二步重建 frame。 </br> ### <font color = "pink">4-3-3. parameters table and HTM</font> | $\theta$ | $\alpha$ | $d$ | $l$ | |:------------:|:------------:|:--------------------:|:--------------------------:| | Z 軸旋轉角度 | X 軸旋轉角度 | frame 中心 的 Z 軸偏移 | frame 中心的 X 軸偏移 | 這邊所有轉幾度、移了多少都是以前一個坐標系為參考。即 $X_m^{m-1}$。