2.8機器人正運動學(xué)方程的D-H表示法 在1955年,Denavit和Hartenberg在“ASME Journal of Applied Mechanics”發(fā)表了一篇論文,后來利用那個這篇論文來對機器人進(jìn)行表示和建模,并導(dǎo)出了它們的運動方程,這已成為表示機器人和對機器人運動進(jìn)行建模的標(biāo)準(zhǔn)方法,所以必須學(xué)習(xí)這部分內(nèi)容。Denavit-Hartenberg(D_H)模型表示了對機器人連桿和關(guān)節(jié)進(jìn)行建模的一種非常簡單的方法,可用于任何機器人構(gòu)型,而不管機器人的結(jié)構(gòu)順序和復(fù)雜程度如何。它也可用于表示已經(jīng)討論過的在任何坐標(biāo)中的變換,例如直角坐標(biāo)、圓柱坐標(biāo)、球坐標(biāo)、歐拉角坐標(biāo)及RPY坐標(biāo)等。另外,它也可以用于表示全旋轉(zhuǎn)的鏈?zhǔn)綑C器人、SCARA機器人或任何可能的關(guān)節(jié)和連桿組合。盡管采用前面的方法對機器人直接建模會更快、更直接,但D-H表示法有其附加的好處,使用它已經(jīng)開發(fā)了許多技術(shù),例如,雅克比矩陣的計算和力分析等。 假設(shè)機器人由一系列關(guān)節(jié)和連桿組成。這些關(guān)節(jié)可能是滑動(線性)的或旋轉(zhuǎn)(轉(zhuǎn)動)的,它們可以按任意的順序放置并處于任意的平面。連桿也可以是任意的長度(包括零),它可能被彎曲或扭曲,也可能位于任意平面上。所以任何一組關(guān)節(jié)和連桿都可以構(gòu)成一個我們想要建模和表示的機器人。 為此,需要給每個關(guān)節(jié)指定一個參考坐標(biāo)系,然后,確定從一個關(guān)節(jié)到下一個關(guān)節(jié)(一個坐標(biāo)系到下一個坐標(biāo)系)來進(jìn)行變換的步驟。如果將從基座到第一個關(guān)節(jié),再從第一個關(guān)節(jié)到第二個關(guān)節(jié)直至到最后一個關(guān)節(jié)的所有變換結(jié)合起來,就得到了機器人的總變換矩陣。在下一節(jié),將根據(jù)D-H表示法確定一個一般步驟來為每個關(guān)節(jié)指定參考坐標(biāo)系,然后確定如何實現(xiàn)任意兩個相鄰坐標(biāo)系之間的變換,最后寫出機器人的總變換矩陣。
 圖2.25 通用關(guān)節(jié)—連桿組合的D-H表示 假設(shè)一個機器人由任意多的連桿和關(guān)節(jié)以任意形式構(gòu)成。圖2.25表示了三個順序的關(guān)節(jié)和兩個連桿。雖然這些關(guān)節(jié)和連桿并不一定與任何實際機器人的關(guān)節(jié)或連桿相似,但是他們非常常見,且能很容易地表示實際機器人的任何關(guān)節(jié)。這些關(guān)節(jié)可能是旋轉(zhuǎn)的、滑動的、或兩者都有。盡管在實際情況下,機器人的關(guān)節(jié)通常只有一個自由度,但圖2.25中的關(guān)節(jié)可以表示一個或兩個自由度。 圖2.25(a)表示了三個關(guān)節(jié),每個關(guān)節(jié)都是可以轉(zhuǎn)動或平移的。第一個關(guān)節(jié)指定為關(guān)節(jié)n,第二個關(guān)節(jié)為關(guān)節(jié)n+1,第三個關(guān)節(jié)為關(guān)節(jié)n+2。在這些關(guān)節(jié)的前后可能還有其他關(guān)節(jié)。連桿也是如此表示,連桿n位于關(guān)節(jié)n與n+1之間,連桿n+1位于關(guān)節(jié)n+1與n+2之間。 為了用D-H表示法對機器人建模,所要做的第一件事是為每個關(guān)節(jié)指定一個本地的參考坐標(biāo)系。因此,對于每個關(guān)節(jié),都必須指定一個z軸和x軸,通常并不需要指定y軸,因為y軸總是垂直于x軸和z軸的。此外,D-H表示法根本就不用y軸。以下是給每個關(guān)節(jié)指定本地參考坐標(biāo)系的步驟:
