External controller tutorial

2020-08-04 20:48:16 浏览数 (1)

与你分享我的快乐与悲伤是你的荣幸。

有几种方法可以控制机器人或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个:

在所有7种情况下,都使用子脚本,主要用于与外部世界建立链接(例如,启动正确的客户机应用程序,并将正确的对象句柄传递给它)。还有另外两种方法可以控制机器人、仿真或仿真器本身:使用自定义脚本或外接程序。但是不建议使用它们进行控制,而应该在不运行模拟时使用它们来处理功能。

例如,在controlledViaB0RemoteApi.ttt中链接到机器人的子脚本主要任务如下:

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

另一个例子是,连接到controlledViaRos.ttt场景中的机器人的子脚本的主要任务如下:

检查RosInterface for V-REP是否已加载

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

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

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

使用选择的连接端口作为参数启动控制器应用程序(bubbleRobServer)

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

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

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

运行模拟,并复制和粘贴机器人:将看到复制的机器人将直接运行,因为它们所附加的子脚本负责启动各自外部应用程序的新实例,或调用适当的插件函数。

谢谢大家的支持

有任何问题欢迎大家批评指正!

0 人点赞