机械臂——DH参数
DH參數
DH參數存在三種不同的描述:
根據機器人學中的最小線性表示約定,歐幾里得空間中的坐標變換,最少需要由4個參數描述
-
標準DH參數 (四參數)
標準DH參數由Denavit和Hartenberg提出,在一些舊教材上介紹得多,適用于開鏈機器人建模,在描述樹狀(一個連桿末端連接兩個關節)和閉鏈結構時會產生歧義。不建議使用。
-
改進DH參數 Modified DH(四參數)
Khalil和Kleinfinger提出的一種修改DH法,適用于開鏈,樹狀和閉鏈機器人建模。建議使用。
-
改進DH參數 Modified DH(五參數)
在精度標定里,在四個參數的基礎上,新引入一個參數解決相鄰連桿平行時存在的奇異性問題,和上面兩個DH參數的應用場景不同。
改進DH參數
連桿的坐標系固定在連桿的近端(前一個關節)
- 變換順序
α→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?)
-
參數說明
DH參數說明 連桿長度ai?1a_{i-1}ai?1? z^i?1\hat{z}_{i-1}z^i?1?軸與z^i\hat{z}_{i}z^i?軸的公法線長度,標量,為桿i?1i-1i?1的連桿長(并不是物理意義上的兩桿長度) 連桿扭轉角αi?1\alpha_{i-1}αi?1? 關節軸線z^i?1\hat{z}_{i-1}z^i?1?到z^\hat{z}z^的轉角 連桿偏距did_idi? 從x^i?1\hat{x}_{i-1}x^i?1?與軸線z^\hat{z}z^的交點到連桿坐標系i{i}i原點的有向距離(正向沿z^i\hat{z}_iz^i?方向) 關節轉角θi\theta_iθi? 從x^i?1\hat{x}_{i-1}x^i?1?到x^i\hat{x}_ix^i?的轉角,在z^\hat{z}z^處度量
程序仿真
Matlab
函數說明
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 :關節形式,0為旋轉,1為平移,默認為0
- OFFSET :是設置的機械臂的初始姿態與DH描述的數學模型機械臂之間的偏移量,旋轉為角度,平移為距離。
-
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;%% 準備 %啟動工具箱 startup_rvc;%角度轉換 du=pi/180; %度 radian=180/pi; %弧度%關節長度 L1=0.40;L2=0.39;L3=0.37; L4=0.08;%末端執行器%% DH法建立模型,關節角,連桿偏移,連桿長度,連桿扭轉角,關節類型(0轉動,1移動) 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);%% 顯示機械臂 figure(1) hold on six_link.plot([0 0 0 0 0 0], plotopt{:}); hold offPython
函數說明
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參數含義
- 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 # 末端執行器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):標準DH和改進DH的區別
為什么改進的DH模型優于標準DH模型,卻大多都是使用標準D-H模型
淺談標準DH(SDH)和改進DH(MDH)
《現代機器人學:機構、規劃與控制》
總結
- 上一篇: 计算机毕业设计springboot+vu
- 下一篇: iText官方教程