- 所有關(guān)節(jié),無一例外的用z軸表示。如果關(guān)節(jié)是旋轉(zhuǎn)的,z軸位于按右手規(guī)則旋轉(zhuǎn)的方向。如果關(guān)節(jié)是滑動的,z軸為沿直線運動的方向。在每一種情況下,關(guān)節(jié)n處的z軸(以及該關(guān)節(jié)的本地參考坐標(biāo)系)的下表為n-1。例如,表示關(guān)節(jié)數(shù)n+1的z軸是
。這些簡單規(guī)則可使我們很快地定義出所有關(guān)節(jié)的z軸。對于旋轉(zhuǎn)關(guān)節(jié),繞z軸的旋轉(zhuǎn)( 角)是關(guān)節(jié)變量。對于滑動關(guān)節(jié),沿z軸的連桿長度d是關(guān)節(jié)變量。
- 如圖2.25(a)所示,通常關(guān)節(jié)不一定平行或相交。因此,通常z軸是斜線,但總有一條距離最短的公垂線,它正交于任意兩條斜線。通常在公垂線方向上定義本地參考坐標(biāo)系的x軸。所以如果
表示 與 之間的公垂線,則 的方向?qū)⒀?IMG alt="" src="images/2.8/clip_image008_0000.gif" width=19 height=24>。同樣,在 與 之間的公垂線為 , 的方向?qū)⒀?IMG alt="" src="images/2.8/clip_image015_0000.gif" width=28 height=24>。注意相鄰關(guān)節(jié)之間的公垂線不一定相交或共線,因此,兩個相鄰坐標(biāo)系原點的位置也可能不在同一個位置。根據(jù)上面介紹的知識并考慮下面例外的特殊情況,可以為所有的關(guān)節(jié)定義坐標(biāo)系。
- 如果兩個關(guān)節(jié)的z軸平行,那么它們之間就有無數(shù)條公垂線。這時可挑選與前一關(guān)節(jié)的公垂線共線的一條公垂線,這樣做就可以簡化模型。
- 入股兩個相鄰關(guān)節(jié)的z軸是相交的,那么它們之間就沒有公垂線(或者說公垂線距離為零)。這時可將垂直于兩條軸線構(gòu)成的平面的直線定義為x軸。也就是說,其公垂線是垂直于包含了兩條z軸的平面的直線,它也相當(dāng)于選取兩條z軸的叉積方向作為x軸。這也會使模型得以簡化。
在圖2.25(a)中, 角表示繞z軸的旋轉(zhuǎn)角,d表示在z軸上兩條相鄰的公垂線之間的距離,a表示每一條公垂線的長度(也叫關(guān)節(jié)偏移量),角 表示兩個相鄰的z軸之間的角度 (也叫關(guān)節(jié)扭轉(zhuǎn))。通常,只有 和d是關(guān)節(jié)變量。 下一步來完成幾個必要的運動,即將一個參考坐標(biāo)系變換到下一個參考坐標(biāo)系。假設(shè)現(xiàn)在位于本地坐標(biāo)系 ,那么通過以下四步標(biāo)準(zhǔn)運動即可到達(dá)下一個本地坐標(biāo)系 。 (1)繞 軸旋轉(zhuǎn) (如圖2.25(a)與(b)所示),它使得 和 互相平行,因為 和 都是垂直于 軸的,因此繞 軸旋轉(zhuǎn) 使它們平行(并且共面)。 (2)沿 軸平移 距離,使得 和 共線(如圖2.25(c)所示)。因為 和 已經(jīng)平行并且垂直于 ,沿著 移動則可使它們互相重疊在一起。 (3)沿 軸平移 的距離,使得 和 的原點重合(如圖2.25(d)和(e)所示)。這是兩個參考坐標(biāo)系的原點處在同一位置。 (4)將 軸繞 軸旋轉(zhuǎn) ,使得 軸與 軸對準(zhǔn)(如圖2.25(f)所示)。這時坐標(biāo)系n和n+1完全相同(如圖2.25(g)所示)。至此,我們成功地從一個坐標(biāo)系變換到了下一個坐標(biāo)系。 在n+1和n+2坐標(biāo)系間嚴(yán)格地按照同樣的四個運動順序可以將一個坐標(biāo)變換到下一個坐標(biāo)系。如有必要,可以重復(fù)以上步驟,就可以實現(xiàn)一系列相鄰坐標(biāo)系之間的變換。從參考坐標(biāo)系開始,我們可以將其轉(zhuǎn)換到機器人的基座,然后到第一個關(guān)節(jié),第二個關(guān)節(jié)……,直至末端執(zhí)行器。這里比較好的一點是,在任何兩個坐標(biāo)系之間的變換均可采用與前面相同的運動步驟。 通過右乘表示四個運動的四個矩陣就可以得到變換矩陣A,矩陣A表示了四個依次的運動。由于所有的變換都是相對于當(dāng)前坐標(biāo)系的(即他們都是相對于當(dāng)前的本地坐標(biāo)系來測量與執(zhí)行),因此所有的矩陣都是右乘。從而得到結(jié)果如下:


