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