机器人正运动学(7)—— 连杆坐标系与DH参数
目錄
- 1. 引言
- 2. 連桿坐標(biāo)系
- 3 DH參數(shù)
- 3.1 DH參數(shù)的介紹
- 3.2 DH參數(shù)定義
- 3.2.1 連桿長(zhǎng)度和扭角
- 3.2.2 連桿轉(zhuǎn)角和連桿偏距
- 4. 解決問題
- 5. 總結(jié)
1. 引言
??前面的文章我們一直在介紹坐標(biāo)系以及它們之間的變換關(guān)系,數(shù)學(xué)的意味還是很濃的。講了那么多的公式和規(guī)律,它們要怎么用在機(jī)器人上呢?這篇文章將介紹坐標(biāo)系和機(jī)器人之間的紐帶即連桿坐標(biāo)系。完成這篇文章的介紹之后我們就可以利用一些機(jī)器人的開發(fā)平臺(tái)如ROS,Robotic Toolbox,SimMechanics等來進(jìn)行一些基本的機(jī)器人建模與仿真工作了。
2. 連桿坐標(biāo)系
??從前面一系列關(guān)于坐標(biāo)系的文章中我們了解到可以利用齊次變換矩陣來計(jì)算某個(gè)空間點(diǎn)在各個(gè)坐標(biāo)系下的坐標(biāo)。在機(jī)器人正運(yùn)動(dòng)學(xué)(3)—— 坐標(biāo)系及其變換文章開頭我們提出了一個(gè)問題,如何求解一個(gè)多連桿機(jī)器人(如下圖)的末端點(diǎn)P在世界坐標(biāo)系下的坐標(biāo)。介紹到這里我們終于可以嘗試解決這個(gè)問題。
??由于機(jī)器人的各個(gè)連桿之間可以發(fā)生相對(duì)運(yùn)動(dòng),我們真的很難直觀地看出末端點(diǎn)在世界坐標(biāo)系的位置。那怎么辦呢?其實(shí)我們可以把這個(gè)問題分解一下讓每個(gè)子問題求解起來沒有那么困難。
??如果我們建立一個(gè)與末端連桿固連的坐標(biāo)系,那么 PPP 點(diǎn)在該坐標(biāo)系下的坐標(biāo)是很容易給出的,因?yàn)樗缓湍┒诉B桿的機(jī)械尺寸有關(guān),與機(jī)器人的運(yùn)動(dòng)無關(guān),這就是一個(gè)連桿坐標(biāo)系。連桿坐標(biāo)系是一個(gè)個(gè)與機(jī)器人的連桿固連在一起的坐標(biāo)系。如果我們?cè)跈C(jī)器人的每一個(gè)連桿上都建立一個(gè)固連坐標(biāo)系,并且我們想辦法求解每相鄰兩個(gè)連桿之間的坐標(biāo)系變換關(guān)系,是不是就能很容易地將P點(diǎn)坐標(biāo)映射到世界坐標(biāo)系了呢(相對(duì)而言相鄰兩個(gè)連桿之間的坐標(biāo)變換關(guān)系是容易求得的)。
??這時(shí)比較關(guān)鍵的問題是怎么求解相鄰兩個(gè)坐標(biāo)系之間的變換關(guān)系。隨便建立連桿坐標(biāo)系肯定是不好的,一方面這將導(dǎo)致坐標(biāo)系之間的關(guān)系復(fù)雜多樣,難以統(tǒng)一;另一方面我們可能需要進(jìn)行很多不必要參數(shù)的測(cè)量。因此建立連桿坐標(biāo)系需要一套準(zhǔn)則。我們希望這套準(zhǔn)則盡可能使用較少的參數(shù)來描述各個(gè)坐標(biāo)系,同時(shí)我們希望這套準(zhǔn)則是普適的。
??1995年Jacques Denavit 和 Richard Hartenberg解決了這個(gè)問題,他們提出了著名的DH參數(shù)法建立連桿坐標(biāo)系的準(zhǔn)則。在這個(gè)準(zhǔn)則下每個(gè)連桿只需四個(gè)參數(shù)就可以確定它的連桿坐標(biāo)系。
3 DH參數(shù)
3.1 DH參數(shù)的介紹
??DH參數(shù)是一種描述連桿坐標(biāo)系的方法,如下圖所示。可以認(rèn)為這是機(jī)器人中的兩個(gè)相鄰連桿 Linki?1Link_{i-1}Linki?1? 和 LinkiLink_{i}Linki?。在這里我首先還是希望解釋一下圖中符號(hào)的含義,特別是下標(biāo)含義,我學(xué)習(xí)的時(shí)候經(jīng)常弄混。
??首先我們來定義兩個(gè)概念,驅(qū)動(dòng)關(guān)節(jié)和傳動(dòng)關(guān)節(jié),這兩個(gè)概念很容易理解。我們都知道對(duì)于電驅(qū)動(dòng)的機(jī)器人,各個(gè)關(guān)節(jié)處通常都會(huì)有伺服電機(jī)驅(qū)動(dòng)。在一個(gè)串聯(lián)機(jī)器人中連桿i靠近基座的關(guān)節(jié)驅(qū)動(dòng)連桿i的運(yùn)動(dòng),稱為連桿i的驅(qū)動(dòng)關(guān)節(jié); 連桿i靠近末端執(zhí)行器的關(guān)節(jié)用于驅(qū)動(dòng)連桿i+1的運(yùn)動(dòng),因此我們稱這個(gè)關(guān)節(jié)為連桿i的傳動(dòng)關(guān)節(jié)。DH參數(shù)建立的坐標(biāo)系又被稱為傳動(dòng)軸坐標(biāo)系。這里需要強(qiáng)調(diào)連桿i的坐標(biāo)系是建立在傳動(dòng)關(guān)節(jié)也就是靠近末端執(zhí)行器一側(cè)的關(guān)節(jié)處,也就是說坐標(biāo)系Oi?1xi?1yi?1zi?1O_{i-1}x_{i-1}y_{i-1}z_{i-1}Oi?1?xi?1?yi?1?zi?1?(簡(jiǎn)稱 {Oi?1}\{O_{i-1}\}{Oi?1?})是與 Linki?1Link_{i-1}Linki?1? 固連在一起的,坐標(biāo)系 {Oi}\{O_{i}\}{Oi?} 是與 LinkiLink_{i}Linki? 固連在一起的,在后面的介紹中請(qǐng)各位一定牢記,否則你會(huì)覺得整個(gè)坐標(biāo)系變換都很奇怪。
??Axisi?1Axis_{i-1}Axisi?1? 對(duì)應(yīng)的是 Linki?1Link_{i-1}Linki?1? 的驅(qū)動(dòng)軸; AxisiAxis_{i}Axisi? 對(duì)應(yīng)的是 Linki?1Link_{i-1}Linki?1? 的傳動(dòng)軸以及 LinkiLink_{i}Linki? 的驅(qū)動(dòng)軸; Axisi+1Axis_{i+1}Axisi+1?對(duì)應(yīng)的是 LinkiLink_{i}Linki? 的傳動(dòng)軸…
??標(biāo)志右斜杠的兩對(duì)直線圈1和圈2分別是兩對(duì)平行直線。圖中的 θi\theta_{i}θi? 、did_{i}di? 、αi\alpha _{i}αi? 、aia_{i}ai? 就是我們要介紹的 LinkiLink_{i}Linki? 的DH參數(shù)。
3.2 DH參數(shù)定義
??要說DH參數(shù)為何如此受青睞我覺得主要有兩個(gè)原因。第一就是DH參數(shù)描述一個(gè)連桿坐標(biāo)系只需要4個(gè)參數(shù); 第二這四個(gè)參數(shù)具備明顯的物理意義:
??從上面的描述我們可以看出1和2是描述的是 Linki?1Link_{i-1}Linki?1? 和 LinkiLink_{i}Linki? 之間的關(guān)系,3和4描述的是 LinkiLink_{i}Linki? 的固有屬性(因?yàn)樗鼈冎缓?LinkiLink_{i}Linki? 有關(guān))。因此要說清楚DH參數(shù),這兩組不同含義的參數(shù)還是分開來看。
3.2.1 連桿長(zhǎng)度和扭角
??我們先從 αi\alpha _{i}αi? 和 aia_{i}ai? 的定義開始,因?yàn)檫@兩個(gè)參數(shù)比較直觀。下圖就是連桿固有參數(shù) αi\alpha _{i}αi? 和 aia_{i}ai? 的示意圖。再次強(qiáng)調(diào)連桿長(zhǎng)度和扭角是連桿自身的固有屬性,與其他連桿沒有任何關(guān)系。
??無論這個(gè)連桿有多么的復(fù)雜,我們都可以對(duì)它進(jìn)行一種統(tǒng)一的描述:兩根關(guān)節(jié)軸線(AxisiAxis_{i}Axisi? 和 Axisi+1Axis_{i+1}Axisi+1?)以及他們的公垂線(圈1)是對(duì)一個(gè)連桿最簡(jiǎn)單的抽象。這里可能需要一點(diǎn)點(diǎn)空間幾何的知識(shí),異面直線有且僅有一條公垂線。
??在這里我們定義Axis_{i}和Axis_{i+1}的公垂線圈1的長(zhǎng)度為連桿長(zhǎng)度a_{i},這就是四個(gè)DH參數(shù)中的第一個(gè)參數(shù)。
??定義 AxisiAxis_{i}Axisi? 和 Axisi+1Axis_{i+1}Axisi+1? 兩條異面直線的夾角為連桿的關(guān)節(jié)扭角 αi\alpha _{i}αi?,圖中雙右斜杠對(duì)應(yīng)的兩條直線平行,這是DH參數(shù)中的第二個(gè)參數(shù)。
3.2.2 連桿轉(zhuǎn)角和連桿偏距
??接下來我們來看連桿轉(zhuǎn)角 θi\theta _{i}θi? 和 連桿偏距di連桿偏距d_{i}連桿偏距di? 的定義。這兩個(gè)參數(shù)描述的是一種位置關(guān)系。再次強(qiáng)調(diào)它們描述的是相鄰兩個(gè)連桿之間的位置關(guān)系,不再是連桿的固有屬性。就這里來說 θi\theta _{i}θi? 和 did_{i}di? 描述的是 LinkiLink_{i}Linki? 相對(duì)于 Linki?1Link_{i-1}Linki?1? 的位置關(guān)系。
??請(qǐng)?jiān)诨氐綀D1中觀察(這里我把圖1放在了下面,方便觀看),{Oi?1}\{O_{i-1}\}{Oi?1?} 和 {Oi}\{O_{i}\}{Oi?} 分別是與 Linki?1Link_{i-1}Linki?1? 和 LinkiLink_{i}Linki? 固連的坐標(biāo)系。根據(jù)我們的定義 {Oi?1}\{O_{i-1}\}{Oi?1?} 的x軸建在 Axisi?1Axis_{i-1}Axisi?1? 和 AxisiAxis_{i}Axisi? 的公垂線上,{Oi}\{O_{i}\}{Oi?} 的x軸建在 AxisiAxis_{i}Axisi? 和 Axisi+1Axis_{i+1}Axisi+1? 的公垂線上。仔細(xì)體會(huì)一下這說明了什么。這說明 {Oi?1}\{O_{i-1}\}{Oi?1?} 的x軸和 {Oi}\{O_{i}\}{Oi?} 的x軸都垂直于 AxisiAxis_{i}Axisi?,也就是 AxisiAxis_{i}Axisi? 是異面直線 xi?1x_{i-1}xi?1? 和 xix_{i}xi? 的公垂線。
??圖1中單右斜杠對(duì)應(yīng)的兩條直線平行,那么 θi\theta _{i}θi? 對(duì)應(yīng)的就是直線 xi?1x_{i-1}xi?1? 和 xix_{i}xi? 的夾角。因此我們定義 {Oi?1}\{O_{i-1}\}{Oi?1?} 和 {Oi}\{O_{i}\}{Oi?} 的x軸夾角為連桿轉(zhuǎn)角 θi\theta _{i}θi?。
??我們發(fā)現(xiàn) {Oi?1}\{O_{i-1}\}{Oi?1?} 沿 AxisiAxis_{i}Axisi?(即 {Oi?1}\{O_{i-1}\}{Oi?1?} 的z軸)旋轉(zhuǎn) θi\theta _{i}θi? 后 {Oi?1}\{O_{i-1}\}{Oi?1?} 和 {Oi}\{O_{i}\}{Oi?} 的x軸平行了!我們定義 {Oi?1}\{O_{i-1}\}{Oi?1?} 和 {Oi}\{O_{i}\}{Oi?} 的x軸之間的公垂線長(zhǎng)度為連桿偏距 did_{i}di?。
??我們發(fā)現(xiàn) {Oi?1}\{O_{i-1}\}{Oi?1?} 沿著 AxisiAxis_{i}Axisi? 旋轉(zhuǎn) θi\theta _{i}θi?,再沿著新坐標(biāo)系的z軸(其實(shí)還是 AxisiAxis_{i}Axisi?,因?yàn)榍懊娴男D(zhuǎn)是繞著z軸的,因此z軸方向不會(huì)改變)平移 did_{i}di?,之后你會(huì)發(fā)現(xiàn)新的坐標(biāo)系和 {Oi}\{O_{i}\}{Oi?} 的x軸已經(jīng)完全重合了!!
??更進(jìn)一步,再將新坐標(biāo)系沿著其x軸旋轉(zhuǎn) αi\alpha _{i}αi? 角,我們發(fā)現(xiàn)新坐標(biāo)系和 {Oi}\{O_{i}\}{Oi?} 不僅x軸重合,而且z軸平行了!!!那么如果再沿著x軸平移 aia_{i}ai? 呢?沒錯(cuò)兩個(gè)坐標(biāo)系這時(shí)候完全重合!!!!
??以上描述的過程用數(shù)學(xué)語言表達(dá)就是:i?1Ti=rotz(θi)transz(di)rotx(αi)transx(ai)^{i-1}\textrm{T}_{i}=rot_{z}\left ( \theta _{i} \right )trans_{z}\left ( d_{i} \right )rot_{x}\left ( \alpha _{i} \right )trans_{x}\left ( a_{i} \right )i?1Ti?=rotz?(θi?)transz?(di?)rotx?(αi?)transx?(ai?)
??這個(gè)變換矩陣可以將 {Oi}\{O_{i}\}{Oi?} 中的點(diǎn)映射到 {Oi?1}\{O_{i-1}\}{Oi?1?}!有一點(diǎn)需要注意沿同一軸連續(xù)的平移和旋轉(zhuǎn)是可以交換位置的,這一點(diǎn)大家從幾何的角度思考一下就不難發(fā)現(xiàn),因此沿z的平移和旋轉(zhuǎn)可交換,沿x軸的平移和旋轉(zhuǎn)可交換。
4. 解決問題
??到這里我們終于可以解決前面提到的關(guān)于機(jī)器人末端點(diǎn)在基坐標(biāo)系下的坐標(biāo)的問題了。方法很簡(jiǎn)單,就是在每個(gè)連桿上都建立一個(gè)坐標(biāo)系,然后用前面提到的變換關(guān)系找到相鄰連桿之間的變換關(guān)系,這樣問題就迎刃而解了。如下圖所示就是在SCARA機(jī)器人的各個(gè)連桿上建立的坐標(biāo)系,為了便于觀察添加了一些輔助線。
??在利用DH參數(shù)進(jìn)行機(jī)器人正運(yùn)動(dòng)學(xué)分析時(shí)我們習(xí)慣上列寫DH參數(shù)表。有了參數(shù)表后我們就已經(jīng)從機(jī)器人中抽象出了數(shù)學(xué)模型。有人說高手眼中沒有機(jī)器人,只有坐標(biāo)系大概就是這種感覺吧。我們把這個(gè)機(jī)器人的參數(shù)列成如下的表格。(依然請(qǐng)各位牢記DH參數(shù)中\(zhòng)theta代表兩個(gè)x軸夾角,d代表兩個(gè)x軸的公垂線長(zhǎng)度,\alpha代表兩個(gè)z軸夾角,a代表兩個(gè)z軸的公垂線長(zhǎng)度)
| 1 | θ1\theta _{1}θ1? | d1d_{1}d1? | 000 | l1l_{1}l1? |
| 2 | θ2\theta _{2}θ2? | 000 | 000 | l2l_{2}l2? |
| 3 | 0 | d3d_{3}d3? | 0 | 0 |
| 4 | θ4\theta _{4}θ4? | 0 | 0 | 0 |
??DH參數(shù)表到這里就算是建立完成了,SCARA機(jī)器人第三軸是平移關(guān)節(jié),DH參數(shù)表中的變量為 θ1\theta _{1}θ1?,θ2\theta _{2}θ2?,d3d_{3}d3?,θ4\theta _{4}θ4?,其余參數(shù)均為固定值。還記得我們?cè)?.2.2介紹的變換關(guān)系嗎?每相鄰兩個(gè)連桿之間的關(guān)系都可以用這個(gè)變換加以描述。因此我們可以找到:0T1=rotz(θ1)transz(d1)transx(l1)^{0}\textrm{T}_{1}=rot_{z}\left ( \theta _{1} \right )trans_{z}\left ( d_{1} \right )trans_{x}\left ( l_{1} \right )0T1?=rotz?(θ1?)transz?(d1?)transx?(l1?)
1T2=rotz(θ2)transx(l2)^{1}\textrm{T}_{2}=rot_{z}\left ( \theta _{2} \right )trans_{x}\left ( l_{2} \right )1T2?=rotz?(θ2?)transx?(l2?)
2T3=transz(d3)^{2}\textrm{T}_{3}=trans_{z}\left ( d_{3} \right )2T3?=transz?(d3?)
3T4=rotz(θ4)^{3}\textrm{T}_{4}=rot_{z}\left ( \theta _{4} \right )3T4?=rotz?(θ4?)
??我們要求的 PPP 點(diǎn)是不是就是坐標(biāo)系{4}的原點(diǎn)呢?它在基坐標(biāo)系下如下表示呢?很簡(jiǎn)單把所有變換迭乘就可以了:P0=0T1?1T2?2T3?3T4?[0001]P^{0}=^{0}\textrm{T}_{1}\cdot ^{1}\textrm{T}_{2}\cdot ^{2}\textrm{T}_{3}\cdot ^{3}\textrm{T}_{4}\cdot \begin{bmatrix} 0\\ 0\\ 0\\ 1 \end{bmatrix}P0=0T1??1T2??2T3??3T4???????0001??????
??因此當(dāng)我們測(cè)量到DH參數(shù)中各個(gè)變量的值以及已知機(jī)器人的結(jié)構(gòu)參數(shù)時(shí),只需要代入到上面的方程中,就可以求解末端點(diǎn) PPP 在基坐標(biāo)系下的坐標(biāo)。
5. 總結(jié)
??這篇文章我們介紹了DH參數(shù)以及其物理意義,有些特殊的連桿如何建立坐標(biāo)系沒有進(jìn)行相關(guān)介紹,比如連桿兩個(gè)軸線平行/相交時(shí)如何建立坐標(biāo)系。建立DH坐標(biāo)系有哪些小技巧,這些我們將在下一篇文章進(jìn)行討論。
??由于個(gè)人能力有限,所述內(nèi)容難免存在疏漏,歡迎指出,歡迎討論。
下一篇:機(jī)器人正運(yùn)動(dòng)學(xué)(8)—— DH坐標(biāo)系建立技巧
————————————————
版權(quán)聲明:本文為CSDN博主「hitgavin」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hitgavin/article/details/104442034
總結(jié)
以上是生活随笔為你收集整理的机器人正运动学(7)—— 连杆坐标系与DH参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于java的高校实习生管理系统
- 下一篇: Quartus II 软件使用(零)--