Script(二)

2020-08-04 20:39:38 浏览数 (1)

这次介绍V-REP内部和周围的通信方式。

01

Signals

signals可以看作是全局变量。目前支持四种类型的信号:整数型、浮点型、双型和字符串型信号。可以定义、重新定义、读取和清除信号。在模拟结束时,所有由主脚本或任何子脚本创建的信号都将被清除。例如:

02

Custom data blocks

自定义数据块是可以存储在对象内部或场景内部的数据。它可以用来存储与模型或场景一起保存的自定义数据,也可以作为一种通信手段。例如:

03

ROS

04

BlueZero

05

Remote API

06

Persistent Data

可以将持久数据块视为持久全局缓冲区。可以定义、重新定义、读取和清除持久数据块,并在所有打开的场景中共享这些数据块。它们会一直保存到模拟器结束,但也可以保存在文件中,并在下一次V-REP启动时自动重新加载。

07

Custom Lua functions

主客户端应用程序或任何插件都可以通过Lua定制API命令注册自定义Lua函数。然后,当从脚本中调用自定义Lua命令时,将回调主客户机应用程序或插件中已注册的函数。这对于实现高级Lua命令非常方便(例如,可以想象使用一个插件处理机器人的移动,使用一个Lua命令simRobot.moveAndAvoidObstacle () !)

08

Wireless communication simulation

V-REP允许以一种非常灵活的方式模拟无线通信:数据可以发送到一个特定的方向,并在一个特定的距离。如果接收器位于指定的发射区域,则可以接收发射的数据。有关详细信息,请参考常规API中的相应函数。通过启用环境对话框中的可视化无线发射和可视化无线接收项,可以可视化无线发射/接收活动。下图展示了两个移动机器人之间的可视化无线通信:

09

LuaSocket

V-REP附带一个名为LuaSocket的Lua扩展库(有关此库的致谢和致谢信息,请参见此处)。它允许在嵌入式脚本或外接程序中执行各种类型的套接字通信。下面的代码部分演示了一个线程的子脚本如何获取网页:

注意request命令的阻塞部分是如何放在非阻塞部分中的。有关如何避免外部命令阻塞的更多信息,请参考sim.setThreadIsFree API命令。 如果你的应用程序需要套接字通信,这是非常方便的设置一个线程脚本作为请求服务器,并让其他脚本访问它的套接字通信如下例: 线程请求服务器:

下面的非线程子脚本的例子可以用来访问套接字信息:

10

Lua extension library

利用Lua的扩展库机制,可以几乎无限地扩展V-REP的通信方式。正如在LuaSocket库中所做的那样,您可以添加在线可用的任何其他类型的Lua扩展库。您只需根据库的说明将库安装到V-REP的安装目录中。如上面的LuaSocket所示,确保你使用了sim.setThreadIsFree API命令的非阻塞部分应该有一个扩展库命令块V-REP。

11

Calling script functions

从主客户端应用程序、插件、嵌入式脚本、远程API客户端或ROS节点,都可以使用simCallScriptFunctionEx或simxCallScriptFunction调用脚本函数。被调用的脚本函数可以执行各种任务,然后将数据发送回调用方。

12

Setting a script variable

在主客户端应用程序或插件中,可以使用sim.setScriptVariable设置/清除脚本变量(即Lua变量)。

0 人点赞