本篇文章主要与大家分享一下如何使用MATLAB中的机器人工具箱建立机器人模型(机械臂),文章内容处于更新和补充中,(我同时安装了机器人工具箱9.10版本和10.4版本)
   一、先来看一下本文要介绍的例子
   1、本文以如下的比较简单的三轴机械臂模型为例(三轴的明白了,其他的也就会了),如下图所示该模型具有三个转动关节

在这里插入图片描述

2、利用机器人学中的相关知识,使用改进型DH法建立连杆坐标系如下:

在这里插入图片描述

3、根据上图写出其DH参数表如下:

在这里插入图片描述

二、在介绍如何使用机器人工具箱建立如上的机械臂模型前,我们需要先了解如下的两个我们需要用到的类函数 (本部分内容可根据自己的情况跳过)


   1、Link类函数
  Link类函数,基于DH法建模,建立其相关关系,DH法建模分改进型和标准型,Link类函数的一种用法是 R = Link([theta,d,a, alpha]),其中参数theta代表DH建模的关节角、参数d代表DH建模的连杆偏距、参数a代表DH建模的连杆长度、参数alpha代表DH建模的连杆转角。例如:L(1)=Link([1,2,3,4],‘modified’),其中modified表示用改进型DH法建模
  ①我们在命令行窗口输入上面的例子

L(1)=Link([1,2,3,4],'modified')

运行结果如下:

L = 
 theta=q, d=          2, a=          3, alpha=          4, offset=          0 (R,modDH) 

 ②Link类函数中包含一些属性,我们可以用像调用c/c++语言里面的结构体成员类似的方法去调用它,如下所示:

   R.RP:可以用来获取连杆关节类型,如下所示我们可以知道我们建立的L(1)是转动关节 (若为P则为移动关节)

L(1).RP

ans =

    'R'

R. theta:可以用来获取连杆关节角:,如下所示我们可以知道我们建立的L(1)的关节角为 1

L(1).theta

ans =

   1

R. d:可以用来获取连杆偏距:,如下所示我们可以知道我们建立的L(1)的连杆偏距为 2

L(1).d

ans =

   2

 R. a:可以用来获取连杆长度:,如下所示我们可以知道我们建立的L(1)的连杆长度为 3

L(1).a

ans =

   3

R.alpha:可以用来获取连杆扭转角:,如下所示我们可以知道我们建立的L(1)的连杆扭转角为 4

L(1).alpha

ans =

  4

R.sigma:也可以用来查询我们建立的是转动关节还是移动关节,默认0是转动关节; 1是移动关节,如下所示我们可以知道我们建立的L(1)为转动关节

 L(1).sigma

ans =

  0

R.mdh:可以用来查询我们是按照标准DH法建立的还是按改进型DH法建立的模型,默认0为标准D.H法,1为改进D-H法,如下所示我们可以知道我们是按照改进型DH法建立的L(1)

L(1).mdh

ans =

  1

2、Seriallink类函数
  Seriallink类函数可以把我们使用Link函数建立的连杆连成一个整体,生成一个串联机械臂,比如下面这个例子,我们已经使用Link函数建立好了L (1) ~ L(6)这六个关节模型,然后我们只需要使用Six_Link=SerialLink ([L(1),L(2),L(3),L(4),L(5),L(6)]);就可以将其连成一个整体生成一个六周的串联机械臂,并取名为Six_Link(名字可以任意取)

L(1)=Link([0,0,0,0],'modified');
L(2)=Link([1.25,pi/2,0,pi/2],'modified');
L(3)=Link([10.5,0,0,pi/2],'modified');
L(4)=Link([0,pi/2,13,-pi],'modified');
L(5)=Link([0,pi/2,0,-pi],'modified');
L(6)=Link([0,pi/2,10,-pi],'modified');
Six_Link=SerialLink ([L(1),L(2),L(3),L(4),L(5),L(6)]);

在命令行窗口输入 help Seriallink 会发现Seriallink类函数有很多可以设置的参数,在这里只针对一小部分进行介绍

  ①只读参数:关节自由度n 、机械臂配置字符串config、DH约定形式布尔值mdh 、DH参数 theta、d、a、 alpha

