详细介绍如何使用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法建模)(机械臂) 的相关文章

  • 如何将条形图的 XtickLabels 向左移动?

    我目前正在尝试创建频率直方图 为此 我必须创建一个条形图 条形图之间没有空格 然而 这集中于XTickLabels在酒吧的中间 由于它是一个直方图 我希望数值位于每个条形之间的线上 以便它可以直观地指示间隔 本质上 我需要将所有刻度标签移至
  • 在 Matlab 中保存当前运行的脚本

    有没有办法保存Matlab中当前运行的脚本 我有一个脚本 它会自动备份一组脚本 但如果我更改了当前脚本 则保存的版本将过期 也许可以调用一些java Thanks 在 Yair Altman 网站上的某个地方 请参阅我的其他答案中的链接 他
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • MATLAB - 如何将子图一起缩放?

    我在一张图中有多个子图 每个图的 X 轴是相同的变量 时间 每个图上的 Y 轴都不同 无论是它所代表的内容还是数据的大小 我想要一种同时放大所有图的时间尺度的方法 理想情况下 可以在其中一张图上使用矩形缩放工具 并让其他图相应地更改其 X
  • 如何找到在matlab中重复的矩阵的每一行的索引?

    我想找到矩阵中所有有重复项的行的索引 例如 A 1 2 3 4 1 2 3 4 2 3 4 5 1 2 3 4 6 5 4 3 要返回的向量将是 1 2 4 很多类似的问题建议使用unique函数 我已经尝试过 但我能得到的最接近我想要的功
  • Matlab没有优化以下内容吗?

    我有一个很长的向量 1xrv 和一个很长的向量w1xs 和一个矩阵Arxs 它是稀疏的 但维度非常大 我期望 Matlab 对以下内容进行优化 这样我就不会遇到内存问题 A v w 但看起来 Matlab 实际上是在尝试生成完整的v w矩阵
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • MATLAB 教程中的 SIFT 实现

    我正在寻找 MATLAB 中的一些基本 SIFT 实现 我需要从第一原则来写它 另外 我正在寻找一些可以解释程序中发生的事情的内容 Vedali 的代码和 David Lowe 的代码超出了我的理解范围 如果您是 Matlab 用户 您一定
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • 如何将二进制值列表转换为int32类型?

    我在 MATLAB 工作区中有一个小端格式的二进制数列表 我想将它们转换为 int32 a是由 0 和 1 组成的双向量 如下所示 a 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • 给定协方差矩阵,在Matlab中生成高斯随机变量

    Given a M x M期望的协方差 R 以及所需数量的样本向量 N计算一个N x M高斯随机向量 X在普通 MATLAB 中 即不能使用r mvnrnd MU SIGMA cases 不太确定如何解决这个问题 通常你需要一个协方差并且意
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标

随机推荐