(2.51)
(2.52) 比如,一般機器人的關(guān)節(jié)2與關(guān)節(jié)3之間的變換可以簡化為:
(2.53) 在機器人的基座上,可以從第一個關(guān)節(jié)開始變換到第二個關(guān)節(jié),然后到第三個……,再到機器人的手,最終到末端執(zhí)行器。若把每個變換定義為,則可以得到許多表示變換的矩陣。在機器人的基座與手之間的總變換則為:
(2.54) 其中n是關(guān)節(jié)數(shù)。對于一個具有六個自由度的機器人而言,有6個A矩陣。 為了簡化A矩陣的計算,可以制作一張關(guān)節(jié)和連桿參數(shù)的表格,其中每個連桿和關(guān)節(jié)的參數(shù)值可從機器人的原理示意圖上確定,并且可將這些參數(shù)代入A矩陣。表2.1可用于這個目的。 在以下幾個例子中,我們將建立必要的坐標(biāo)系,填寫參數(shù)表,并將這些數(shù)值代入A矩陣。首先從簡單的機器人開始,以后再考慮復(fù)雜的機器人。 表2.1 D-H參數(shù)表
# |

|
d |
a |

|
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
5 |
|
|
|
|
6 |
|
|
|
|
- 對于如圖2.26所示的簡單機器人,根據(jù)D-H表示法,建立必要的坐標(biāo)系,并填寫相應(yīng)的參數(shù)表。
解: 為方便起見,在此例中,假設(shè)關(guān)節(jié)2,3和4在同一平面內(nèi),即它們的 值為0。為建立機器人的坐標(biāo)系,首先尋找關(guān)節(jié)(如圖2.26所示)。該機器人有六個自由度,在這個簡單機器人中,所有的關(guān)節(jié)都是旋轉(zhuǎn)的。第一個關(guān)節(jié)(關(guān)節(jié)1)在連桿0(固定基座)和連桿1之間,關(guān)節(jié)2在連桿1和連桿2之間,等等。首先,如前面已經(jīng)討論過的那樣,對每個關(guān)節(jié)建立z軸,接著建立z軸。觀察圖2.27和圖2.28所示的坐標(biāo)可以發(fā)現(xiàn),圖2.28是圖2.27的簡化線圖。應(yīng)注意每個坐標(biāo)系原點3在它所在位置的原因。
 圖2.26 具有六個自由度的簡單鏈?zhǔn)綑C器人
 圖2.27 簡單六個自由度鏈?zhǔn)綑C器人的參考坐標(biāo)系
 圖2.28 簡單六個自由度鏈?zhǔn)綑C器人的參考坐標(biāo)系線圖 從關(guān)節(jié)1開始, 表示第一個關(guān)節(jié),它是一個旋轉(zhuǎn)關(guān)節(jié)。選擇 與參考坐標(biāo)系的x軸平行,這樣做僅僅是為了方便, 是一個固定的坐標(biāo)軸,表示機器人的基座,它是不動的。第一個關(guān)節(jié)的運動是圍繞著 - 軸進(jìn)行的,但這兩個軸并不運動。接下來,在關(guān)節(jié)2處設(shè)定 ,因為坐標(biāo)軸 和 是相交的,所以 垂直于 和 。 在 和 之間的公垂線方向上, 在 和 之間的公垂線方向上,類似地, 在 和 之間的公垂線方向上。最后, 和 是平行且共線的。 表示關(guān)節(jié)6的運動,而 表示末端執(zhí)行的運動。通常在運動方程中不包含末端執(zhí)行器,但應(yīng)包含末端執(zhí)行器的坐標(biāo)系,這是因為它可以容許進(jìn)行從坐標(biāo)系 出發(fā)的變換。同時也要注意第一個和最后一個坐標(biāo)系的原點的位置,它們將決定機器人的總編換方程??梢栽诘谝粋€和最后的坐標(biāo)系之間建立其他的(或不同的)中間坐標(biāo)系,但只要第一個和最后的坐標(biāo)系沒有改變,機器人的總變換便是不變的。應(yīng)注意的是,第一個關(guān)節(jié)的原點并不在關(guān)節(jié)的實際位置,但證明這樣做是沒有問題的,因為無論實際關(guān)節(jié)是高一點還是低一點,機器人的運動并不會有任何差異。因此,考慮原點位置時可不用考慮基座上關(guān)節(jié)的實際位置。 接下來,我們將根據(jù)已建立的坐標(biāo)系來填寫表2.2中的參數(shù)。參考前一節(jié)中任意兩個坐標(biāo)系之間的四個運動的順序。從 開始,有一個旋轉(zhuǎn)運動將 轉(zhuǎn)到了 ,為使得 與 軸重合,需要沿 和沿 的平移均為零,還需要一個旋轉(zhuǎn)將 轉(zhuǎn)到 ,注意旋轉(zhuǎn)是根據(jù)右手規(guī)則進(jìn)行的,即將右手手指按旋轉(zhuǎn)的方向彎曲,大拇指的方向則為旋轉(zhuǎn)坐標(biāo)軸的方向。到了這時, 就變換到了 。 接下來,繞 旋轉(zhuǎn) ,將 轉(zhuǎn)到了 ,然后沿 軸移動距離 ,使坐標(biāo)系原點重合。由于前后兩個z軸是平行的,所以沒有必要繞x軸旋轉(zhuǎn)。按照這樣的步驟繼續(xù)做下去,就能得到所需要的結(jié)果。 必須要認(rèn)識到,與其他機械類似,機器人也不會保持原理圖中所示的一種構(gòu)型不變。盡管機器人的原理圖是二維的,但必須要想象出機器人的運動,也就是說,機器人的不同連桿和關(guān)節(jié)在運動時,與之相連的坐標(biāo)系也隨之運動。如果這時原理圖所示機器人構(gòu)型的坐標(biāo)軸處于特殊的位姿狀態(tài),當(dāng)機器人移動時它們又會處于其他的點和姿態(tài)上。比如, 總是沿著關(guān)節(jié)3與關(guān)節(jié)4之間連線 的方向。當(dāng)機器人的下臂繞關(guān)節(jié)2旋轉(zhuǎn)而運動。在確定參數(shù)時,必須記住這一點。 表2.2 例2.19機器人的參數(shù)