Properties (read only)::
 
   n           number of joints
   config      joint configuration string, eg. 'RRRRRR'
   mdh         kinematic convention boolean (0=DH, 1=MDH)
   theta       kinematic: joint angles (1xN)
   d           kinematic: link offsets (1xN)
   a           kinematic: link lengths (1xN)
   alpha       kinematic: link twists (1xN)

他们的使用方法很简单,比如我们已经按上面建立好了一个机械臂模型Six_Link,要查看当前关节的自由度,只需要使用Six_Link.n就可以了,如下所示:

在这里插入图片描述

要查看当前各个关节的类型,只需要使用Six_Link.config就可以了,如下所示,可以知道我们建立的六轴机械臂各个关节均为转动关节

在这里插入图片描述

以此类推…
  ②可读可写参数:连杆对象的矢量links 、重力方向gravity 、机器人基座的姿态base 、 机器人工具坐标系转换 tool 、关节极限qlim 、运动关节坐标偏移 offset、机器人的名称(用于图形显示)name 、 注释manuf和comment 、plot()方法的选项(单元格数组)plotopt 、使用MEX版本的RNE(只有当mex文件存在时才能设置为true。默认为true)fast

Properties (read/write)::
 
   links      vector of Link objects (1xN)
   gravity    direction of gravity [gx gy gz]
   base       pose of robot's base (4x4 homog xform)
   tool       robot's tool transform, T6 to tool tip (4x4 homog xform)
   qlim       joint limits, [qmin qmax] (Nx2)
   offset     kinematic joint coordinate offsets (Nx1)
   name       name of robot, used for graphical display
   manuf      annotation, manufacturer's name
   comment    annotation, general comment
   plotopt    options for plot() method (cell array)
   fast       use MEX version of RNE.  Can only be set true if the mex
              file exists.  Default is true.

比如要查看当前各个关节连杆情况,只需要使用Six_Link.links就可以了,如下所示:

在这里插入图片描述

比如要查看当前机器人基座的姿态,只需要使用Six_Link.base就可以了,如下所示:

在这里插入图片描述

以此类推…
  ③Seriallink类函数中的一些方法或者函数,本部分不做详细介绍,有兴趣的可自行研究,比如显示机器人的图形表示的plot(在文章第三部分会进行介绍) 、 显示机器人的三维图形模型plot3d (只能用于标准DH建模)、 teach(在文章第三部分会进行介绍)、 关节空间轨迹jtraj 等

SerialLink Serial-link robot class
 
  A concrete class that represents a serial-link arm-type robot.  The
  mechanism is described using Denavit-Hartenberg parameters, one set
  per joint.
 
  Methods::
 
   plot          display graphical representation of robot
   plot3d        display 3D graphical model of robot
   teach         drive the graphical robot
   getpos        get position of graphical robot
 -
   jtraj         a joint space trajectory
 -
   edit          display and edit kinematic and dynamic parameters
 -
   isspherical   test if robot has spherical wrist
   islimit       test if robot at joint limit
   isconfig      test robot joint configuration
 -
   fkine         forward kinematics
   A             link transforms
   trchain       forward kinematics as a chain of elementary transforms
 -
   ikine6s       inverse kinematics for 6-axis spherical wrist revolute robot
   ikine         inverse kinematics using iterative numerical method
   ikunc         inverse kinematics using optimisation
   ikcon         inverse kinematics using optimisation with joint limits
   ikine_sym     analytic inverse kinematics obtained symbolically
 -
   jacob0        Jacobian matrix in world frame
   jacobn        Jacobian matrix in tool frame
   jacob_dot     Jacobian derivative
   maniplty      manipulability
   vellipse      display velocity ellipsoid
   fellipse      display force ellipsoid
   qmincon       null space motion to centre joints between limits
 -
   accel         joint acceleration
   coriolis      Coriolis joint force
   dyn           show dynamic properties of links
   friction      friction force
   gravload      gravity joint force
   inertia       joint inertia matrix
   cinertia      Cartesian inertia matrix
   nofriction    set friction parameters to zero
   rne           inverse dynamics
   fdyn          forward dynamics
 -
   payload       add a payload in end-effector frame
   perturb       randomly perturb link dynamic parameters
   gravjac       gravity load and Jacobian
   paycap        payload capacity
   pay           payload effect
 -
   sym           a symbolic version of the object
   gencoords     symbolic generalized coordinates
   genforces     symbolic generalized forces
   issym         test if object is symbolic

