【汇总】
【Matlab 六自由度机器人】系列文章汇总 \fcolorbox{green}{aqua}{【Matlab 六自由度机器人】系列文章汇总 } 【Matlab 六自由度机器人】系列文章汇总
【主线】
运 动 学 \color{red}运动学 运动学
动 力 学 \color{red}动力学 动力学
(待补充)
【补充说明】
由于我们需要接触Matlab上的机器人工具箱,因此首先先放上下载工具箱的官网,不需要积分,直接从官网上下载,不用担心会出问题。https://petercorke.com/resources/downloads/
相关资源: 若发现无法正常登录该网址,可通过该资源进行下载机器人工具箱压缩包:Matlab机器人工具箱-robot-10.3.1及相关实例.
具体的安装方法已经有朋友说得很清楚了:Matlab机器人工具箱
调出机器人的各连杆参数,根据各连杆的长度和结构可以得出机器人的D-H参数。
随着人工智能的发展,机器人也不断变换着形态出现在人们的眼里,有的表现为餐厅的服务型机器人、有的表现为智能汽车。无一不在昭示着机器人的多用途以及它的多功能,而最典型最基础的的莫过于工业机器人。
坐标系建立步骤:
对于标准型和改进型,区别在于固连坐标系不同以及执行变换的的顺序不同。
T r a n s ( z i − 1 , d i ) = Trans(z_{i-1},d_i)= Trans(zi−1,di)= [ 1 0 0 0 0 1 0 0 0 0 1 d i 0 0 0 1 ] \left[ \begin{matrix} 1&0&0&0 \\ 0&1&0 &0\\ 0&0&1&d_{i} \\ 0&0&0&1 \end{matrix} \right] ⎣⎢⎢⎡10000100001000di1⎦⎥⎥⎤
T r a n s ( x i , a i ) = Trans(x_i,a_i)= Trans(xi,ai)= [ 1 0 0 a i 0 1 0 0 0 0 1 0 0 0 0 1 ] \left[ \begin{matrix} 1&0&0&a_{i} \\ 0&1&0 &0\\ 0&0&1&0 \\ 0&0&0&1 \end{matrix} \right] ⎣⎢⎢⎡100001000010ai001⎦⎥⎥⎤
R o t ( x i , α i ) = Rot(x_i,α_i)= Rot(xi,αi)= [ 1 0 0 0 0 c o s α i − s i n α i 0 0 s i n α i c o s α i 0 0 0 0 1 ] \left[ \begin{matrix} 1& 0 & 0&0 \\ 0& cosα_i & -sinα_i &0\\ 0& sinα_i & cosα_i& 0\\ 0& 0& 0& 1 \end{matrix} \right] ⎣⎢⎢⎡10000cosαisinαi00−sinαicosαi00001⎦⎥⎥⎤
可 以 得 到 变 换 矩 阵 i − 1 T i = R o t ( z i − 1 , θ i ) × T r a n s ( z i − 1 , d i ) × T r a n s ( x i , a i ) × R o t ( x i , α i ) 可以得到变换矩阵^{i-1}T_i =Rot(z_{i-1},θ_i)×Trans(z_{i-1},d_i)×Trans(x_i,a_i)×Rot(x_i,α_i) 可以得到变换矩阵i−1Ti=Rot(zi−1,θi)×Trans(zi−1,di)×Trans(xi,ai)×Rot(xi,αi)
i − 1 T i = ^{i-1}T_i = i−1Ti= [ c o s θ i − s i n θ i c o s α i s i n θ i s i n α i a i c o s θ i s i n θ i c o s θ i c o s α i − c o s θ i s i n α i a i s i n θ i 0 s i n α i c o s α i d i 0 0 0 1 ] \left[ \begin{matrix} cosθ_i&-sinθ_icosα_i&sinθ_isinα_i&a_{i}cosθ_i \\ sinθ_i&cosθ_icosα_i&-cosθ_isinα_i&a_{i}sinθ_i\\ 0&sinα_i&cosα_i&d_{i} \\ 0&0&0&1 \end{matrix} \right] ⎣⎢⎢⎡cosθisinθi00−sinθicosαicosθicosαisinαi0sinθisinαi−cosθisinαicosαi0aicosθiaisinθidi1⎦⎥⎥⎤
i − 1 T i = ^{i-1}T_i = i−1Ti= [ c o s θ i − s i n θ i 0 a i − 1 s i n θ i c o s α i − 1 c o s θ i c o s α i − 1 − s i n α i − 1 − s i n α i − 1 d i s i n θ i s i n α i − 1 c o s θ i s i n α i − 1 c o s α i − 1 c o s α i − 1 d i 0 0 0 1 ] \left[ \begin{matrix} cosθ_i&-sinθ_i&0&a_{i-1} \\ sinθ_icosα_{i-1}&cosθ_icosα_{i-1}&-sinα_{i-1}&-sinα_{i-1}d_{i} \\ sinθ_isinα_{i-1}&cosθ_isinα_{i-1}&cosα_{i-1}&cosα_{i-1}d_{i} \\ 0&0&0&1 \end{matrix} \right] ⎣⎢⎢⎡cosθisinθicosαi−1sinθisinαi−10−sinθicosθicosαi−1cosθisinαi−100−sinαi−1cosαi−10ai−1−sinαi−1dicosαi−1di1⎦⎥⎥⎤
D-H参数是研究各类型机器人的必经之路,只有熟悉构建机器人的DH参数才能更好得对机器人进行正逆解的求解。
Link函数包含与机器人关节和链接相关的所有信息,例如运动学参数,刚体惯性参数,电机和传输参数。
Link函数的各类参数如下:
运动学参数 | 含义 |
---|---|
theta | joint angle 关节转角 |
d | link offset 连杆偏移 |
a | link length 连杆长度 |
alpha | link twist 连杆扭角 |
jointtype | ‘R’ if revolute, ‘P’ if prismatic 旋转关节为R,移动关节为P |
mdh | 0 if standard D&H, else 1 标准型为0,改进型为1 |
offset | joint variable offset 关节变量偏移 |
qlim | joint variable limits [min max] 关节变量极限[min max] |
动力学参数 | 含义 |
---|---|
m | link mass 连杆质量 |
r | link COG wrt link coordinate frame 3x1 连杆相对于坐标系的质心位置 3x1位置矩阵 |
I | link inertia matrix, symmetric 3x3, about link COG.连杆重心相对于坐标系的惯性矩阵 3x3旋转矩阵 |
B | link viscous friction (motor referred) 连杆粘性摩擦力(以电机为基准) |
Tc | link Coulomb friction 连杆库仑摩擦力 |
G | gear ratio 齿轮比(传动比) |
Jm | motor inertia (motor referred)电机惯量(以电机为基准) |
对于只需要把机器人模型建立出来,不考虑机器人的动力学参数的情况,那么只需要用到theta、d、a、alpha和offset
等几个参数即可。
接下来使用Link函数对D-H参数表进行模型的建立,并通过使用SerialLink函数来将L1 L2 L3 L4 L5 L6
连杆连接起来。
对于Link函数来说,无论是标准型还是改进型,参数的顺序都为:关节转角、连杆偏移、连杆长度、连杆扭角。
%% STD-DH参数
%定义连杆的D-H参数
%连杆偏移
d1 = 398;
d2 = -0.299;
d3 = 0;
d4 = 556.925;
d5 = 0;
d6 = 165;
%连杆长度
a1 = 168.3;
a2 = 650.979;
a3 = 156.240;
a4 = 0;
a5 = 0;
a6 = 0;
%连杆扭角
alpha1 = pi/2;
alpha2 = 0;
alpha3 = pi/2;
alpha4 = -pi/2;
alpha5 = pi/2;
alpha6 = 0;
%建立机器人模型
% theta d a alpha
L1=Link([0 d1 a1 alpha1]);
L2=Link([0 d2 a2 alpha2]);L2.offset = pi/2;
L3=Link([0 d3 a3 alpha3]);
L4=Link([0 d4 a4 alpha4]);
L5=Link([0 d5 a5 alpha5]);
L6=Link([0 d6 a6 alpha6]);
%限制机器人的关节空间
L1.qlim = [(-165/180)*pi,(165/180)*pi];
L2.qlim = [(-95/180)*pi, (70/180)*pi];
L3.qlim = [(-85/180)*pi, (95/180)*pi];
L4.qlim = [(-180/180)*pi,(180/180)*pi];
L5.qlim = [(-115/180)*pi,(115/180)*pi];
L6.qlim = [(-360/180)*pi,(360/180)*pi];
%连接连杆,机器人取名为myrobot
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','myrobot');
robot.plot([0,0,0,0,0,0]);%输出机器人模型,后面的六个角为输出时的theta姿态
robot.display();%打印出机器人D-H参数表
robot.teach;%展示机器人模型
hold on;
其中‘modified’的意思是该机器人使用改进型D-H参数表来建立模型。
%% MOD-DH参数
%定义连杆的D-H参数
%连杆偏移
d1 = 398;
d2 = -0.299;
d3 = 0;
d4 = 556.925;
d5 = 0;
d6 = 165;
%连杆长度
a1 = 0;
a2 = 168.3;
a3 = 650.979;
a4 = 156.240;
a5 = 0;
a6 = 0;
%连杆扭角
alpha1 = 0;
alpha2 = pi/2;
alpha3 = 0;
alpha4 = pi/2;
alpha5 = -pi/2;
alpha6 = pi/2;
%建立机器人模型
% theta d a alpha
L1=Link([0 d1 a1 alpha1 ],'modified');
L2=Link([0 d2 a2 alpha2 ],'modified');L2.offset = pi/2;
L3=Link([0 d3 a3 alpha3 ],'modified');
L4=Link([0 d4 a4 alpha4 ],'modified');
L5=Link([0 d5 a5 alpha5 ],'modified');
L6=Link([0 d6 a6 alpha6 ],'modified');
%限制机器人的关节空间
L1.qlim = [(-165/180)*pi,(165/180)*pi];
L2.qlim = [(-95/180)*pi, (70/180)*pi];
L3.qlim = [(-85/180)*pi, (95/180)*pi];
L4.qlim = [(-180/180)*pi,(180/180)*pi];
L5.qlim = [(-115/180)*pi,(115/180)*pi];
L6.qlim = [(-360/180)*pi,(360/180)*pi];
%连接连杆,机器人取名为myrobot
robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','myrobot');
robot.plot([0,0,0,0,0,0]);%输出机器人模型,后面的六个角为输出时的theta姿态
robot.display();%打印出机器人D-H参数表
robot.teach;%展示机器人模型
hold on;
注解:L2.offset = pi/2
的意思为第二根轴相对于第一根轴有90度的关节偏移量,也就是初始状态下连杆2对于连杆1来说有一个关节的偏置。
接下来看添加关节偏移量与不添加的区别:
添加入关节偏移量
不添加关节偏移量
可以看出关节偏置的添加与否对于机器人末端位置来说差别还是蛮大的