V-REP

摘要:
V-REP内部脚本仅支持Lua语言。远程API通过套接字或共享内存与V-REP通信。数据流模式simx_ opmode_流imx_ opmode_缓冲区类型3.与对象相关的V-REP仿真涉及许多类型的大量模型。您可以直接将ttm文件导入V-REP。
vrep文档

一、V-REP编程

1. 编程方式

V-REP支持六种编程方式。
嵌入式脚本、add on、ros node、bluezuro node、plugin、remote api等。

1. 嵌入式脚本

嵌入式脚本包括一个main脚本,多个子脚本。
子脚本包括线程和非线程脚本。
主脚本包含以下几个函数。
init、actuation、sensing、cleanup

注意
尽量不要修改子脚本,主脚本一旦打开,便改变为自定义脚本,不再能够自动更新。

V-REP内部脚本只支持Lua语言。
主脚本结构

function sysCall_init()         // 初始化
function sysCall_actuation()    // 执行器
function sysCall_sensing()      // 传感器
function sysCall_cleanup()      // 清除

2. API 架构

  1. 常规API
  2. 远程API
  3. ROS接口
  4. BlueZero接口
  5. 辅助API
  6. 其他接口

二、远程控制

V-REP内部脚本只支持Lua语言,而远程API支持C/C++、Python、Java、Matlab/Octave以及Lua等多种语言。

1. 远程连接

  1. 实现远程连接,需要动态库remoteApi.so文件,将其存放于V-REP软件的根目录。
  2. 查看remoteApiConnections.txt文件,获取其远程连接默认端口号。
  3. 以Python语言为例,测试远程连接。
clientID=vrep.simxStart('127.0.0.1',19999,True,True,5000,5) # Connect to V-REP
vrep.simxGetPingTime(clientID)
vrep.simxFinish(clientID)   # Close

众多远程连接示例保存在programming文件夹下。

2. 远程API

V-REP提供了众多远程API与常规API相对应,以便外部使用V-REP的各种功能。
远程API通过套接字或者共享内存等方式与V-REP通信。

远程API有两个独立的实体,通过套接字进行交互。
比如导入场景、添加模型、启动仿真等。

vrep.simxLoadScene()    
vrep.simxGetObjectHandle()

另外,还可以直接调用常规API实现远程调用。

simxCallScriptFunction()

该API支持直接使用内部常规API,在制定object handle和client ID的前提下,实现远程控制。
函数调用类型有

  • 阻塞调用 simx_opmode_blocking
    在调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。
  • 非阻塞调用 sim_opmode_oneshot
    在不能立刻得到结果之前,该函数不会阻塞当前线程,而回立刻返回。
    该调用不适合于不需要服务端应答的场合。
  • 数据流模式 simx_opmode_streaming simx_opmode_buffer
    等类型

三、物体相关

V-REP的仿真涉及众多数量、众多类型的模型。V-REP提供了Shape、八叉树,以及点云等多种类型。
可以直接在图形界面中添加生成,也可以通过Lua脚本调用常规API,以及外部脚本调用远程API添加生成。

1. 句柄

V-REP场景中的每个物体都有句柄,无论是可见还是不可见的物体,以至于其他动作比如碰撞等,皆有句柄。
每个生成或者检测物体或动作的API皆可返回对应的句柄。
比如

sim.getObjectHandle()
sim.getCollisionHandle()

另外还可以通过物体相对应的脚本返回自身的句柄

sim.getObjectAssociatedWithScript(sim.handle_self)

该API返回所在子脚本对应的物体的句柄。

2. 物体生成

在V-REP场景中添加物体可以直接右键添加,
或者通过API比如sim.createPureShape()等。

进一步可以通过sim.setObjectPosition()或``sim.设置其位置。
达到对模型的充分设置。

sim.createPureShape(0,43,{0.1,0.1,0.1},0.1,nil)

关于shape的属性,43表示
object

