關節角偏移
機器人的零關節角位姿往往是某個很不尋常的(甚至是機械無法實現的)位姿。對於 Puma 機器人,其零角度位姿就呈現出一種不是很明顯的 L 形狀,機器人的上臂水平,下臂垂直向上,如圖所示。
這一結果是由機器人的 D-H 參數形式所決定的。機器人的控制設計人員可能會選擇零關節角位姿為一些更為明顯的位形。關節坐標偏移提供了一種機制,它使我們可以設置任意位形作為零關節坐標。偏移向量
要在任何運動學或動力學函數被調用之前被加到用戶指定的關節角度上。例如:
類似地,它要在執行一次運算操作后被減去,如逆運動學:
偏移量設置是通過設定Link
對象的offset
屬性來完成的。例如:
>> L = Link([0 0 1 0]);
>> L.offset = pi/4
L =
Revolute(std): theta=q, d=0, a=1, alpha=0, offset=0.785398
或者
>> p560.links(2).offset = pi/2
如圖所示
確定 D-H 參數
確定 D-H 參數的經典方法是系統地為每個連桿分配一個坐標系。Puma 機器人的連桿坐標系就是采用標准 D-H 形式進行設定的,如圖所示。
然而,每一個坐標系都有很強的約束,因為關節旋轉必須圍繞
軸,連桿位移必須沿
方向。這也為基座和末端執行器坐標系的設定施加了約束,進而最終決定了前面討論的零角度位姿。因此為一個全新的機械臂確定 D-H 參數和連桿坐標系要比想象的困難。
工具箱還支持另一種方法,它簡單地將機械臂描述為一系列從末端執行器基座到頂端的基本平移和旋轉。有些基本操作是常數,如表示連桿長度或偏移量的平移,而一些操作是廣義關節坐標
的函數。不同於傳統的方法,我們不對這些有可能發生旋轉和平移的軸施加任何約束。
如上圖所示的一個例子,我們首先在基座上隨便定義一個坐標系,然后把從基座到頂端的平移和旋轉序列寫入一個字符串:
>> s = 'Tz(L1) Rz(q1) Ry(q2) Ty(L2) Tz(L3) Ry(q3) Tx(L4) Ty(L5) Tz(L6) Rz(q4) Ry(q5) Rz(q6)'
請注意,我們已經將第二關節描述為Ry(q2)
,即繞
軸的旋轉,它不能使用 D-H 形式。
該字符串被輸入一個符號代數函數:
>> dh = DHFactor(s);
它返回一個 DHFactor 對象,其中保存了已被分解為 D-H 參數的機器人運動學結構。我們可以將該結構以一種可讀形式顯示出來:
>> dh
dh =
DH(q1, L1, 0, -90).DH(q2+90, 0, -L3, 0).DH(q3-90, L2+L5, L4, 90).DH(q4, L6, 0, -90).DH(q5, 0, 0, 90).DH(q6, 0, 0, 0)
其顯示的各關節 D-H 參數順序分別為 , , 和 。關節角偏移量(一個加到或減去的常量,相對於從關節角變量,如 和 )是自動生成的,基座和工具變換也是自動生成的。這個對象還可以生成一個字符串,它是一個工具箱命令,用於創建一個名為“puma”的機器人:
>> cmd = dh.command('puma');
>> cmd
cmd =
SerialLink([0, L1, 0, -pi/2, 0; 0, 0, -L3, 0, 0; 0, L2+L5, L4, pi/2, 0; 0, L6, 0, -pi/2, 0; 0, 0, 0, pi/2, 0; 0, 0, 0, 0, 0; ], 'name', 'puma', 'base', eye(4,4), 'tool', eye(4,4), 'offset', [0 pi/2 -pi/2 0 0 0 ])
當定義了L1
到L6
后,這個命令可以被執行:
>> robot = eval(cmd);
它創建一個名為robot
的工作空間變量,該變量是一個SerialLink
對象。
改進型 D-H 參數
1986年,克雷格[Craig 1986]首先提出了一種改進的 D-H 參數,如圖所示
其中每個連桿坐標系被固接到該連桿的近端(靠近前一個連桿),而不是其遠端。經過這種修改,使得參數符號在某些方面顯得更加清晰和簡潔,因而目前這種 D-H 參數法也更為常用。然而它的引入也增加了更多的混亂,特別是對那些機器人運動學的初學者。該問題的根源在於運動學、雅可比矩陣和動力學的算法都是依賴於其使用的運動學約定。根據克雷格的約定,連桿變換矩陣是
克雷格將其表示為
。它與上述方程具有相同的因子項,但是順序不同——記住旋轉順序是不可交換的,而這正是問題的核心。
始終表示連桿
的長度,但在一種約定中它是坐標系
和
之間原點的位移,而在另一種約定里它又變成坐標系
和
之間的原點位移。
一般看論文的時候,弄清楚該作者所使用的 D-H 約定尤其重要,但這一重要信息往往不被提及。你可以從表格的欄標題上尋找線索。如果它們都具有相同的下標,即 , , 和 ,那么它是標准 D-H 參數法。如果有一半的下標是不同的,即 , , 和 ,那么你正在使用改進 D-H 參數法。總之,你必須知道你的 D-H 參數屬於何種運動學約定。
當然,如果在你發表的論文中能清楚地說明你的參數使用何種運動學約定,那對讀者肯定會有所幫助。
工具箱對於兩種參數形式都可以處理。對於改進 D-H 參數法,只需要在創建連桿對象時增加一個可選參數來指定:
>> L1 = Link([0 1 0 0 0], 'modified')
L1 =
Revolute(mod): theta=q, d=1, a=0, alpha=0, offset=0
或
>> L1 = RevoluteMDH('d', 1)
L1 =
Revolute(mod): theta=q, d=1, a=0, alpha=0, offset=0
而標准 D-H 參數為
>> L1 = Link([0 1 0 0 0])
L1 =
Revolute(std): theta=q, d=1, a=0, alpha=0, offset=0
或
>> L1 = Revolute('d', 1)
L1 =
Revolute(std): theta=q, d=1, a=0, alpha=0, offset=0
如:
可以將其重新組合為
其中標記為
的一項具有與最開始所說的連桿變換矩陣相同的形式,因為關於同一軸的平移和旋轉是可以交換順序的,即
,其中
。