V-REP 外部控制器教程

在 V-REP 中有几种控制机器人或模拟的方式:

最便捷的方式是编写一个可以处理给定机器人或模型行为的子脚本。这是最方便的方式,因为子脚本直接附加在场景对象中,它们将与其相关的场景对象一起复制,不需要使用外部工具对它们进行任何编译,它们可以在线程或非线程模式下运行,它们还可以通过自定义 Lua 功能或 Lua 扩展库进行扩展。使用子脚本的另一个主要优点:与本节中提到的最后3 种方法(例如使用的常规API)相比,没有通信滞后,子脚本是主线程应用(固有的同步操作)的一部分。然而编写脚本有几个缺点:你无法选择编程语言,不能拥有最快的代码,并且除了 Lua 扩展库以外,你不能直接访问外部函数库。

另一种方式是通过编写插件来控制机器人或模拟。插件机制允许回调机制,自定义 Lua 功能实现,当然也可以访问外部函数库。插件通常与子脚本一起使用(例如,插件注册自定义 Lua 功能,当从子脚本调用时,将调用特定的插件功能)。使用插件的主要优点还在于其没有通信延迟,这与本节中提到的最后3 种方法(即使用的常规API)不同,并且插件是应用程序主线程(固有的同步操作)的一部分。插件的缺点是:编程起来比较复杂,需要使用外部编译。另请参阅插件教程。

第三种方式使通过编写依赖于远程 API 的外部客户端应用程序来控制机器人或模拟。如果你需要从外部应用程序,即机器人或另一台计算机运行控制代码,这是一个非常方便且容易的方法。你也可以使用与运行真实机器人的代码完全相同的代码来控制模拟或模型(例如虚拟机器人)。远程 API 有两个版本:基于 B0 的远程 API 和旧版远程 API。

第五种方式是通过 ROS 节点控制机器人或模拟。与远程 API 类似,ROS 是使多个分布式进程相互通信的一个便捷方式。远程 API 非常轻便快捷,只能和 V-REP 进行通信。另一方面,ROS 几乎能让程序中的任意数量的进程彼此连接,并且可以使用大量的兼容库。然而,它比远程 API 更棘手和复杂。有关详细信息,请参阅ROS 接口。

第六种方式是通过 BlueZero (BØ) 节点控制机器人或模拟。与 ROS 类似,BlueZero 是一种让多个分布式进程相互通信的便捷方式,是一种轻量级的跨平台解决方案。 有关详细信息,请参阅 BlueZero 界面。

第七种方式是通过写入一个外部程序来控制机器人或模拟,这个外部程序通过各种手段(例如管道,套接字,串行端口等)与 V-REP 插件或 V-REP 脚本进行通信。选择编程语言主要有两个优点,一是可以用任何语言,二是具有灵活性。此外,控制代码也可以在机器人或其他计算机上运行。然而,相比较使用远程API,使用这种方法来控制模拟或模型更为繁琐。

有7个与本教程相关的场景文件:

scenes/controlTypeExamples/controlledViaScript:通过非线程子脚本控制,另一个通过线程子脚本控制。

scenes/controlTypeExamples/controlledViaPlugin:通过插件控制。

scenes/controlTypeExamples/controlledViaB0RemoteApi:通过基于B0的远程 API 控制。

scenes/controlTypeExamples/controlledViaLegacyRemoteApi:通过旧版远程 API 控制。

scenes/controlTypeExamples/controlledViaB0:通过BlueZero界面控制。

scenes/controlTypeExamples/controlledViaRos:通过ROS接口控制。

scenes/controlTypeExamples/controlledViaTcp: 通过 LuaSocket 和 TCP 控制机器人。

V-REP 外部控制器教程_第1张图片

在上述 7 种情况下,子脚本主要是为了与外界建立链接(例如,启动正确的客户端应用程序,并将正确的对象句柄传递给它)。 还有另外两种方法可以控制机器人,即仿真或仿真器本身(使用自定义脚本或附加组件)。 但是,不建议使用它们进行控制,而是在仿真未运行时处理。

例如,链接到场景 controlledViaB0RemoteApi.ttt 中的机器人的子脚本具有以下主要任务:

使用一些对象句柄作为参数启动控制器应用程序(bubbleRobClient_b0RemoteApi)。通过 b0RemoteApiServer 提供基于 B0 的远程 API 的服务器功能。

另一个例子,链接到场景 controlledViaRos.ttt 中的机器人的子脚本具有以下主要任务:

检查用于 V-REP 的 ROS 接口是否加载

运行一些主题名称或对象句柄作为参数的控制器应用程序(rosBubbleRob2)

然而,作为另一个例子,在场景 controlledViaTcp.ttt 中链接到机器人的子脚本具有以下主要任务:

搜索空闲的套接字连接端口

运行所选的连接端口作为参数的控制器应用程序(bubbleRobServer)

本地连接到控制器应用程序

在每次模拟过程中,将传感器值发送到控制器,并从控制器读取所需的电机值

在每次模拟过程中,将所需的电机值应用于机器人的关节

运行仿真,复制并粘贴机器人:您将看到复制的机器人直接运行,因为它们附加的子脚本负责启动各自外部应用程序,或调用相应的插件函数。

参考资料

1.V-REP官方文档:http://www.coppeliarobotics.com/helpFiles/

你可能感兴趣的:(机器人仿真V-REP)