这次介绍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变量)。