使用Matlab与V-REP联合仿真 - Play V-REP with Matlab

OS: Win10 x64
Matlab: R2016b
V-REP: V-REP PRO EDU v3.5.0

VREP

对V-REP有一定了解的读者可以直接跳到第三节Matlab环境准备。

下载、安装与支持

V-REP提供Windows、Linux和MacOS三个平台的应用程序支持,任意平台都提供教育版和专业版两个版本。教育版是免费的,因此后续教程我们均以教育版为例。安装方法也非常简单,Windows版按照正常的安装流程即可,Linux版本只要解压缩就行。

目前来说,V-REP是一个比较小众的仿真工具,尽管它功能非常强大。目前唯一的技术支持就是V-REP官方论坛。V-REP提供的技术手册可以解决大部分问题,功能细节介绍也非常详细。

V-REP操作基础

打开V-REP,V-REP会自动生成一个新的场景(Scene),该场景是空白的。然后你要做的是添加你的仿真对象。V-REP自带的Tutorial会领着你一步一步地从零开始添加一个机械臂,前提是你有CAD模型。

添加自定义仿真对象是基本教程中的内容,尽管大部分用户其实不需要自己做机械臂。但是看完后你会对V-REP的仿真原理有初步的了解,还是很有必要稍微看下的。
V-REP中的形状按照动态性能可以分成动态(dynamic)和静态(static)两种,也可分成可响应的(respondable)和不可响应的(non-respondable)两种:

  1. dynamic 形状会掉落并受到外部力/力矩的影响;static 形状只会跟着其parent移动。
  2. respondable 形状之间会触发碰撞响应,如果它们是dynamic的,这种响应会表现在运动上;而 non-respondable 形状之间即便碰到了也没有碰撞响应。

respondable形状在仿真的时候越简单越好,物理引擎在仿真时会按照5种不同类型的形状进行区分:

  1. pure shapes:物理引擎对这种形状的仿真效果是最稳定最高效的。但是这种类型的形状是收到几何限制的,只能是简单的几何形状,添加这种形状可以通过 [Menu bar –> Add –> Primitive shape] 。
  2. pure compound shapes:一个group的pure shapes,性质与pure shapes类似,创建这种形状可以通过 [Menu bar –> Edit –> Grouping/Merging –> Group selected shapes]。
  3. convex shapes:相比较而言,物理引擎处理这种形状的速度稍慢,稳定性也稍差。但是,只要是凸的几何形状都可以设定为这种类型。添加这种形状可以通过 [Menu bar –> Add –> Convex hull of selection] 或 [Menu bar –> Edit –> Morph selection into convex shapes]实现。
  4. compound convex shapes / convex decomposed shapes:一个group的convex shape。添加这种类型可以通过 [Menu bar –> Edit –> Grouping/Merging –> Group selected shapes], with [Menu bar –> Add –> Convex decomposition of selection…], 或 [Menu bar –> Edit –> Morph selection into its convex decomposition…]实现。
  5. random shapes:对于非凸且几何结构复杂的形状可以将其设定成这种类型。物理引擎处理这种形状的速度最慢,最不稳定。

多数情况下,你需要的仿真模型都可以在V-REP自带的模型浏览器中找到。
模型浏览器
找到后你只需要拖动到工作空间即可,你可以通过位置方向调整按钮来调整其位置和姿态。
位置和方向
V-REP的操作界面十分精简,默认添加了一部分用户交互按钮。你可以不借助菜单栏目完成绝大多数常用的操作,其它按钮的使用方法你可以自己体会,手册上也有详细说明。

V-REP仿真基础

仿真最简答的方式是使用 embedded scripts ,当然这种方式仅支持Lua语言。你也可以通过 pluginremote API clientROS nodeBlueZero nodeadd-on进行仿真。除此之外还有很多其它接口。关于这些接口的使用官方给出了示例

这里我们仅介绍 remote API 方式,不对其它的API进行介绍。官方手册中提供了三篇重要的说明:

  1. 远程API的使用方法
  2. 远程API服务器端(V-REP)使能方法
  3. 远程API用户端(Matlab)使能方法

强烈建议先阅读以上三篇说明。手册也提供了所有Matlab API的列表

关于仿真环境的设定官方手册也给出了几点建议

Matlab环境准备

V-REP与Matlab的通信可以通过 shareMemoryCommunicationPlugin ,也可通过 socket,这里我们仅介绍使用 Sockets的方法。

Step 1:新建你的Matlab项目文件夹,这是我的习惯,例如新建一个名为 vrep api的文件夹。

Step 2:在V-REP安装文件夹下找到 \programming\remoteApiBindings\matlab\matlab 文件夹,将该文件夹下的所有文件拷贝到项目文件夹 vrep api下。其实只有remApi.m 和 rempteApiProto.m 是有用的,其它可留作参考。

Step 3:在V-REP安装文件夹下找到 \programming\remoteApiBindings\lib\lib\Windows\64Bit 文件夹,将该文件夹下的所有文件拷贝到项目文件夹 vrep api下。当然只有一个文件。完成后你的项目文件夹下会有如下文件:
remApi
(readMe那个可以删除了)

如此,Matlab环境就准备完毕了。是不是挺简单的?

一个简单的例子

下面用一个简单的例子来测试一下V-REP与Matlab是否能够重新通信。

Step 1:打开V-REP,系统会自动创建一个新的scence。将UR5拖拽到工作空间。
scene01

Step 2:打开Matlab,将工作空间定位到vrep api文件夹下。并打开simpleTest.m文件。
scene02

Step 3:如simpleTest.m文件的注释所说,打开V-REP中UR5的脚本文件,在最顶端插入

simRemoteApi.start(19999)

UR5的脚本文件中已经自带了一个例子,可以删了,或者留着也行。
scene03

Step 4:运行V-REP仿真,再运行Matlab仿真,观测Matlab输出结果。在V-REP界面移动鼠标可以看到Matlab Command窗口输出的变化,直到Matlab程序执行完毕。
scene04

V-REP 与 Matlab 通信的关键脚本代码如下:

% V-REP脚本:

 simExtRemoteApiStart(19999)

% MATLAB端:

vrep=remApi('remoteApi'); % using the prototype file (remoteApiProto.m)
vrep.simxFinish(-1); % just in case, close all opened connections
clientID=vrep.simxStart('127.0.0.1',19999,true,true,5000,5);

好了,基本的介绍到此为止。

猜你喜欢

转载自blog.csdn.net/philthinker/article/details/79086725