三、在了解了以上两个类函数后,我们就可以利用这两个类函数创建如上的机械臂模型了
   1、进行参数的设定,如图所示,我们需要设定的参数有a0、a1、d、θ1、θ2、θ3 在这些参数中a0、a1、d是机器臂的结构参数,在机械臂运动中是不变的,大家可以按照自己的需要自主设定,在这里我取a0=10, a1=20,d=30; 参数θ1、θ2、θ3 是这个机械臂模型的关节变量,随着机械臂运动中它们也发生变化,如图所示他们的初始值均为0
在这里插入图片描述

本部分的matlab程序如下:

%参数的设定
a0=10;
a1=20;
d=30;
Theta1=0;
Theta2=0;
Theta3=0;

2、根据我们已经写好的DH参数表,使用上文介绍的Link类函数,来建立各个各个关节模型,在上文中已经介绍过了,Link类函数的一种用法是 R = Link([theta,d,a, alpha]),其中参数theta代表DH建模的关节角也就是对应下表中的第四列(θi列)、参数d代表DH建模的连杆偏距也就是对应下表中的第三列、参数a代表DH建模的连杆长度也就是对应下表中的第一列、参数alpha代表DH建模的连杆转角也就是对应下表中的第二列,我们将这三个关节分别取名为L(1)、L(2)、L(3)
在这里插入图片描述

本部分的matlab程序如下:

%使用Link类函数,基于DH法建模(改进型)
L(1)=Link([0,a0,0,0],'modified');
L(2)=Link([0,d,0,-pi/2],'modified');
L(3)=Link([0,a1,0,pi/2],'modified');

3、使用Seriallink类函数把我们上面使用Link函数建立的连杆连成一个整体,生成一个串联机械臂模型,把这个机械臂模型取名为Three_Link

在这里插入图片描述

本部分的matlab程序如下:

%使用Seriallink类函数把我们上面使用Link函数建立的连杆连成一个整体,生成一个串联机械臂模型
Three_Link=SerialLink ([L(1),L(2),L(3)]);

4、建立完成后,我们可以使用.display显示出我们建立的这个机械臂模型的信息,如下所示:

在这里插入图片描述

本部分的matlab程序如下:

%使用.display显示出我们建立的这个机械臂模型的信息
Three_Link.display

 5、我们使用.teach查看我们建立机械臂三维模型,在figure的左侧的上方显示的XYZ是机械臂末端相对于基坐标系的位置,RPY显示的是末端坐标系相对于定点坐标系的姿态(RPY角),在figure的左侧的下方显示关节变量的值,我们可以对关节变量的值进行修改,并查看随着关节变量值的改变,机械臂的位姿的变化,如下所示:

在这里插入图片描述


在这里插入图片描述

      本部分的matlab程序如下:
使用.teach查看我们建立机械臂三维模型,可以对关节变量的值进行修改
Three_Link.teach

   6、除了使用.teach查看我们建立机械臂三维模型,我们也可以使用.plot来查看在指定某组关节变量的机械臂三维模型,在使用.plot时,需要指定各关节变量的值,如下所示为各关节变量均为0时的位姿:

在这里插入图片描述

本部分的matlab程序如下:

%使用.plot绘制出某组关节变量的机械臂三维模型
Three_Link.plot([0,0,0])

7、本文介绍的例子的完整代码:

%参数的设定
a0=10;
a1=20;
d=30;
Theta1=0;
Theta2=0;
Theta3=0;

%使用Link类函数,基于DH法建模(改进型)
L(1)=Link([0,a0,0,0],'modified');
L(2)=Link([0,d,0,-pi/2],'modified');
L(3)=Link([0,a1,0,pi/2],'modified');

%使用Seriallink类函数把我们上面使用Link函数建立的连杆连成一个整体,生成一个串联机械臂模型
Three_Link=SerialLink ([L(1),L(2),L(3)]);


%使用.plot绘制出某组关节变量的机械臂三维模型
% Three_Link.plot([0,0,0])

%使用.display显示出我们建立的这个机械臂模型的信息
Three_Link.display

%使用.teach查看我们建立机械臂三维模型,可以对关节变量的值进行修改
Three_Link.teach