如何将机器人语言解释器集成或嵌入CoppeliaSim中教程——金土石科技:机器人集成

本教程将尝试解释如何将机器人语言解释器集成或嵌入到 CoppeliaSim 中机器人集成 。如果您想将仿真器(例如特定的微控制器仿真器)集成到 CoppeliaSim 中,该过程非常相似。扩展CoppeliaSim 的功能大部分时间都需要开发插件。在继续本教程之前,请确保您已阅读 插件 教程 和 外部控制器 教程。

与本教程相关的 CoppeliaSim 场景文件位于 CoppeliaSim 的安装文件夹 scenes\robotLanguageControl.ttt 中机器人集成 。您可以在此处找到插件项目文件,在此处找到服务器应用程序项目文件。

首先机器人集成 ,让我们从加载相关的场景文件 scenes\robotLanguageControl.ttt 开始:

MTB 机器人是一个假想机器人(MTB 代表 B 型机器),它将使用假想机器人语言进行控制机器人集成

如前所述,使用的机器人语言是虚构的,而且非常简单机器人集成 。支持以下命令(每行一个命令,输入区分大小写):

任何不同于 “REM”、“SETLINVEL”、“SETROTVEL”、“MOVE”、“WAIT”、“SETBIT”、“CLEARBIT”、“IFBITGOTO”、“IFNBITGOTO” 和 “GOTO” 的单词都被视为标签机器人集成 。现在运行模拟。如果未找到相关插件,则会显示以下消息(消息的显示在附加到对象 MTB_Robot 和 MTB_Robot#0 的模拟脚本中处理):

如果找到相关的插件,那么 MTB 插件将启动一个服务器应用程序(即 mtbServer),它基本上代表了机器人语言解释器和控制器机器人集成 。不需要直接的服务器应用程序,mtbServer 功能也可以直接在 MTB 插件内部运行。在服务器应用程序中使用该功能的主要优点是:

 MTB 插件可以根据需要充当多种不同语言的中间语言,也可以作为尚未开发的语言的中间语言:MTB 插件将根据使用的机器人/语言简单地启动适当的服务器机器人集成

 如果机器人语言解释器/控制器崩溃,CoppeliaSim 不会崩溃,因为两者是不同且独立的进程机器人集成

目前机器人集成 ,MTB 服务器负责两个主要任务:

 从 MTB 插件接收程序代码(即缓冲区),编译它,并初始化机器人控制器机器人集成

 应用输入信号,逐步完成程序代码(步长可能因步骤而异),并返回输出信号和关节角度机器人集成

如果 MTB 服务器在编译程序代码期间检测到错误机器人集成 ,它将向插件返回一条错误消息,插件会将其交给调用的模拟脚本(即,在我们的例子中,附加到对 MTB_Robot 和 MTB_Robot#0. 的模拟脚本),该脚本将显示(例如):

如果编译成功,则 robot 开始执行各自的程序机器人集成 。模拟是最大速度模拟,但可以通过切换相关工具栏按钮切换到实时模拟:

通过多次按下相应的工具栏按钮机器人集成 ,可以进一步加快执行速度:

每个 MTB 机器人程序都可以通过其显示的自定义对话框(即自定义用户界面)随时单独暂停、停止或重新启动:

以上自定义 UI 是 MTB 机器人的用户界面,可以完全自定义机器人集成 。如果复制 MTB 机器人,则其自定义 UI 也将被复制。除了能够控制程序执行状态之外,自定义 UI 还显示当前程序行 (Command) 和 MTB 的当前关节值。用户还可以更改机器人的输入端口位,并读取机器人的输出端口位。输入和输出端口可以由机器人语言程序分别读取和写入。输入和输出端口也可以由外部设备(例如机器人的夹爪或吸盘)通过使用适当的函数调用进行写入和读取(详见下文)。

有两个模拟脚本附加到 MTB_Robot 和 MTB_Robot#0 对象机器人集成 。他们负责处理自定义对话框并与 MTB 插件通信。模拟脚本中的大多数代码也可以由插件处理。打开附加到两个 MTB 机器人之一的模拟脚本。在脚本顶部,您将看到机器人语言代码。

尝试修改 MTB 机器人的程序,让它执行不同的运动顺序机器人集成 。尝试一下。

MTB 机器人的处理方式如下:

 实际的机器人语言程序由 “mtbServer” 应用程序编译和执行机器人集成 。该应用程序还保存 MTB 机器人的状态变量。对于模拟场景中的每个 MTB 机器人,都会有一个由 simMTB 插件启动的 mtbServer 应用程序实例。

 simMTB 插件负责提供自定义脚本功能,也在需要时启动 mtbServer 应用,并通过 socket 通信与之通信机器人集成

 MTB_Robot 和 MTB_Robot#0 附带的模拟脚本会检查 simMTB 插件是否加载,并处理与插件的通信机器人集成

MTB 机器人及其简单的机器人语言是一个简单的原型,旨在演示如何将机器人语言解释器集成到 CoppeliaSim 中机器人集成 。为更复杂的机器人或机器人语言扩展当前功能非常容易。所需要的只是:

 构建机器人的模型机器人集成 。这包括导入 CAD 数据、添加关节等。此步骤完全可以在 CoppeliaSim 中完成。

 编写一个插件来原生处理新机器人,即通过解释自己的机器人语言来处理新机器人机器人集成 。任何能够访问 C-API 函数并能够包装在 dll 中的语言都可用于创建插件(但首选 c/c++)。robot 语言解释器可以直接嵌入到插件中,也可以作为外部应用程序 (mtbServer) 启动,就像本教程中所做的那样。

 编写一个小型模拟脚本,负责处理自定义对话框并将机器人与插件链接机器人集成 。此步骤完全可以在 CoppeliaSim 中完成。

现在让我们看看 MTB 的插件项目机器人集成 。将机器人语言解释器(或其他仿真器)嵌入到 CoppeliaSim 中有一个先决条件:

 机器人语言解释器应该能够并行执行多次机器人集成 。这意味着应该支持多个解释器实例,以支持多个相同的并行作机器人。这可以通过为每个新 robot 启动一个新的解释器来最容易地处理,就像本教程中所做的那样。

在编写任何插件时,请确保插件仅从主线程(或从 CoppeliaSim创建的线程)访问CoppeliaSim 的常规 API!该插件可以启动新线程,但在这种情况下,这些新线程不应用于访问 CoppeliaSim(但是,它们可用于与服务器应用程序通信、与某些硬件通信、执行后台计算等)机器人集成

现在,我们来看看附加到 MTB 机器人的模拟脚本机器人集成 。代码可能看起来很长或很复杂。但是,在模拟脚本中处理的大多数功能也可以直接在插件中处理,从而使模拟脚本更小/更干净。在模拟脚本中处理大多数功能的优点是无需重新编译插件即可执行修改!

以下是 MTB 机器人的模拟脚本主要功能:

 检查插件是否已加载机器人集成 。否则,将输出错误消息。

 与插件通信机器人集成 。这意味着信息是通过自定义脚本函数发送到 MTB 插件和从 MTB 插件接收的。

 将新计算的关节值应用于 MTB 机器人模型机器人集成 。这也可以在 MTB 的插件中处理。

 对自定义对话框上的事件做出反应,例如按钮按下机器人集成

 更新自定义对话框的状态机器人集成

以下 3 个自定义脚本函数是主要感兴趣的(其机器人集成 他函数由插件导出):

simMTB.startServer:在指定端口上启动服务器应用程序(例如 mtbServer),连接到它,并向其发送机器人语言代码、初始线性/角度关节位置和初始速度机器人集成 。作为回报,该函数返回一个服务器句柄(如果成功)和一条消息(通常是编译错误消息)。

 simMTB.step:使用指定的 timeStep 单步执行机器人语言程序,并返回结果值和消息(通常是当前正在执行的代码)机器人集成

 simMTB.getJoints:检索当前的线性/角度关节位置机器人集成 。调用 simMTB.step 时,线性/角度关节位置会自动更新。

您还可以想象稍微修改 step 函数,并添加一个额外的函数,以便能够处理由机器人语言程序执行触发的中间事件机器人集成 。在这种情况下,每个模拟步骤都必须执行以下脚本代码(在模拟脚本中):

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://www.abbrobotzxf.com/post/260.html