# |

|
d |
a |

|
1 |

|
0 |
0 |
90 |
2 |

|
0 |

|
0 |
3 |

|
0 |

|
0 |
4 |

|
0 |

|
-90 |
5 |

|
0 |
0 |
90 |
6 |

|
0 |
0 |
0 |
表示旋轉(zhuǎn)關(guān)節(jié)的關(guān)節(jié)變量,d表示滑動關(guān)節(jié)的關(guān)節(jié)變量。因為這個機器人的關(guān)節(jié)全是旋轉(zhuǎn)的,因此所有關(guān)節(jié)變量都是角度。 通過簡單地從參數(shù)表中選取參數(shù)代入A矩陣,便可寫出每兩個相鄰關(guān)節(jié)之間的變換。例如,在坐標(biāo)系0和1之間的變換矩陣 可通過將 (sin =1,cos =0, = )以及指定 為 等代入A矩陣得到,對其他關(guān)節(jié)的 ~ 矩陣也是這樣,最后得:

(2.55)
 特別注意:為簡化最后的解,將用到下列三角函數(shù)關(guān)系式:
(2.56) 在機器人的基座和手之間的總變換為:
(2.57)

- 斯坦福機械手臂。在斯坦福機械手臂上指定坐標(biāo)系(如圖2.29所示),并填寫參數(shù)表。斯坦福機械手臂是一個球坐標(biāo)手臂,即開始的兩個關(guān)節(jié)是旋轉(zhuǎn)的,第三個關(guān)節(jié)是滑動的,最后三個腕關(guān)節(jié)全是旋轉(zhuǎn)關(guān)節(jié)。
 圖2.29 斯坦福機械手臂示意圖 解: 在看本題解答之前,現(xiàn)根據(jù)自己的理解來做,問題的答案在本章的最后。建議在看解答中建立的坐標(biāo)系和機械手臂的解之前,先試著自己做。 機器手臂最后的正運動學(xué)解是相鄰關(guān)節(jié)之間的6個變換矩陣的乘積:
 其中