随机位置,生成随机形状的物体。
可以利用随机数,控制物体的位置。

math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6))
print(math.random())

另外物体的位置设置,应该选用相对位置,否则会出现新产生的物体被挤出去的现象。

sim.setObjectPosition()

即物体的相关物体的句柄不应是-1。

2. 模型导入

V-REP可以将现有的外部模型导入,支持URDF、点云等多种类型。
可以直接将ttm文件导入至V-REP。

V-REP的点云导入方式为,建立一个初始点云,然后逐渐向点云中添加点。

点云导入

导入机器人,以ER7为例
导入机器人时,机器人无法保持正常的状态,会发生抖动或者散架的情况。

dummy是为了运动学反解而准备的,需要成对出现

3. 碰撞检测

V-REP可以检测两个碰撞实体,碰撞过程中可以注册碰撞对象,既可以检测具体的两个物体之间的碰撞,也可以检测一个物体与其他所有物体之间产生的碰撞。碰撞对象之间的碰撞状态可以由不同的颜色可视化显示,也可以通过Graph与数据流对其进行记录。

另外,对于一个复杂的模型,其内部由多个子结构构成,注册碰撞对象时,会在其内部检测到碰撞,需要将整个复杂结构体注册为一个Group,忽略其内部碰撞,以免影响正常的仿真验证。

4. 物体抓取

物体抓取有两种方式,一种是仿真实际的抓取过程,但是涉及众多物理参数的调节,较为复杂;另外还有伪抓取的方式,可以建立一个Link,实现有效地抓取。
关于实际仿真抓取,其反应如同真实场景。

关于伪抓取,通过建立连接,可以保证抓取稳定。

sim.setObjectParent(attachedShape,connector,true)   # 建立连接
sim.setObjectParent(attachedShape,-1,true)  # 断开连接

四、视觉相关

视觉传感器和相机都可以显示场景中的图像,但是一般用于不同的用途,一个侧重于视觉检测和处理,一个侧重于场景显示。

1. 相机

可以在场景中添加多个相机,并实现多个视角的切换。
相机

2. 视觉传感器

视觉传感器有正交投影和透视投影两种类型。
传感
视觉传感器有*端切*面和远端切*面。
使用剪切*面可以排除场景众多一些几何体,只查看或渲染场景中的某些部分。
比*端切*面*和比远端切*面远的对象是不可见的。远*端切*面可以在属性对话框中加以设置。
透视模式下的视场角等属性也可以设置。
视觉传感器可以选择性的忽略RGB信息和深度信息以及其他信息以提高速度。
视觉传感器的Z轴沿着视线方向,Y轴代表上方,X轴指向左侧。
视觉传感器还可以通过设置滤波器进行进一步设置。

视觉传感器获得的深度值是归一化的数值,并非真正的数值,需要根据远*端切*面的位置进一步运算得出真实的深度值。

获取深度值以及RGB值

sim.getVisionSensorDepthBuffer()
sim.getVisionSensorImage()

五、ROS接口

v-REP与ROS的连接有三种接口,包括ROS Interface、ROS Plugin和诸如ROS Bridge等其他接口。

1. ROS Interface

ROS Interface为V-REP官方支持的连接方式。
RosInterface以高保真度复制C/C++ ROS API。
该功能通过libv_repRosInterface.so插件启用。
在V-REP的脚本中,以simROS为前缀的API为RosInterface支持的API。

通过RosInterface,V-REP可以充当ROS节点,其他节点通过ROS服务,ROS发布者和订阅者进行通信。

pub=simROS.advertise('/image', 'sensor_msgs/Image')
simROS.publisherTreatUInt8ArrayAsString(pub) -- treat uint8 arrays as strings (much faster, tables/arrays are kind of slow in Lua)
sub=simROS.subscribe('/image', 'sensor_msgs/Image', 'imageMessage_callback')
simROS.subscriberTreatUInt8ArrayAsString(sub) -- treat uint8 arrays as strings (much faster, tables/arrays are kind of slow in Lua)

