详细介绍如何使用MATLAB中的机器人工具箱建立机器人模型(DH法建模)(机械臂)

2023-05-16

  本篇文章主要与大家分享一下如何使用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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

详细介绍如何使用MATLAB中的机器人工具箱建立机器人模型(DH法建模)(机械臂) 的相关文章

  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • 禁止 MATLAB 自动获取焦点[重复]

    这个问题在这里已经有答案了 我有以下问题 在我的 MATLAB 代码中 我使用如下语句 figure 1 更改某些数据的目标数字 问题是 在此 MATLAB 之后 系统将焦点集中在具有该图形的窗口上 当我在后台运行一个大脚本并尝试在计算机上
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • 绘制布朗运动 matlab

    首先 我只想说我不太习惯使用matlab 但我需要一个作业 我应该创建一个 布朗运动 我的代码目前如下所示 clf hold on prompt Ge ett input size input prompt numParticles inp
  • 在 Pari-GP 中嵌套特定递归

    每个人 我最初在 Stackexchange 上发布了类似的问题 它已移至此处 可以在链接中找到 在 Matlab 中声明函数递归序列 https stackoverflow com questions 67146061 declaring
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p
  • 在Matlab图例中使用Latex?

    我的 matlab 不接受我的 Latex 例如 如果我使用legend b 6 rightarrow b 7 它没有向我显示箭头 我该如何解决这个问题 尝试使用 Latex 解释器 例如 legend b 6 rightarrow b 7
  • MATLAB 子图标题和轴标签

    我有以下脚本来最终绘制 4 x 2 子图 files getAllFiles preliminaries n size files cases cell 1 n m cell 1 n for i 1 1 n S load files i c
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • MATLAB;具有 2+ 个/分割图例的饼图 R2017b

    我正在创建一个饼图 理想情况下希望图例水平显示在顶部和 或底部 然而 在几乎所有情况下 这是不可能的 因为图例超出了数字 因此 我理想情况下希望将图例分成两个 或更多 子图例并单独放置它们 我知道这不是 MATLAB 中的内置功能 我使用的
  • Matlab 错误:()-索引必须出现在索引表达式的最后

    我有这段代码 想要在制表符分隔的 txt 文件中写入一个数组 fid fopen oo txt wt for x 1 length s fprintf fid s t n s x 1 end fclose fid 但我收到此错误 Error
  • 可以避免迭代元胞数组时的“s{1} 烦恼”吗?

    The s 1 标题的 烦恼 指的是下面的 for 块中的第一行 for s some cell array s s 1 unpeel the enclosing cell do stuff with s end This s s 1 业务

随机推荐