文章目录
第三章 操作臂运动学
3.1 连杆及连杆连接的描述
3.1.1 连杆参数相关概念
-
连杆长度 a i − 1 a_{i-1} ai−1:关节轴 i − 1 i-1 i−1和关节轴 i i i之间公垂线的长度,表示连接连杆 i − 1 i-1 i−1两端关节轴的公垂线长度;
-
连杆扭转角 α i − 1 \alpha_{i-1} αi−1:关节轴 i − 1 i-1 i−1和关节轴 i i i之间的夹角
-
连杆偏距 d i d_i di:两相邻连杆 i − 1 i-1 i−1和 i i i与关节轴 i i i两交点之间的距离,表示公垂线 a i − 1 a_{i-1} ai−1与关节轴 i i i的交点到公垂线 a i a_i ai与关节轴 i i i的焦点的有向距离
-
关节角 θ i \theta_i θi:两相邻连杆 i − 1 i-1 i−1和 i i i绕关节轴 i i i旋转的夹角
当关节
i
i
i是转动关节时,关节角
θ
i
\theta_i
θi为关节变量,其他三个连杆参数固定不变;当关节
i
i
i是移动关节时,连杆偏距
d
i
d_i
di为关节变量,其他三个连杆参数固定不变。这种用连杆参数描述机构运动关系的规则为DH方法,这些参数被称为DH参数。
3.1.2 Denavit-Hartenberg方法
3.1.2.1 修正DH参数——定义关节i的轴为 z i z_i zi轴(最后一个坐标系{n}在关节n处)
3.1.2.1.1 连杆坐标系定义
-
(a) 运动链中间位置连杆坐标系{ i {i} i}的定义
固连在连杆i上的固连坐标系称为坐标系{ i i i}
O i O_i Oi原点:关节轴i和i+1的交点或关节轴i和i+1公垂线与关节轴i的交点
Z ^ i \hat{Z}_i Z^i轴:关节轴 i i i
X ^ i \hat{X}_i X^i轴:沿 Z ^ i \hat{Z}_i Z^i和 Z ^ i + 1 \hat{Z}_{i+1} Z^i+1的公垂线 a i a_i ai方向由关节 i i i指向关节 i + 1 i+1 i+1,当 a i = 0 a_i=0 ai=0时, X ^ i \hat{X}_i X^i垂直于 Z ^ i \hat{Z}_i Z^i和 Z ^ i + 1 \hat{Z}_{i+1} Z^i+1所在的平面
Y ^ i \hat{Y}_i Y^i轴:根据右手法则确定
α i \alpha_i αi:根据右手定则,绕 X ^ i \hat{X}_i X^i轴从 Z ^ i − 1 \hat{Z}_{i-1} Z^i−1到 Z ^ i \hat{Z}_i Z^i
-
(b) 运动链首段连杆{ 0 0 0}坐标系的定义( Z ^ 0 \hat{Z}_0 Z^0与 Z ^ 1 \hat{Z}_1 Z^1同向)
固连于机器人基座(即连杆0)上的坐标系为坐标系{0},该坐标系可做参考坐标系。
设定 Z ^ 0 \hat{Z}_0 Z^0沿关节轴1的方向,当关节变量1( d 1 d_1 d1或 θ 1 \theta_1 θ1)为0时,设定参考坐标系{0}与{1}重合。总有 a 0 = α 0 = 0 a_0=\alpha_0=0 a0=α0=0,当关节1为移动关节时, θ 1 = 0 \theta_1=0 θ1=0,当关节1为转动关节时, d 1 = 0 d_1=0 d1=0
(c) 运动链末端连杆{ n n n}坐标系的定义( X ^ N \hat{X}_N X^N和 X ^ N − 1 \hat{X}_{N-1} X^N−1同向)
{n}坐标原点选取在
X
^
N
−
1
\hat{X}_{N-1}
X^N−1轴与关节轴n的交点位置,使得
d
n
=
0
d_n=0
dn=0,总有
a
n
=
α
n
=
0
a_n=\alpha_n=0
an=αn=0
对于转动关节n,始终有
d
n
=
0
d_n=0
dn=0,当
θ
n
=
0
\theta_n=0
θn=0时,设定
X
^
N
\hat{X}_N
X^N和
X
^
N
−
1
\hat{X}_{N-1}
X^N−1同向,选取坐标原点位置为
X
^
N
−
1
\hat{X}_{N-1}
X^N−1轴与关节轴n的交点位置。
对于移动关节n,始终有
θ
n
=
0
\theta_n=0
θn=0,当
d
n
=
0
d_n=0
dn=0时,设定
X
^
N
\hat{X}_N
X^N和
X
^
N
−
1
\hat{X}_{N-1}
X^N−1同向,选取坐标原点位置为
X
^
N
−
1
\hat{X}_{N-1}
X^N−1轴与关节轴n的交点位置。
3.1.2.1.2 连杆参数在连杆坐标系中的表示方法
如果按照上述方法将两岸坐标系固定于连杆上时,连杆参数可以定义为
-
a i − 1 a_{i-1} ai−1:沿 X ^ i − 1 \hat{X}_{i-1} X^i−1轴,从 Z ^ i − 1 \hat{Z}_{i-1} Z^i−1移动到 Z ^ i \hat{Z}_{i} Z^i的距离,通常取正值;
-
α i − 1 \alpha_{i-1} αi−1:绕 X ^ i − 1 \hat{X}_{i-1} X^i−1轴,从 Z ^ i − 1 \hat{Z}_{i-1} Z^i−1旋转到 Z ^ i \hat{Z}_{i} Z^i的角度,采用右手法则判断正负;
-
d i d_i di:沿 Z ^ i \hat{Z}_{i} Z^i轴,从 X ^ i − 1 \hat{X}_{i-1} X^i−1移动到 X ^ i \hat{X}_{i} X^i的距离;
-
θ i \theta_i θi:绕 Z ^ i \hat{Z}_{i} Z^i轴,从 X ^ i − 1 \hat{X}_{i-1} X^i−1旋转到 X ^ i \hat{X}_{i} X^i的角度,采用右手法则判断正负;
3.1.2.1.3 建立连杆坐标系的步骤
现根据关节轴确定Z轴,再跟相邻关节轴之间的公垂线确定X轴。具体步骤如下:
-
找出各关节轴, 并标出(或画出)这些轴线的延长线。 在下面的步骤2至步骤5中,仅考虑两个相邻的轴线(关节轴 i i i和 i + 1 i+1 i+1);
-
找出关节轴 i i i和 i + 1 i+1 i+1之间的公垂线 a i a_i ai或关节轴 i i i和 i + 1 i+1 i+1的交点, 以关节轴 i i i和 i + 1 i+1 i+1的交点或公垂线 a i a_i ai与关节轴 i i i的交点作为连杆坐标系{ i i i}的原点;
-
规定 Z ^ i \hat{Z}_i Z^i轴沿关节轴i的指向;
-
规定 X ^ i \hat{X}_i X^i轴沿公垂线 a i a_i ai的指向, 如果关节轴i和i+1相交, 则规定 X ^ i \hat{X}_i X^i轴垂直于关节轴i和i+1所在的平面;
-
按照右手定则确定 Y ^ i \hat{Y}_i Y^i轴;
-
当第一个关节变量为 0 时, 规定坐标系{0}和{1}重合。 对于坐标系{N}, 其原点和的 X ^ N \hat{X}_N X^N方向可以任意选取。 但是在选取时, 通常尽量使连杆参数为0。
3.1.2.1.4 连杆变换的推导
通过定义三个中间坐标系{P},{Q},{R}建立坐标系{i}相对于坐标系{i-1}的变换:
{i}沿
Z
^
i
\hat{Z}_i
Z^i平移
d
i
d_i
di得到{P},{P}绕
Z
^
P
\hat{Z}_P
Z^P旋转
θ
i
\theta_i
θi得到{Q},{Q}沿
X
^
Q
\hat{X}_Q
X^Q平移
a
i
−
1
a_{i-1}
ai−1得到{R},{R}绕
X
^
R
\hat{X}_R
X^R旋转
α
i
−
1
\alpha_{i-1}
αi−1得到{i-1}
KaTeX parse error: \tag works only in display equations
其中,
KaTeX parse error: \tag works only in display equations
3.1.2.2 标准DH参数——定义关节i的轴为 z i − 1 z_{i-1} zi−1轴(最后一个坐标系{n}在连杆n的末端)
3.1.2.2.1 连杆坐标系定义
-
(a)运动链中间位置连杆坐标系{ i {i} i}的定义
Z ^ i \hat{Z}_i Z^i轴:关节轴 i + 1 i+1 i+1
X ^ i \hat{X}_i X^i轴:沿轴 z i − 1 z_{i-1} zi−1和轴 z i z_i zi的公垂线 a i a_i ai方向由关节 i i i指向关节 i + 1 i+1 i+1,当 a i = 0 a_i=0 ai=0时,即轴 z i − 1 z_{i-1} zi−1和轴 z i z_i zi相交时, X ^ i \hat{X}_i X^i垂直于 Z ^ i − 1 \hat{Z}_{i-1} Z^i−1和 Z ^ i \hat{Z}_{i} Z^i所在的平面
Y ^ i \hat{Y}_i Y^i轴:根据右手法则确定
O i O_i Oi点:在关节 i + 1 i+1 i+1的轴 Z i Z_i Zi轴与公垂线 a i a_i ai的交点
-
(b)运动链首段连杆{ 0 0 0}坐标系的定义
设定 Z ^ 0 \hat{Z}_0 Z^0沿关节轴1的方向, O 0 O_0 O0和 X ^ 0 \hat{X}_0 X^0可以任意选择
-
(c)运动链末端连杆末端执行器手部{ n n n}坐标系的定义
对坐标系{n}而言,由于没有关节n+1,但x_n轴必须与轴 z n − 1 z_{n-1} zn−1垂直,但 z n z_n zn不是唯一定义的,当关节n是转动的, z n z_n zn依照 z n − 1 z_{n-1} zn−1的方向设置
3.1.2.2.2 连杆参数在连杆坐标系中的表示方法
如果按照上述方法将连杆坐标系固定于连杆上时,下标为i的连杆参数可以由坐标系 i i i和坐标系 i − 1 i-1 i−1的位置和方向定义为
-
a i a_{i} ai:沿 X ^ i \hat{X}_{i} X^i轴,从 Z ^ i − 1 \hat{Z}_{i-1} Z^i−1移动到 Z ^ i \hat{Z}_{i} Z^i的距离,Link_i的长度,通常取正值;
-
α i \alpha_{i} αi:绕 X ^ i \hat{X}_{i} X^i轴,从 Z ^ i − 1 \hat{Z}_{i-1} Z^i−1旋转到 Z ^ i \hat{Z}_{i} Z^i的角度,采用右手法则判断正负;
-
d i d_i di:沿 Z ^ i − 1 \hat{Z}_{i-1} Z^i−1轴,从 X ^ i − 1 \hat{X}_{i-1} X^i−1移动到 X ^ i \hat{X}_{i} X^i的距离,即 x i − 1 x_{i-1} xi−1和 x i x_i xi与 z i − 1 z_{i-1} zi−1轴交点的距离;
-
θ i \theta_i θi:绕 Z ^ i − 1 \hat{Z}_{i-1} Z^i−1轴,从 X ^ i − 1 \hat{X}_{i-1} X^i−1旋转到 X ^ i \hat{X}_{i} X^i的角度,采用右手法则判断正负;
4 个参数中有2 个( a i a_i ai和 α i \alpha_i αi〉始终为常数,只取决于由连杆i建立的相继关节之间的几何连接关系。其他两个参数中只有一个是变量,取决于连接连杆i-1 和连杆i 的关节的类型。详述如下:
- 如果关节i 是转动型的, 则变最为 θ i \theta_i θi。
- 如果关节i 是移动型的,则变量为 d i d_i di。
3.1.2.2.3 建立连杆坐标系的步骤
3.1.2.2.4 连杆变换的推导
i i − 1 T ( q i ) = R Z ( θ i ) D Z ( d i ) R Z ( α i ) D X ( a i ) = [ c θ i − s θ i 0 0 s θ i c θ i 0 0 0 0 1 d i 0 0 0 1 ] [ 1 0 0 a i 0 c α i − s α i 0 0 s α i c α i 0 0 0 0 1 ] = [ c θ i − s θ i c α i s θ i s α i a i c θ i s θ i c θ i c α i − c θ i s α i a i s θ i 0 s α i c α i d i 0 0 0 1 ] \begin{aligned} _i^{i-1}T(q_i)&=R_Z(\theta_i)D_Z(d_i)R_Z(\alpha_{i})D_X(a_{i})\\ & \left.=\quad\left[\begin{array}{cccc}c_{\theta_i} & -s_{\theta_i} & 0 & 0 \\ s_{\theta_i} & c_{\theta_i} & 0 & 0 \\ 0 & 0 & 1 & d_i \\ 0 & 0 & 0 & 1\end{array}\right.\right] \ \left[\begin{array}{cccc}1 & 0 & 0 & a_i \\ 0 & c_{\alpha_i} & -s_{\alpha_i} & 0 \\ 0 & s_{\alpha_i} & c_{\alpha_i} & 0 \\ 0 & 0 & 0 & 1\end{array}\right] \\ & \left.=\quad\left[\begin{array}{cccc}c_{\theta_i} & -s_{\theta_i}c_{\alpha_i} & s_{\theta_i}s_{\alpha_i} & a_ic_{\theta_i} \\ s_{\theta_i} & c_{\theta_i}c_{\alpha_i} & -c_{\theta_i}s_{\alpha_i} & a_is_{\theta_i} \\ 0 & s_{\alpha_i} & c_{\alpha_i} & d_i \\ 0 & 0 & 0 & 1\end{array}\right.\right]\end{aligned} ii−1T(qi)=RZ(θi)DZ(di)RZ(αi)DX(ai)= cθisθi00−sθicθi00001000di1 10000cαisαi00−sαicαi0ai001 = cθisθi00−sθicαicθicαisαi0sθisαi−cθisαicαi0aicθiaisθidi1
从坐标系 i 到坐标系i - 1 的变换矩阵是一个只与关节变量
q
i
q_i
qi有关的函数,如果是
转动关节则变量为
θ
i
\theta_i
θi, 如果是移动关节则变量为
d
i
d_i
di。
3.1.3 MDH和SDH两者对比
3.1.3.1 平面3R机器人
- 标准DH参数
- 修正DH参数
待补充
3.2 驱动器空间、关节空间、笛卡尔空间
3.2.1 驱动器空间
我们已知假设每个运动关节都直接由某种驱动器驱动。但并非如此。有时两个驱动器以差动方式驱动一个关节,有时用直线驱动器通过四连杆机构驱动旋转关节。这就需要考虑驱动器位置。由于测量操作臂位置的传感器常常安装在驱动器上,因此进行某些计算时必须把关节矢量表示成一组驱动器函数,即驱动器矢量。
3.2.2 关节空间
对于一个具有n个自由度的操作臂来说,他的所有连杆位置可由一组n个关节变量加以确定,这个 n × 1 n\times1 n×1的变量称为关节矢量。所有关节矢量组成的空间称为关节空间。
3.2.3 笛卡尔空间
当位置是在空间相互正交的轴上测量,且姿态是按照第2章的任何一种规定测量时(角坐标系表示法共24中,其中12中为固定角坐标系法,12种为欧拉角坐标系法。附录B有24种角坐标系的旋转矩阵定义),我们称这个空间为笛卡尔空间,有时称为任务空间或操作空间。
3.3 两种典型机器人运动学问题
平行轴可以先利用和差化积求解 T T T,如下面例题中的 1 3 T ^3_1T 13T, T T T相似的也可以先乘起来,如下面例题中的 3 6 T ^6_3T 36T
3.3.1 Unimation PUMA 560机器人
(1) Frames
(2) 建立坐标轴
(3) 建立6自由度的DH表格
(4) 列出6个旋转矩阵
(5) 合并旋转矩阵
3.4 坐标系的标准命名
3.4.1 基坐标系{ B B B}
**基坐标系{B}位于操作臂的基座上。**它仅是赋予坐标系{0}的另一个名称。 因为它固连连在机器人的静止部位, 所以有时称为连杆0
3.4.2 固定坐标系{ S S S}
又名任务坐标系、 世界坐标系或通用坐标系
固定坐标系{S}位置与任务相关。 固坐标系{S}是一个通用坐标系, 机器人所有的运动都是相对于它来执行的。固定坐标系通常根据基坐标系确定, 即 S B T ^B_ST SBT.
3.4.3 腕部坐标系{ W W W}
腕部坐标系{W}附于操作臂的末端连杆。 这个固连在机器人的末端连杆上的坐标系也可以称为坐标系{N}。大多数情况, 腕部坐标系{W}的原点位于操作臂手腕上, 它随操作臂的末端连杆移动,根据基坐标系确定. 即 { W } = W B T = N 0 T \{W\}=^B_WT=^0_NT {W}=WBT=N0T。
3.4.4 工具坐标系{ T T T}
工具坐标系{T}附于机器人所夹持工具的末端。 手部没有夹持工具时,工具坐标系{T}的原点位于机器人的指尖之间。 工具坐标系通常相对下腕部坐标系来确定。 下图中,工具坐标系的原点定义在机器人抓持轴销的未端。
3.4.5 目标坐标系{ G G G}
目标坐标系{G}是对机器人移动工具到达的位置描述。特指在机器人运动结束时,工具坐标系应当与目标坐标系重舍。 目标坐标系{G}通常根据固定坐标系来确定。下图中,目标坐标系为位于将要插入轴销的轴孔。
3.5 matlab习题
%D:\Users\jinqiyuan\Documents\MATLAB\Introduction to Robotics\charpter_3\Exercise1.m
%根据DH参数定义变量
syms alpha0 a0 d1 theta1 ...
alpha1 a1 d2 theta2 ...
alpha2 a2 d3 theta3
alpha0=0;a0=0;d1=0;
alpha1=0;a1=4;d2=0;
alpha2=0;a2=3;d3=0;
syms alphai_1 ai_1 di thetai
i_1iT=[cos(thetai) -sin(thetai) 0 ai_1
sin(thetai)*cos(alphai_1) cos(thetai)*cos(alphai_1) -sin(alphai_1) -sin(alphai_1)*di
sin(thetai)*sin(alphai_1) cos(thetai)*sin(alphai_1) cos(alphai_1) cos(alphai_1)*di
0 0 0 1];%利用书中公式
T01=subs(i_1iT,[alphai_1 ai_1 di thetai],[alpha0 a0 d1 theta1])
T12=subs(i_1iT,[alphai_1 ai_1 di thetai],[alpha1 a1 d2 theta2])
T23=subs(i_1iT,[alphai_1 ai_1 di thetai],[alpha2 a2 d3 theta3]) % sub()是symbolic中的替换函数
T3H=transl(2,0,0) % 来自工具箱
T03=T01*T12*T23
T0H=T01*T12*T23*T3H
% 关节角度参数为[0 0 0]
T03i=subs(T03,[theta1 theta2 theta3],[0 0 0])
T0Hi=subs(T0H,[theta1 theta2 theta3],[0 0 0])
% 角度为[10 20 30]
T03ii=subs(T03,[theta1 theta2 theta3],deg2rad([10 20 30]));
double(T03ii)
T0Hii=subs(T0H,[theta1 theta2 theta3],deg2rad([10 20 30]));
double(T0Hii) % 这里用double()输出具体数值,不然就会只代入不计算
% 角度为[90 90 90]
T03iii=subs(T03,[theta1 theta2 theta3],deg2rad([90 90 90]))
T0Hiii=subs(T0H,[theta1 theta2 theta3],deg2rad([90 90 90]))
%% 工具箱检查
%用link()定义三根连杆
syms theta1 theta2 theta3
L(1)=Link('alpha',0,'a',0,'d',0,'modified');
L(2)=Link('alpha',0,'a',4,'d',0,'modified');
L(3)=Link('alpha',0,'a',3,'d',0,'modified'); % modified表示需要改进的DH参数
bot=SerialLink(L,'name','robot','tool',[2,0,0]) % Serialink表示把三根杆连起来,'tool'表示工具位置
T01=L(1).A(theta1)
T12=L(2).A(theta2)
T23=L(3).A(theta3) % link类的方法A(q)可以根据q求出杆的变换矩阵T,返回SE3类,即工具箱中定义的4*4的齐次变换矩阵
T3H=SE3(2,0,0) % 为了统一,用SE3()创建T3H
T03=bot.A(1:3,[theta1,theta2,theta3]) %SerialLink类的方法A(jlist,q)输入关节的编号jlist和对应的角度q,输出变换矩阵。可用来求c)中的T03。
T0H=bot.fkine([theta1,theta2,theta3]) %SerialLink类的方法fkine(q)根据输入角度q,输出末端执行器的正向运动学矩阵。可用来求c)中的T0H。
T03i=bot.A(1:3,[0,0,0])
T0Hi=bot.fkine([0,0,0])
T03ii=bot.A(1:3,deg2rad([10,20,30]))
T0Hii=bot.fkine(deg2rad([10,20,30]))
T03iii=bot.A(1:3,deg2rad([90,90,90]))
T0Hiii=bot.fkine(deg2rad([90,90,90]))