前言:

之前我们已经学会了很多关于Matlab和机器人的基础知识了,现在我们来做个6轴机器人的project,往后的学习日志也会基于这个项目,但是往后可能会用到除了Matlab之外的其他技能,比如C++和ROS。项目难度会越来越大,希望大家和我能坚持走下去,一起变强!

本文主要参考了下方的视频(从youtube搬运到B站的):

1. 导入SolidWorks文件:

导入SolidWorks文件的方法在之前的文章里我已经讲过了,不会的同学可以翻看下方文章:

SolidWorks工程文件我已经放在下面了:
SolidWorks渲染图

链接:pan.baidu.com/s/1iZBgCe

提取码:kv8t

刚刚导入的文件,在运行的时候,首先会因为重力原因和关节处无阻尼,而在仿真的时候抽搐,并且疯狂穿模。

2. 添加更加真实的物理效果

那么,为了解决以上的问题,我们需要对机器人系统做以下编辑修改:

  • 在转动关节处添加阻尼来模拟电机中的磁感力和机械阻尼
  • 为转动关节添加运动范围限制,防止穿模
  • 在模型之间添加接触力,防止穿模

那么我们一步一步的来操作,首先是添加阻尼:

在每一个关节处添加20N*m(deg/s)的阻尼,apply -》OK 。

添加过程中,我们发现不只有6个可旋转的关节,共有10个,但其实是因为电机与连杆处的连接也是关节连接但其实这个连接对于机器人的运动没有任何的帮助,可以不进行修改。

然后,同样是在关节出,添加运动限制,电机1-7除了3号都设置为-360到360,3号电机设置为-155到155,目的是为了防止机械臂与底座发生碰撞:

最后是利用spatial contact force为模型添加物理碰撞:
首先我们双击girid方块,然后再双击solid,将Convex Hull export出来。

这样我们的solid就会多出一个名叫CH的口,我们利用一个Connect Port将刚才的那个口引出:

这样我们的外层模型处就会有一个引出的口:

然后我们利用spatial contact force连接可能发生碰撞的模块,连接方式如下图:

然后调节spatical contact force的参数调节到合适的值,但这里我们暂时用默认数据,等问题出现了我再告诉大家。

这时,我们运行模型,可以看到机械臂在重力的作用下缓缓下降:

3. 添加控制器

首先我们添加一个slider,打开slider gain,将其上下限分别设置为我们为运动关节设置的上下限。一个gain,并将gain的k调整为pi/180,目的是将rad转换为deg,并且添加一个Simulink PS convert,因为在MATLAB中Simscape和simlunk并不是一个系统,需要林勇PS 2 Simlunk 或者 Simulink 2 PS互相转换连接,虽然他们长得差不多。具体图如下:

然后我们在Revolute里的actuator参数调整为:

这时我们的Revolute会多出来一个q口,把这个q口与刚才我们新建的那一串东西的红色口相连,结果如下:

每一个电机引出的Revolute都要与这个相连。

完成后,最好再利用CTRL+G把每一个功能组件创建成subsystem,这样看起来比较整洁。

比如这样。

最后我们还需要调节一下停止时间为inf(无穷),以及将运行方式调整为为simulation pacing,并且enable pacing。调整后我们可以看到run按键下面多出来了一个时钟

这样我们再运行我们的程序的时候,就可以调整每一个轴的角度了。

结果如下:

至此,所有操作成功!

下一次我们会让利用script功能,让机器人的控制变得更加可靠。