外部控制器教程(External controller tutorial)

这篇教程详细介绍了在CoppelaiSim中控制机器人或仿真的多种方式,包括子脚本、插件、远程API(BZ和传统)、ROS以及BlueZero。每个方法有其优缺点,例如子脚本易于使用但编程语言受限,而插件和远程API提供了更多灵活性但可能涉及复杂的编程。此外,教程提供8个场景文件以展示不同控制方式的实践应用。
摘要由CSDN通过智能技术生成

外部控制器教程(External controller tutorial)

以下是几种可以在CoppelaiSim中控制机器人或仿真的方式:

  • 最方便的方法是编写一个子脚本来处理给定机器人或模型的行为。因为子脚本是直接和场景对象直接相连的,它们将与它们关联的场景对象一起复制,它们不需要任何外部工具编译,它们可以在线程或非线程模式下运行,它们可以通过自定义Lua函数或Lua扩展库进行扩展。使用子脚本的另一个主要优势是:不像本节中提到的最后3种方法那样存在通信延迟(即使用常规API),而且子脚本是应用程序主线程的一部分(固有的同步操作)。然而,编写脚本也有一些缺点:不能选择编程语言,不能编写最快的代码,不能直接访问外部函数库(除了Lua扩展库)。
  • 另一种方法是写插件。插件机制允许回调机制、自定义Lua函数注册,当然还允许访问外部函数库。插件通常与子脚本一起使用(比如,该插件注册了自定义Lua函数,当从子脚本调用时,将回调特定的插件函数)。一个主要优点是不存在通信延迟,插件是应用程序主线程的一部分(固有的同步操作)。插件的缺点是:它们更复杂的编程,而且它们也需要用外部编译。
  • 可以通过利用远程API写外部客户端应用控制。当在外部应用、机器人或另一台计算机上运行控制代码时,这是一种非常方便并且简单的方式。并且,这种方式控制仿真和真实机器人的代码是相同的。远程API包括两个版本:BZ远程API和传统远程API。
  • 通过ROS控制。和远程API的方式类似,ROS是一种方便的方法,可以让多个分布式进程彼此通信。而远程API是轻量级并且快速的,它只允许与CoppeliaSim进行通信。ROS还允许几乎任意数量的进程相互连接,并且有大量的兼容库可用,但它比较重量级,比较复杂。
  • 通过BlueZero节点。与ROS类似,这是一种方便的方法来让数个进程相互连接,并且是一种轻量级,跨平台的方法。
  • 通过使用CoppeliaSim插件或CoppeliaSim脚本编写一个外部应用程序,通过各种方式(如管道、套接字、串口等)进行通信。两大优势是编程语言的选择(可以是任何一种语言)和灵活性。在这里,控制代码也可以在机器人或不同的计算机上运行。然而,这种控制模拟或模型的方法比使用远程API的方法要繁琐得多。

下面有8个场景文件与教程有关:

  • 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/controlledViaRos2:通过ROS2接口控制机器人。
  • cenes/controlTypeExamples/controlledViaTcp:通过LuaSocket和TCP控制机器人。

在这里插入图片描述

在8个案例中,子脚本主要用来与外界进行连接(比如,连接正确的客户端应用并把正确的物体句柄传递给它)。通过使用定制化脚本和附加组件也可以进行控制。但是,不建议将它们用于控制,而应该在模拟未运行时用于处理功能。

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

  • 使用一些对象句柄作为参数启动控制器应用程序(bubbleRobClient_b0RemoteApi),BZ远程API的服务器功能是由对象b0RemoteApiServer提供的。

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

  • 检查CoppeliaSim的ROS Interface/ROS 2 Interface是否加载
  • 使用一些主题名称或对象句柄作为参数启动控制器应用程序(rosBubbleRob / ros2BubbleRob)

连接到场景controlledViaTcp.ttt的机器人的子脚本的主要任务如下:

  • 搜索一个空闲的套接字连接端口
  • 使用选择的连接端口作为参数启动控制器应用程序(bubbleRobServer)
  • 本地连接到控制器应用程序
  • 在每个模拟过程中,将传感器的值发送给控制器,并从控制器读取所需的电机值
  • 在每个模拟过程中,应用所需的电机值到机器人的关节

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值