1 前言
DH參數(shù)是機(jī)器人學(xué)習(xí)過程中常用的一種建模方法,通常情況下每一次坐標(biāo)變換需要6個(gè)獨(dú)立參數(shù)來描述坐標(biāo)系i相對(duì)坐標(biāo)系i-1的關(guān)系,即3個(gè)用來描述位置另外3個(gè)用來描述姿態(tài)。而DH參數(shù)法只需要4個(gè)參數(shù),列出DH參數(shù)表并帶入變換矩陣中可以輕易的得到機(jī)械手末端和基坐標(biāo)系的位姿變換關(guān)系。
而現(xiàn)在主要有兩種DH參數(shù)建模方法,其中標(biāo)準(zhǔn)DH主要適用在開式運(yùn)動(dòng)鏈的機(jī)械結(jié)構(gòu)上,如現(xiàn)在市面上串聯(lián)的多軸機(jī)械臂,而對(duì)閉鏈機(jī)構(gòu)建立坐標(biāo)系會(huì)發(fā)生坐標(biāo)系重合的風(fēng)險(xiǎn)從而產(chǎn)生歧義;而改進(jìn)DH參數(shù)應(yīng)用范圍更廣,在閉式運(yùn)動(dòng)鏈結(jié)構(gòu)建模上(如并聯(lián)四足狗腿等)會(huì)使運(yùn)動(dòng)求解過程更加簡(jiǎn)單。
對(duì)于初學(xué)者只需記住標(biāo)準(zhǔn)DH和改進(jìn)DH建模的主要區(qū)別為連桿上坐標(biāo)系建立的位置不同。Standard DH方法將連桿的坐標(biāo)系固定在連桿的后端,而Modify DH方法將連桿的坐標(biāo)系固定在連桿的前端,見下圖。
前面說DH參數(shù)法只需要4個(gè)參數(shù)而不是6個(gè),是因?yàn)槲覀兪褂迷摲椒〞r(shí)默認(rèn)了兩個(gè)限制條件。那就是坐標(biāo)系之間沒有沿Y軸的平移和繞Y的旋轉(zhuǎn)?。。?!
詳情請(qǐng)見https://blog.csdn.net/zhelijun/article/details/85007805
2 兩種建模方法步驟與應(yīng)用
在此小的以一個(gè)三自由度串聯(lián)腿為例采用兩種方法分別進(jìn)行進(jìn)行建模帶大家認(rèn)識(shí)兩者區(qū)別。(MATLAB代碼見文末)
2.1標(biāo)準(zhǔn)DH法
建系之前注意兩個(gè)要點(diǎn)如下:
(1) 坐標(biāo)軸Xi與坐標(biāo)軸Zi-1垂直
(2) 坐標(biāo)軸Xi與坐標(biāo)軸Zi-1相交
然后我們?cè)僖愿餍D(zhuǎn)關(guān)節(jié)旋轉(zhuǎn)軸或直線關(guān)節(jié)運(yùn)動(dòng)方向?yàn)橄鄳?yīng)的Z軸,以Zi-1和Zi軸的公垂線方向(一般為各自桿長(zhǎng)方向)建立Xi軸,Yi軸按右手定則確定,最終確立各個(gè)連桿坐標(biāo)系如下:注:建立坐標(biāo)系有一個(gè)易錯(cuò)點(diǎn)如下方兩圖,需要對(duì)照兩種DH建模方法好好理解吃透。(對(duì)于標(biāo)準(zhǔn)DH法來說,坐標(biāo)系是建立在相應(yīng)桿件的后部,則其X軸方向是由前一坐標(biāo)Z軸指向該關(guān)節(jié)Z軸的公垂線方向,所以下圖左方才是符合標(biāo)準(zhǔn)建模方法的?。。。?/em>
根據(jù)DH四個(gè)參數(shù)的定義:
(1) 連桿長(zhǎng)度a:zi-1軸與zi軸的公法線長(zhǎng)度,為 桿i的連桿長(zhǎng)(并不是物理意義上的兩桿長(zhǎng))
(2) 連桿扭轉(zhuǎn)角α:關(guān)節(jié)軸線zi-1到zi的轉(zhuǎn)角,以xi軸為轉(zhuǎn)軸(-pi~pi)
(3) 連桿偏距d:從xi-1軸與xi軸的公法線有向距離(正向沿zi-1方向)
(4) 關(guān)節(jié)轉(zhuǎn)角θ:軸線xi-1到xi的轉(zhuǎn)角,以zi-1軸為轉(zhuǎn)軸(-pi~pi)
得到DH參數(shù)表:
表 1 DH參數(shù)
Link | offset+θi-1 | di-1 | ai | αi |
---|---|---|---|---|
1 | pi/2+θ1 | 0 | 0 | pi/2 |
2 | -5pi/6+θ2 | 0 | L2 | 0 |
3 | - pi/2+θ3 | 0 | L3 | 0 |
注:offset為MATLAB機(jī)器人工具箱中對(duì)應(yīng)關(guān)節(jié)的初始偏角
建立模型如下圖:主要MATLAB代碼如下:
% 定義各個(gè)連桿,默認(rèn)為轉(zhuǎn)動(dòng)關(guān)節(jié)
% theta d a alpha
f(1)=Link([ 0 0 0 pi/2] ); f(1).qlim=[-pi,pi]; f(1).offset=pi/2;
f(2)=Link([ 0 0 0.35 0] ); f(2).qlim=[-pi,pi]; f(2).offset=-5*pi/6;
f(3)=Link([ 0 0 0.3 0] ); f(3).qlim=[-pi,pi]; f(3).offset= -pi/2;
sta=SerialLink(f,'name','標(biāo)準(zhǔn)');
sta.tool = transl(0 ,0 ,0);
sta.plot([0 0 0]);
sta.teach(); %機(jī)器人示教界面
2.2改進(jìn)DH法
以各旋轉(zhuǎn)關(guān)節(jié)旋轉(zhuǎn)軸或直線關(guān)節(jié)運(yùn)動(dòng)方向?yàn)橄鄳?yīng)的Z軸,Xi軸沿著Zi和Zi+1軸的公垂線(一般為各自桿長(zhǎng)方向)由關(guān)節(jié)軸i指向關(guān)節(jié)軸i+1,如果關(guān)節(jié)軸i指向關(guān)節(jié)軸i+1相交,則Xi軸垂直于兩軸平面建立,最終確立各個(gè)連桿坐標(biāo)系如下圖:
根據(jù)DH四個(gè)參數(shù)的定義:
(1) 連桿長(zhǎng)度a:zi-1軸與zi軸的公法線長(zhǎng)度,為桿i的連桿長(zhǎng)(并不是物理意義上的兩桿長(zhǎng))
(2) 連桿扭轉(zhuǎn)角α:關(guān)節(jié)軸線zi-1到zi的轉(zhuǎn)角,以xi-1軸為轉(zhuǎn)軸(-pi~pi)
(3) 連桿偏距d:從xi-1軸與xi軸的公法線有向距離(正向沿zi方向)
(4) 關(guān)節(jié)轉(zhuǎn)角θ:軸線xi-1到xi的轉(zhuǎn)角,以zi軸為轉(zhuǎn)軸(-pi~pi)
得到改進(jìn)DH參數(shù)表:
表 2 改進(jìn)DH參數(shù)
Link | offset+θi | di | ai-1 | αi-1 |
---|---|---|---|---|
1 | -pi/2+θ1 | 0 | 0 | pi/2 |
2 | pi/6+θ2 | 0 | L2 | -pi/2 |
3 | - pi/2+θ3 | 0 | L3 | 0 |
由于改進(jìn)DH法是將坐標(biāo)系建立在相應(yīng)桿件頭部,故采用MDH法建立的模型末端桿件只有頭部轉(zhuǎn)軸而沒有桿長(zhǎng),為了模型和SDH建立的保持一致可以加一個(gè)工具坐標(biāo)系,兩種效果如圖:相關(guān)代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-783432.html
d1 = 0.35;
d2 = 0;
d3 = 0;
d4 = 0;
a1 = 0.25;
a2 = 0;
a3 = 0.35;
a4 = 0.30;
alpha1 = pi/2;
alpha2 = -pi/2;
alpha3 = 0;
alpha4 = 0 ;
% 定義各個(gè)連桿,默認(rèn)為轉(zhuǎn)動(dòng)關(guān)節(jié)
% theta d a alpha
L(1)=Link([ 0 d1 a1 alpha1] ,'modified'); L(1).qlim=[-pi,pi]; L(1).offset=-pi/2;
L(2)=Link([ 0 d2 a2 alpha2] ,'modified'); L(2).qlim=[-pi,pi]; L(2).offset= pi/6;
L(3)=Link([ 0 d3 a3 alpha3] ,'modified'); L(3).qlim=[-pi,pi]; L(3).offset=-pi/2;
% 把上述連桿整合
OLRob=SerialLink(L,'name','改進(jìn)');
view(3);
% 定義機(jī)器人基坐標(biāo)和工具坐標(biāo)的變換
%OLRob.base = transl(0 ,-0.7 ,0);
OLRob.tool = transl(0.3 ,0 ,0);
view(77,22);
title('改進(jìn)-有工具坐標(biāo)');
OLRob.plot([0 0 0]);
OLRob.teach(); %機(jī)器人示教界面
最后附上所有代碼如下:
%% 改進(jìn)DH
clear ; clc; close all;
% 機(jī)器人各連桿DH參數(shù)
d1 = 0.35;
d2 = 0;
d3 = 0;
d4 = 0;
a1 = 0.25;
a2 = 0;
a3 = 0.35;
a4 = 0.30;
alpha1 = pi/2;
alpha2 = -pi/2;
alpha3 = 0;
alpha4 = 0 ;
% 定義各個(gè)連桿,默認(rèn)為轉(zhuǎn)動(dòng)關(guān)節(jié)
% theta d a alpha
L(1)=Link([ 0 d1 a1 alpha1] ,'modified'); L(1).qlim=[-pi,pi]; L(1).offset=-pi/2;
L(2)=Link([ 0 d2 a2 alpha2] ,'modified'); L(2).qlim=[-pi,pi]; L(2).offset= pi/6;
L(3)=Link([ 0 d3 a3 alpha3] ,'modified'); L(3).qlim=[-pi,pi]; L(3).offset=-pi/2;
% 把上述連桿整合
OLRob=SerialLink(L,'name','改進(jìn)');
view(3);
% 定義機(jī)器人基坐標(biāo)和工具坐標(biāo)的變換
%OLRob.base = transl(0 ,-0.7 ,0);
OLRob.tool = transl(0.3 ,0 ,0);
view(77,22);
title('改進(jìn)-有工具坐標(biāo)');
OLRob.plot([0 0 0]);
OLRob.teach(); %機(jī)器人示教界面
%% 標(biāo)準(zhǔn)DH方法
figure(2)
view(3);
% 定義各個(gè)連桿,默認(rèn)為轉(zhuǎn)動(dòng)關(guān)節(jié)
% theta d a alpha
f(1)=Link([ 0 0 0 pi/2] ); f(1).qlim=[-pi,pi]; f(1).offset=pi/2;
f(2)=Link([ 0 0 0.35 0] ); f(2).qlim=[-pi,pi]; f(2).offset=-5*pi/6;
f(3)=Link([ 0 0 0.3 0] ); f(3).qlim=[-pi,pi]; f(3).offset= -pi/2;
sta=SerialLink(f,'name','標(biāo)準(zhǔn)');
sta.tool = transl(0 ,0 ,0);
sta.plot([0 0 0]);
sta.teach(); %機(jī)器人示教界面
參考資料
https://zhuanlan.zhihu.com/p/66066294文章來源地址http://www.zghlxwxcb.cn/news/detail-783432.html
到了這里,關(guān)于【標(biāo)準(zhǔn)DH法和改進(jìn)DH法介紹及三自由度四足或雙足機(jī)器人腿建?!狹ATLAB機(jī)器人工具箱使用】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!