基于Mathematica的机器人仿真环境(机械臂篇)

      显示运动痕迹 (平移)零空间运动

  无论你从事的是机器人研发还是教学科研,一款好用的仿真软件都能对你的工作起到很大的帮助。那么应该选择哪个软件呢方便的选择就是成熟的商业软件,例如Adams、Webots。你的钱不是白花的,商业软件功能强大又稳定,而且性能一般都经过了优化。可是再强大的商业软件也有设计不合理的地方,它们的算法基本都是“黑箱”,你想做一点更改都不行。从学习和研究的角度出发,最好选择代码可修改的开源或半开源软件。
  在论文数据库中检索一下就会发现,很多人都选择借助Matlab这个数学软件平台进行机器人的建模仿真 [ 1 ] ^{[1]} [1]。这并不奇怪,因为Matlab具有优秀的数值计算和仿真能力,在它的基础上开发会很便利。如果你非要舍近求远,用 C++ 编写一套仿真软件,先不要说仿真结果如何显示,光是矩阵计算的实现细节就能让你焦头烂额。

小技巧 STL格式是一种三维图形格式,被很多三维建模软件支持(Mathematica也支持,所以我们要保存为这个格式)。STL格式只存储三维图形的表面信息,而且是用很多的三角形对图形进行近似的表示。如果你的机器人外形比较简单(规则的几何体),那么得到的STL文件大小一般只有几十KB ;可是如果外形很复杂(比如包含很多的孔洞、曲面),生成的STL文件会很大(几MB~几十MB)。对于一般配置的计算机,模型文件超过100KB用Mathematica处理起来就比较慢了。为了让仿真显示地更流畅,可以利用免费软件MeshLab对其进行化简,MeshLab通常能够在基本不改变外形的前提下将文件大小缩减为原来的十分之一甚至更多。
  MeshLab的安装和操作都是傻瓜式的,打开后进入如下图左所示的菜单中,出现右图的页面,这里的“Percentage reduction”表示缩减的百分比(1 表示不缩减,0.1 则表示缩减为原来的10%),设置好后点击Apply并保存即可。

  然后在 Mathematica中导入 STL 文件,使用的代码如下(假设这些 STL 文件保存在 D:MOTOMAN 文件夹下):

  这里我偷了个懒,为了少打些字,我把导出连杆的文件名改成了从1到9的数字(这个机械臂的装配体一共包含9个零件)。我们把导入的模型显示出来,效果如下图。使用的代码如下

说明:是三维坐标系的三个正交的轴( x y z xyz xyz轴的颜色分别是 R G B RGB RGB)。在机器人领域会用到大量的坐标系及其变换,直接看数字总是不直观,不如将坐标系显示出来更方便。定义 的代码如下,这个坐标系默认原点的位置在 ( 0 , 0 , 0 ) (0,0,0) (0,0,0),以后我们称这个坐标系为“全局坐标系”。

  你可能会好奇:导入的零件数据是以什么样的格式储存的呢br>   用来存储机器人外形数据的变量包含一共9个零件的数据,假如你想看第一个零件(对应的是基座,它通常用来将机械臂固定在大地上),可以输入:

  运行后的输出结果是一堆由 函数包裹着的数字,主要可分为两部分:第一部分是零件几何体所有顶点的三维坐标;第二部分是组成零件几何体的三角形(注意:构成每个三角形的三个顶点是第一部分点的序 ,而不是坐标值)。我们可以用以下代码将其分别显示出来:

说明:现在的机器人姿势(大臂竖直、小臂前伸)是6自由度机械臂的“零位”状态,我们将此时机械臂各关节的角度认为是0。一般机械臂上都有各关节的零点位置标记,用于指示各关节的零点。我们用控制器控制机械臂时,发出的角度指令都是相对于这个零点位置的。零点位置不是必须遵守的,你可以将任意的角度设置为零位,不过为了统一,最好用机械臂固有的零位——也就是当前姿势下各关节的角度。

3. 运动学仿真

  前面的工作只是让机械臂的模型显示出来。如果想让它动起来,那就要考虑运动学了。机器人这个学科听起来高大上(很多都停留在理论上),可实际上现在大多数工业机器人的控制方式还是比较低级的,它们只用到了运动学,高级一点的动力学很少用,更不要提智能了(它们要说自己有智能,我们家的洗衣机和电视机都要笑掉大牙了)。看来要使用机器人,运动学是必不可少的,所以我们先来实现运动学。
  在建立运动学模型之前我们需要了解机器人的机械结构。前面提到,MOTOMAN-ES165D 是一个6自由度的串联机械臂。而6个自由度的机器人至少由7个连杆组成(其中要有一个连杆与大地固定,也就是基座)。可是我们导入的连杆有9个,多出来的2个连杆是弹簧缸(基座上黄色的圆筒)的组成部分。MOTOMAN-ES165D 机器人能够抓持的最大负载是165公斤,弹簧缸的作用就是作为配重平衡掉一部分负载的重量,要不然前端的关节电机会有很大的负担。可是弹簧缸给我们的建模造成了麻烦,因为它导致“树形拓扑”以及存在“闭链”,这不太好处理。为此,我们先忽略掉弹簧缸。
  
3.1 连杆的局部坐标系

  机器人的运动也就是其构成连杆的运动。为了表示连杆的运动,我们要描述每个连杆的位置和姿态(合称为“位姿”)。通常的做法是在每个连杆上固定一个坐标系(它跟随连杆一起运动),这个坐标系被称为“局部坐标系”。通过描述局部坐标系的位姿我们就可以描述每个连杆的位姿。如何选择局部坐标系呢论上你可以任意选择,不过局部坐标系影响后续编程和计算的难易程度,所以我们在选择时最好慎重。在运动学建模和动力学建模中,坐标系的选择通常是不同的:
  ● 运动学建模时,连杆的局部坐标系一般放置在关节处,这是因为常用的 D-H 参数是根据相邻关节轴定义的;
  ● 动力学建模时,连杆的局部坐标系一般放置在质心处,这是因为牛顿方程是关于质心建立的,而且关于质心的转动惯量是常数,这方便了计算。
  我们先考虑运动学,因此将局部坐标系设置在关节处。在SolidWorks中打开任何一个连杆,都能看到它自己有一个坐标系。描述一个连杆的每一条边、每一个孔的坐标都以这个坐标系为参考,我们称它为“绘图坐标系”。绘图坐标系通常不在质心处,因为在你还没画完连杆之前你根本不知道它的质心在哪里。绘图坐标系通常在连杆的对称中心或者关节处,我们不妨将每个连杆的绘图坐标系当做它的局部坐标系。
  那么下一个问题是每个连杆的绘图坐标系在哪儿呢们以第三个连杆为例说明,如下图左所示,点击SolidWorks左侧的“原点”标签,图中就会显示绘图坐标系的原点。(如果你想将绘图坐标系显示出来,可以先选中“原点”标签,然后点击上方菜单栏中的“参考几何体”,再选择“坐标系”,然后直接回车即可看到新建的绘图坐标系,如右图,可见它位于上面的关节轴)

基于Mathematica的机器人仿真环境(机械臂篇)
  

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年7月21日
下一篇 2022年7月21日

相关推荐