操作于ROS类似。

2. ROS Plugin

主要包括三部分

v_repStart()
v_repEnd()
v_repMessage()

关于libv_reoRosControl,
由vrep_ros_control_example,依赖于
vrep_commom、
vrep_plugin_skeleton、
vrep_skeleton_msg_and_srv编译生成。

但是插件仅支持单机器人。

可以自己制作ROS的相关插件,实现ROS

3. 其他接口

V-REP还支持通过ROS Bridge等接口实现。

ROS Bridge

六、性能优化

1. headless模式

V-REP支持headless模式启动,在headless模式下启动,可以省去图形界面消耗的资源,提高运行速度。

./vrep.sh -h -s5000 -q myScene.ttt

经过实验,headless模式可以将启动速度提升*十倍。

2. ghost

ghost

ghost

V-REP中有两个ttm文件

另外仿真场景中,还有加速选项。

(cdots cdots)
未完待续

参考资源
冬木远景
User Manual
V-REP Forum
GitHub

免责声明:文章转载自《V-REP》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue+axois 封装请求+拦截器(请求锁+统一处理错误码)SHELL脚本编程循环篇-while循环下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

35 | 如何准备测试数据?

测试数据创建的基本方法 从创建测试数据的维度来看,测试数据准备方法主要可以分为四类: 基于 GUI 操作生成测试数据; 通过 API 调用生成测试数据; 通过数据库操作生成测试数据; 综合运用 API 和数据库的方式生成测试数据。 基于 GUI 操作生成测试数据 很少直接使用基于 GUI 的操作生成测试数据。 通过 API 调用生成测试数据 通过 AP...

ROS入门笔记(六):ROS系统架构

ROS入门笔记(六): ROS系统架构 1 ROS系统架构    1.1 文件系统(重点)    1.2 计算图    1.3 开源社区 1 ROS系统架构   1.1 文件系统(重点) 文件系统:主要指在硬盘里能看到的ROS目录和文件:   1)元功能包(Meta Packages):组织多个用于同一目的功能包。2)元功能包清单(Meta...

五大典型场景中的API自动化测试实践

一、API 测试的基本步骤 通常来讲,API 测试的基本步骤主要包括以下三大步骤: 1、准备测试数据; 2、通过通用的或自己开发的API测试工具发起对被测API的request; 3、验证返回结果的response。 常用的API测试工具有命令行工具cURL、图形界面工具Postman或SoapUI,支持API性能测试的JMeter等。 二、API复杂场景...

为服务中网关的作用

什么是网关 随着互联网的快速发展,当前以步入移动互联、物联网时代。用户访问系统入口也变得多种方式,由原来单一的PC客户端,变化到PC客户端、各种浏览器、手机移动端及智能终端等。同时系统之间大部分都不是单独运行,经常会涉及与其他系统对接、共享数据的需求。所以系统需要升级框架满足日新月异需求变化,支持业务发展,并将框架升级为微服务架构。“API网关”核心组件是...

关于 RESTFUL API 安全认证方式的一些总结

常用认证方式在之前的文章REST API 安全设计指南与使用 AngularJS & NodeJS 实现基于 token 的认证应用两篇文章中,[译]web权限验证方法说明中也详细介绍,一般基于REST API 安全设计常用方式有:HTTP Basic Basic admin:admin Basic YWRtaW46YWRtaW4...

ROS知识(5)----消息与服务的示例

ROS中已经定义了较多的标准类型的消息,你可以用在这些标准类型的消息上再自定义自己的消息类型。这个在复杂数据传输很有用,例如节点和服务器进行交互时,就可能用到传输多个参数到服务器,并返回相应的结果。为了保证例子的完整,将详述每一步。 基本思路和创建talker和listener的例子类似,步骤如下: 建立工作空间workspace(类似于vs下的解决方案,...