机械臂——DH参数
DH參數(shù)
DH參數(shù)存在三種不同的描述:
根據(jù)機(jī)器人學(xué)中的最小線性表示約定,歐幾里得空間中的坐標(biāo)變換,最少需要由4個(gè)參數(shù)描述
-
標(biāo)準(zhǔn)DH參數(shù) (四參數(shù))
標(biāo)準(zhǔn)DH參數(shù)由Denavit和Hartenberg提出,在一些舊教材上介紹得多,適用于開鏈機(jī)器人建模,在描述樹狀(一個(gè)連桿末端連接兩個(gè)關(guān)節(jié))和閉鏈結(jié)構(gòu)時(shí)會(huì)產(chǎn)生歧義。不建議使用。
-
改進(jìn)DH參數(shù) Modified DH(四參數(shù))
Khalil和Kleinfinger提出的一種修改DH法,適用于開鏈,樹狀和閉鏈機(jī)器人建模。建議使用。
-
改進(jìn)DH參數(shù) Modified DH(五參數(shù))
在精度標(biāo)定里,在四個(gè)參數(shù)的基礎(chǔ)上,新引入一個(gè)參數(shù)解決相鄰連桿平行時(shí)存在的奇異性問題,和上面兩個(gè)DH參數(shù)的應(yīng)用場(chǎng)景不同。
改進(jìn)DH參數(shù)
連桿的坐標(biāo)系固定在連桿的近端(前一個(gè)關(guān)節(jié))
- 變換順序
α→a→θ→d\alpha \to a \to \theta \to d α→a→θ→d
- 變換
n?1Tn=Rotxn?1(αn?1)?Transxn?1(an?1)?Rotzn(θn)?Transzn(dn)^{n-1}T_n = \text{Rot}_{x_{n-1}}(\alpha_{n-1}) \cdot \text{Trans}_{x_{n-1}}(a_{n-1}) \cdot \text{Rot}_{z_n}(\theta_n) \cdot \text{Trans}_{z_n}(d_n) n?1Tn?=Rotxn?1??(αn?1?)?Transxn?1??(an?1?)?Rotzn??(θn?)?Transzn??(dn?)
-
參數(shù)說明
DH參數(shù)說明 連桿長度ai?1a_{i-1}ai?1? z^i?1\hat{z}_{i-1}z^i?1?軸與z^i\hat{z}_{i}z^i?軸的公法線長度,標(biāo)量,為桿i?1i-1i?1的連桿長(并不是物理意義上的兩桿長度) 連桿扭轉(zhuǎn)角αi?1\alpha_{i-1}αi?1? 關(guān)節(jié)軸線z^i?1\hat{z}_{i-1}z^i?1?到z^\hat{z}z^的轉(zhuǎn)角 連桿偏距did_idi? 從x^i?1\hat{x}_{i-1}x^i?1?與軸線z^\hat{z}z^的交點(diǎn)到連桿坐標(biāo)系i{i}i原點(diǎn)的有向距離(正向沿z^i\hat{z}_iz^i?方向) 關(guān)節(jié)轉(zhuǎn)角θi\theta_iθi? 從x^i?1\hat{x}_{i-1}x^i?1?到x^i\hat{x}_ix^i?的轉(zhuǎn)角,在z^\hat{z}z^處度量
程序仿真
Matlab
函數(shù)說明
L = Link(dh, options) is a link object using the specified kinematic convention and with parameters:
-
DH
DH = [THETA D A ALPHA SIGMA OFFSET]- SIGMA :關(guān)節(jié)形式,0為旋轉(zhuǎn),1為平移,默認(rèn)為0
- OFFSET :是設(shè)置的機(jī)械臂的初始姿態(tài)與DH描述的數(shù)學(xué)模型機(jī)械臂之間的偏移量,旋轉(zhuǎn)為角度,平移為距離。
-
Options
- standard: for standard D&H parameters (default).
- modified: for modified D&H parameters.
- revolute: for a revolute joint, can be abbreviated to ‘r’ (default)
- prismatic: for a prismatic joint, can be abbreviated to ‘p’
程序
clear L;%% 準(zhǔn)備 %啟動(dòng)工具箱 startup_rvc;%角度轉(zhuǎn)換 du=pi/180; %度 radian=180/pi; %弧度%關(guān)節(jié)長度 L1=0.40;L2=0.39;L3=0.37; L4=0.08;%末端執(zhí)行器%% DH法建立模型,關(guān)節(jié)角,連桿偏移,連桿長度,連桿扭轉(zhuǎn)角,關(guān)節(jié)類型(0轉(zhuǎn)動(dòng),1移動(dòng)) L(1) = Link('alpha',0, 'a',0, 'offset',0, 'd',L1,'modified'); L(2) = Link('alpha',pi/2, 'a',0, 'offset',pi/2, 'd',0 ,'modified'); L(3) = Link('alpha',0 , 'a',L2,'offset',0, 'd',0, 'modified'); L(4) = Link('alpha',pi/2 ,'a',0, 'offset',0, 'd',0, 'modified'); L(5) = Link('alpha',0 , 'a',0, 'offset',0, 'd',L3,'modified'); L(6) = Link('alpha',pi/2 ,'a',0, 'offset',0, 'd',0, 'modified');plotopt = {'noraise', 'nowrist', 'nojaxes', 'delay',0}; tool_char=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; six_link=SerialLink(L,'name','six link','tool',tool_char);%% 顯示機(jī)械臂 figure(1) hold on six_link.plot([0 0 0 0 0 0], plotopt{:}); hold offPython
函數(shù)說明
class roboticstoolbox.robot.DHLink.RevoluteMDH(d=0.0, a=0.0, alpha=0.0, offset=0.0, qlim=None, flip=False, **kwargs) # Class for revolute links using modified DH convention參數(shù)含義
- d (float) – kinematic - link offset
- alpha (float) – kinematic - link twist
- a (float) – kinematic - link length
- offset (float) – kinematic - joint variable offset
- qlim (float ndarray*(1,2)*) – joint variable limits [min, max]
- flip (bool) – joint moves in opposite direction
- m (float) – dynamic - link mass
- r (float ndarray*(3)*) – dynamic - position of COM with respect to link frame
- I (ndarray) – dynamic - inertia of link with respect to COM
- Jm (float) – dynamic - motor inertia
- B (float*, or* ndarray*(2,**)*) – dynamic - motor viscous friction: B=B?=B?, [B?, B?]
- Tc (ndarray*(2,**)*) – dynamic - motor Coulomb friction [Tc?, Tc?]
- G (float) – dynamic - gear ratio
A subclass of the DHLink class for a revolute joint that holds all information related to a robot link such as kinematics parameters, rigid-body inertial parameters, motor and transmission parameters.
The link transform is
Ttx(ai?1)?Trx(αi?1)?Trz(qi)?Ttz(di)\mathbf{T}{tx}(a{i-1}) \cdot \mathbf{T}{rx}(\alpha{i-1}) \cdot \mathbf{T}{rz}(q_i) \cdot \mathbf{T}_{tz}(d_i) Ttx(ai?1)?Trx(αi?1)?Trz(qi?)?Ttz?(di?)
where qiq_iqi? is the joint variable.
程序
import roboticstoolbox as rtb from math import pi import numpy as npL1=0.40 L2=0.39 L3=0.37 L4=0.08 # 末端執(zhí)行器leg = rtb.DHRobot([rtb.RevoluteMDH(alpha=0, a=0, offset=0, d=L1),rtb.RevoluteMDH(alpha=pi/2, a=0, offset=pi/2,d=0 ),rtb.RevoluteMDH(alpha=0, a=L2, offset=0, d=0 ),rtb.RevoluteMDH(alpha=pi/2, a=0, offset=0, d=0 ),rtb.RevoluteMDH(alpha=0, a=0, offset=0, d=L3),rtb.RevoluteMDH(alpha=pi/2, a=0, offset=0, d=0 )],name="six link")init_T = np.array([0,0,0,0,0,0]) leg.plot(init_T, movie='six link.png')input()參考
MATLAB-Robot(2):標(biāo)準(zhǔn)DH和改進(jìn)DH的區(qū)別
為什么改進(jìn)的DH模型優(yōu)于標(biāo)準(zhǔn)DH模型,卻大多都是使用標(biāo)準(zhǔn)D-H模型
淺談標(biāo)準(zhǔn)DH(SDH)和改進(jìn)DH(MDH)
《現(xiàn)代機(jī)器人學(xué):機(jī)構(gòu)、規(guī)劃與控制》
總結(jié)
- 上一篇: 计算机毕业设计springboot+vu
- 下一篇: iText官方教程