(2.58)

2.9 機器人運動學(xué)解
如前所述,這里真正重要的是你運動學(xué)解。為了使機器人手臂處于期望的位姿,如果有了逆運動學(xué)解就能確定每個關(guān)節(jié)的值。前面已對特定坐標(biāo)系統(tǒng)的逆運動學(xué)解作了介紹。在這一部分,將研究求解逆運動方程的一般步驟。 現(xiàn)在你可能已經(jīng)注意到,前面的運動方程中有許多角度的耦合,比如 ,這就使得無法從矩陣中提取足夠的元素來求解單個的正弦和余弦項以計算角度。為使角度解耦,可例行地用單個 矩陣左乘 矩陣,使得方程右邊不再包括這個角度,于是可以找到產(chǎn)生角度的正弦值和余弦值的元素,并進(jìn)而求得相應(yīng)的角度。 這里概要地給出了這個方法,并將其用于例2.19中的簡單機械手臂。雖然所給出的解決方法只針對這一給定構(gòu)型的機器人,但也可以類似地用于其它機器人。正如在例2.19中看到的,表示機器人的最后方程為:
 為了書寫方便,將上面的矩陣表示為[RHS](Right-Hand Side)。這里再次將機器人的期望位姿表示為:
(2.59) 為了求解角度,從 開始,依次用 左乘上述兩個矩陣,得到:
(2.60)

(2.61) 根據(jù)方程的3,4元素,有:
(2.62) 根據(jù)1,4元素和2,4元素,可得:
(2.63) 整理上面兩個方程并對兩邊平方,然后將平方值相加,得:
 根據(jù)式(2.56)的三角函數(shù)方程,可得:
 于是:
(2.64) 在這個方程中,除 和 外,每個變量都是已知的, 和 將在后面求出。已知:
 于是可得:
(2.65) 因為關(guān)節(jié)2,3和4都是平行的,左乘 和 的逆不會產(chǎn)生有用的結(jié)果。下一步左乘 的逆,結(jié)果為:
(2.66) 乘開后可得:

(2.67) 根據(jù)式(2.67)矩陣的3,3元素,

(2.68) 由此可計算 和 ,如前面所討論過的,它們可用來計算 。 現(xiàn)在再參照式(2.63),并在這里重復(fù)使用它就可計算角 的正弦和余弦值。具體步驟如下:
 由于 以及 ,可得:
(2.69) 上面兩個方程中包含兩個未知數(shù),求解 和 ,可得:
(2.70) 盡管這個方程較復(fù)雜,但它的所有元素都是已知的,因此可以計算得到:
(2.71) 既然 和 已知,進(jìn)而可得:
(2.72) 因為式(2.68)中的 有兩個解,所以 也有兩個解。 根據(jù)式(2.67)中的1,3元素和2,3元素,可以得到:
(2.73) 和 (2.74) 也許已注意到,因為對于 沒有解耦方程,所以必須用 矩陣的逆左乘式(2.67)來對它解耦。這樣做后可得到:

(2.75) 根據(jù)式(2.75)中的2,1元素和2,2元素,得到:
(2.76) 至此找到了6個方程,它們合在一起給出了機器人置于任何期望位姿時所需的關(guān)節(jié)值。雖然這種方法僅適用于給定的機器人,但也可采取類似的方法來處理其他的機器人。 值得注意的是,僅僅因為機器人的最后三個關(guān)節(jié)交于一個公共點才使得這個方法有可能求解,否則就不能用這個方法來求解,而只能直接求解矩陣或通過計算矩陣的逆來求解未知的量。大多數(shù)工業(yè)機器人都有相交的腕關(guān)節(jié)。
|