1. 程式人生 > >基於MATLAB機器人工具箱的KUKA youBot機械臂運動學建模——DH法

基於MATLAB機器人工具箱的KUKA youBot機械臂運動學建模——DH法

        以實驗室的KUKA youBot五自由度機械臂為切入點,記得當時和實驗室的同學在這上面花費了好長時間,最後也沒搞定,而這又算是基礎中的基礎,不能忽視。

DH一般分為標準DH和改進的DH,以John J.Craig的《機器人學導論》來說,它的是Modified DH,另一本孫富春翻譯的《機器人學導論——分析、控制及應用》則是用的標準DH。通過Peter Corke的那本《Robotics,Vision and Control》(已有中文版)我才知道有這兩個。區別很明顯DH引數表的下標如果都是一樣的則是標準DH,如果有一半不一樣則是Modified DH。

這樣的

這條臂比較特別的地方在於關節0和關節1之間有個偏置,特別是在於改進DH中的座標系0和座標系1的設定很特殊。

1. 標準DH

        標準DH的介紹我是參考的孫富春翻譯的《機器人學導論——分析、控制及應用》,後來接觸到《Robot Modeling and Control》(已有中文版)也是標準DH。

一個剛體的自由度是6,而為什麼標準DH只用四個引數呢?這裡其實暗含了一個建立座標系的原則:垂直和相交,剛好六個限制條件。這在《Robot Modeling and Control》這本書中有詳細介紹。垂直相交的意思是說,建立座標系的時候,後一個座標系的X要與前一個座標系的Z垂直且相交。如建立X1的時候需要與Z0垂直相交。

在孫的那本書的P62頁,關於DH引數的解釋如下圖:



我舉個例子,例如:


我記的時候就是前一個Z,和後一個的X。如右邊括號裡的,而這裡正是與後文的改進的DH不一樣的地方。

KUKA youBot機械臂的DH




%kuka youBot 
clear;
clc;
close all;
d1=0.147;
a1=0.033;
a2=0.155;
a3=0.135;
d5=0.113;
tool = 0.105;

qlim1=[-169,169]*pi/180;
qlim2=[-65,90]*pi/180;
qlim3=[-151,146]*pi/180;
qlim4=[-102.5,102.5]*pi/180;
qlim5=[-167.5,167.5]*pi/180;

 L(1) = Link('d', d1, 'a', a1, 'alpha', pi/2, 'qlim',qlim1);
 L(2) = Link('d', 0, 'a', a2, 'alpha', 0, 'qlim', qlim2, 'offset', 1.57);
%  L(2) = Link('d', 0, 'a', a2, 'alpha', 0, 'qlim', qlim2);
 L(3) = Link('d', 0, 'a', a3, 'alpha', 0,'qlim',qlim3);
 L(4) = Link('d', 0, 'a', 0, 'alpha', -pi/2,'qlim',qlim4, 'offset', -1.57);
%  L(4) = Link('d', 0, 'a', 0, 'alpha', -pi/2,'qlim',qlim4);
 L(5) = Link('d', d5, 'a', 0, 'alpha', 0,'qlim',qlim5);
 
 bot = SerialLink(L,'name','KUKA youBot');
 bot.display();
 
%  bot.plot([0 0 0 0 0]);
%  bot.teach;

 %% forward kinematics.
 bot.tool= transl(0, 0, tool);% EEF
 
bot.fkine([0 0 0 0 0]*pi/180);

bot.fkine([0 0 -90 0 0]*pi/180)
bot.fkine([0 0 90 0 0]*pi/180)

編好以後可以輸入一些角度驗證一下


如上圖中的這個姿態,第三關節轉動90°,X為33 + (655 - 302)= 386mm,Z座標為底座到第三關節長度為302mm與Figure2中顯示的一致,說明DH建立沒有問題。

2. Modified DH

        改進的DH那就是如John J.Craig的《機器人學導論》上的,它與標準DH的區別在於:標準DH的Link0(大地)和Link1之間為J0。而Modified DH則是Link0上有J0,Link1上有J1,基座為座標系{0},一般讓{0}和{1}重合。

Craig的書中文版P52頁


P54頁建立座標系的步驟:




舉個例子:


通常都是下標有一半是i -1,類似這樣




clc;
clear;
close all;
L(1) = Link([ 0  0.147  0  0 ],  'modified' );
L(2) = Link([ 0  0  0.033 pi/2  ],  'modified'); 
L(3) = Link([ 0 0 0.155  0  ],  'modified');
L(4) = Link([ 0  0 0.135 0],  'modified'); 
L(5) = Link([ 0  0.218 0 -pi/2],  'modified') ;


youbot = SerialLink(L, 'name', 'youbot');
youbot.display()
youbot.plot([0 0 0 0 0]);

youbot.teach;



相關連結: