设计具有可重复使用技能的自主系统的制作方法

文档序号:20768977发布日期:2020-05-15 19:23阅读:157来源:国知局
设计具有可重复使用技能的自主系统的制作方法

本发明总体上涉及用于设计具有可重复使用技能的自主系统的方法、系统和装置。本文描述的技术可以例如应用于各种集成产品设计、设计和制造工具以及其他产品生命周期管理和机器编程应用。



背景技术:

传统程序使用手工、低保真的方式表示在它们在其中运行的环境。程序员完全负责拟定表示设备的世界和内部所有使设备运行所需的状态的数据结构。他们还负责为应用程序详细执行的每个动作和条件测试编写代码。因此,要尽可能少地编写世界表示和程序代码,都是因为时间很宝贵,而且为了减少需要测试的代码的量。这防止算法以一般的方式读取世界状态,并且通常阻碍创建自主系统。

典型的编程方法可以是将执行器和传感器表示为数值列表。通过从表中读取值并写出需要更改的值,可以将这些值编程为随时间变化。随时间变化的值变成为设备的程序。更高级的功能将使用传感器的数值来基于输入的值挑选待应用的值的不同集合。例如,选择开关可使机器在打开时使用一个值表,而在开关关闭时使用另一个表。为生成时间同步值的表,程序员可以手动移动设备,将设备置于不同的姿势并记录关节位置。记录的位置存储为表的值,然后回放以使设备在运行时以类似的方式移动。

关注输入和输出值(i/o)在许多自动化编程语言中很常见。i/o值本身不会揭示设备所做的任何事情的情境或目的。对于简单的类似反射的行为,这是足够的,但是它不允许设备基于更复杂的需求采取行动。自主系统需要能够推理其自身状态以及其环境状态,以便能够计划其活动并相应地采取行动。因此,需要考虑内部表示形式,诸如环境中的影响自动化进程的设备和对象模型。在传统的编程环境中,程序员将为每个问题手写自定义解决方案。根据开发人员的想法,数据被表示为数字和字符值的未关联分组。当使用库(诸如计划系统)时,每个库将具有其自己的表示其处理的数据的方法。开发人员必须为库中的每种算法手动转换应用的自定义数据结构中的数据,并将库的数据格式转换回自定义数据结构以解释结果。



技术实现要素:

本发明的实施方式通过提供与设计具有可重复使用技能的自主系统有关的方法、系统和装置,解决并克服了上述缺点和缺陷中的一个或多个。将本文描述的技术与常规建模系统的技术区别的主要因素是结合使用显式物理建模和多功能标记以及常规函数方法来实现自动化编程。物理建模和标记是编程语言的一部分,并且直接作用于自动化行为如何工作的语义。

根据一些实施方式,设计具有可重复使用技能的自主系统的计算机实现的方法包括显示模拟物理环境的图形用户界面。图形用户界面描绘与一个或多个物理对象对应的一个或多个模拟对象。基于用户经由图形用户界面提供的指令,在模拟对象上创建图形标记。确定每个图形标记相对于模拟对象的位置和取向。创建技能函数,该技能函数包括用于基于每个图形标记的位置和取向使用可控物理设备(例如,机器人手臂)与物理对象交互的功能描述。创建可运行以执行技能函数的可执行代码,并将其用于驱动可控物理设备。

在一些实施方式中,前述方法还包括生成多个过程对象,该多个过程对象包括(i)与物理对象对应的过程对象;(ii)与可控物理设备对应的过程对象;(iii)与图形标记对应的过程对象;以及(iv)与技能函相对应的过程对象。在一个实施方式中,过程对象用作多个运行时对象的原型,并且可执行代码从运行时对象得出。在另一个实施方式中,对应于可控物理设备的过程对象包括设备对象和以所有者部分层次组织的多个子对象。可执行代码因此可以遍历所有者部分层次以驱动可控物理设备。在其他实施方式中,使用对应于运动学的功能的连接来链接设备对象和多个子对象。可执行代码因此可以使用该连接来驱动可控物理设备。在其他实施方式中,过程对象基于物理附接以附接层次结构来组织。可执行代码可以遍历附件层次以驱动可控物理设备。

根据本发明的另一方面,设计具有可重复使用的技能的自主系统的第二计算机实现的方法包括识别放置在仿真环境中的模拟对象上的图形标记。每个模拟对象对应于物理环境中的物理对象。基于在仿真环境内的图形标记的位置,确定物理环境中的每个图形标记的位置信息。使用多个技能函数来生成用于控制物理设备的可执行代码。每个技能函数基于每个图形标记的位置提供在物理环境中操作的物理设备的功能描述。另外,可执行代码可以用于驱动物理设备。

上述第二种方法可用于以多种方式与物理环境交互。例如,在前述第二方法的一些实施方式中,来自图形标记的至少一部分的位置信息用于将机器人手臂校准适于物理环境。在其他实施方式中,图形标记的至少一部分包括触摸标记,触摸标记指示在执行一个或多个技能函数期间物理设备应在何处触摸特定物理对象。在其他实施方式中,至少一个物理对象对应于把手,并且图形标记中的至少一个对应于在执行一个或多个技能函数期间使用物理设备驱动把手的位置。

在前述方法中,各种图形组件可用于表示标记。例如,在一个实施方式中,图形标记中的至少一个包括指示在执行一个或多个技能函数期间物理设备的行进方向的箭头。在另一实施方式中,图形标记中的至少一个包括圆圈,该圆圈指示在执行一个或多个技能函数期间移动之后物理设备的目的地。

在其他实施方式中,设计具有可重复使用的技能的自主系统的计算机实现的方法包括将技能函数作为设备服务的一部分激活。技能函数包括待在物理环境中的物理对象上执行的一个或多个功能步骤。结构信息收集自物理环境,用于识别物理对象。从预先生成的标记的数据库中检索与物理对象对应的标记。由此,物理设备被用于使用这些标记在物理对象上执行功能步骤。

根据下面参照附图进行的说明性实施方式的详细描述,本发明的其他特征和优点将变得显而易见。

附图说明

当结合附图阅读时,根据以下详细描述可以最好地理解本发明的前述和其他方面。为说明本发明,在附图中示出了当前优选的示例性实施方式,然而,应当理解,本发明不限于所公开的特定手段。附图中包括以下附图:

图1示出使用高级面向目标的语言来指定应用功能的示例;

图2a示出如可在一些实施方式中实现的示例机器维修示例;

图2b示出通过触摸传送带来校准工件位置的示例;

图2c提供图2b所示的示例的附加视图;

图3提供根据一些实施方式的用于校准工件位置的示例功能描述;

图4示出可如何使用技能标记来引导触摸操作;

图5示出世界模型对象和类的示例实现层次;

图6示出可以在一些实施方式中使用的构件类库的内容;

图7提供可以在一些实施方式中使用的wclass和相关对象的图示;

图8示出如可在一些实施方式中使用的保存特定世界模型对象的原型数据的witem;

图9示出如可在一些实施方式中使用的定义对象的库实现的接口;

图10提供根据一些实施方式的对象如何在世界模型中产生和运行的总结;

图11示出类似机器人的设备的部分-所有者层次;

图12示出运动学关节和控制器如何定义其自己的层次;

图13提供用于可移动机器人平台的示例附件层次;

图14示出如何使用附接向其他构件添加标记和技能的示例;

图15示出可如何在本发明的一些实施方式中执行轨迹连接建模;

图16示出根据一些实施方式的用于基本移动主体和表面建模的类;

图17示出对象的两种多重表面表示:一种用于显示,另一种用于碰撞;

图18示出如可在一些实施方式中使用的在原型中支持的运动学关节和修饰符的子集;

图19示出如可在一些实施方式中使用的用于控制和进一步约束关节的类;

图20提供简单技能函数的示例;

图21示出技能函数类的子集;

图22示出可用于技能函数中的计算的部分表达语言;

图23提供根据一些实施方式的如何由应用工程师创建门把手标记的示例;

图24示出根据一些实施方式的门把手标记的可视化;

图25提供根据一些实施方式的用于技能标记的类的部分列表;以及

图26提供根据一些实施方式的示例计算系统。

具体实施方式

以下公开内容根据针对与设计具有可重复使用技能的自主系统有关的方法、系统和装置的几个实施方式描述本发明。

作为一般规则,更容易知道所期望的内容,而不太容易知道如何实现该目标。传统的编程语言要求程序员使用术语来描述算法,这些术语从根本上比人们试图解决的问题简单得多。例如,在需要使用“for”语句表达迭代循环与查找仓库中所有盒子并堆放它们之间没有明显的关系。for循环是低级的数学概念;而获取盒子是高级的人为概念。对于使用技能概念的编程,从图形编辑的角度出发,并以此为基础。程序员通常知道他们想要设备做什么以及应该如何完成该工作的特征,但是不太可能知道如何完成任务或知道各种实现方式的选择将如何相互影响。因此,程序员的大部分任务是选择和安排应用程序的元素,其方式与在模拟工具中执行的方式几乎相同。

图1示出使用高级的面向目标的语言指定应用功能的示例。在此示例中,程序员可希望拾取一组对象并将它们分拣到箱中。用于此应用的“程序”将包括机器人、相机和任何其他主动设备。另外,它将包含被动对象,例如工件、夹具和容器。此外,会希望如图所示一般地指定活动。将尽可能地接近只是“拾取物品”和“将物品放在这里”。在这种情况下,大多数实际编程将确定待影响对象的正确选择。

程序员将设备的动作指定为“技能”。技能有点像函数;然而,技能既有功能构件,也有结构构件。可以针对更高级的抽象行为得出技能,这些行为集中于如何通过编程的物理设备修改环境。可以使用本文描述的技术实现的技能的示例包括开门的技能、拾起零件的技能或分拣水果的技能。通过在编程环境中将技能作为函数激活来指定一项技能。例如,这可以通过将技能作为设备服务的一部分调用来执行。一旦激活,该技能就会从物理环境中读取结构信息,以确定其操作。例如,它将搜索待拾取的物理对象,并在该对象上使用“拾起”标记来确定夹持和抓取方向与压力。放置在世界的语境对象上的图形标记搜索关键信息,并生成设备确定其实际行为所需的路径和其他数据。

对于图形标记,通常的情况是使用某种标记以图形方式显示特定功能命令。如果系统提供了操纵标记的能力,则这将具有更改命令的参数化的效果。使用本文描述的技术,标记是与其功能用途无关的对象。取决于应用的当前状态,给定的标记及其附接的对象可以被用于许多不同的功能。对于一种功能,门把手标记可被用于打开门,对于另一种功能则为关闭门。它也可以被用于测量门打开时占用的空间。触摸标记可以由开发人员独立创建,并且在这种情况下,用于表示触摸传送带的位置。另一个功能也可以使用相同的标记来读取校准值,诸如查找放置工件的对象表示的位置。给定的功能还可以取决于语境使用不同的标记集合。可创建不同的标记集合来触摸并且校准适于不同的对象。例如,设备可触摸激光切割机以校准其位置。在这种情况下,将相同的功能应用于不同的标记以实现不同的效果。

图2a至图2c示出根据一些实施方式的使用技能来实现机器维修应用的示例。图2a所示的机器人205将从传送带拾起工件210并将其放置到激光切割机215中以进行处理。为从图2b所示的传送带220拾起工件,机器人205必须轻轻地触摸传送带220以校准其相对于工件的位置。图2c示出从机器人205的角度看去的传送带220的视图。在该示例中,机器人205触摸三个触摸点225a、225b、225c。这样的采样足以确定平行于地面的工件的2d取向和位置。稍后可以检索三个触摸点225a、225b、225c,以通过代理服务器计算被触摸的条杆的确切位置和工件的位置。

图3示出可以在本发明的一些实施方式中实现的用于校准工件位置的技能函数的描述。在此,技能由机器人设备305执行。技能函数描述参考围绕设备的物理空间中的标记。在此有四个标记310、320、330和340。标记310表示传送带,而技能标记320、330和340对应于传送带上的触摸点。使用传送带标记310,执行计划的移动到点的操作315,以将机器人移动到适当位置。为了执行触摸操作,机器人必须将端部受动器放置在表面附近的位置,然后朝该表面缓慢移动,直到实现触摸。这由“扫动以触摸”动作325、335和345示出。

图4示出技能标记在传送带的视觉表示上的放置。该放置补充了图3中所示的技能的功能描述。程序员将技能标记放置到设备物理语境的表示中。位置和取向以及其他因素被读取到技能函数中,并确定函数如何进行以驱动设备。标记包括计算出的特性,诸如表面的位置、运动学关节以及其他因在周围语境中搜索对象而产生的因素。技能函数可以利用特定的标记来生成动作,或者可以基于自身的计算来确定待应用的标记。

实现用于自主自动化的技能为程序员提供了许多选择。以下章节详细介绍了对象系统以及可以在系统内操作的对象种类的示例实现方式。许多低级特征可以使用不同的形式实现,但可以保持所描述库的整体功能。

在一些实施方式中,使用语言独立的元模型来实现自主自动化的技能。技能、构件和所有其他特征的基础是世界模型,该世界模型包含从类得出的对象,正如在面向对象模型中一样。世界模型形成了实现所有处理对象的基础,因为它们以控制器提供的任何语言和操作系统进行编码。世界模型旨在独立于语言;因此,期望可以在多种编程环境中根据例如linux上的c++到可编程逻辑控制器(plc)上的继电器梯形逻辑(rll)创建、检查、修改和删除世界对象。另外,还可以在任意环境中定义新类;但是,实际上,某些语言可过于特质和具有特殊用途(例如sql)而无法实现。

世界模型被实现为定义世界模型类的库的层次,过程对象从世界模型类中得出并且在图5中示出。世界模型从通用库(在图5中标记为“通用类定义”)开始,通用库定义了在给定环境中交互的所有基本操作。通用库还定义了从中得出其他类的所有基类。除了基本定义,还有一组动态加载的库,这些库由机器制造商以及实现特殊算法(诸如见于技能中的算法)的设计人员创建。这些库通常被称为构件类库,但是它们不仅用于定义物理硬件组件。构件库是机器制造商和算法设计人员实现其特定领域知识的地方。例如,在这里特定机器人的实现将驻留在层次内。构件库也是定制的主要元素。不同的用户可以取决于其应用的域和情境安装不同的组件库。

继续参考图5,应用本身定义在堆栈的顶部。这些是从构件库中定义的类实例化的数据对象。所有对象都被视为应用的“代码”的一部分,并且包含表示物理和逻辑元素的对象。这些对象表示机器、传感器、执行器、标记和工件,以及技能、电路和服务。过程对象由应用工程师定义,应用工程师可以使用工程工具作为实例化、可视化和构造这些对象的高级方法。然而,不需要使用专门的设计工具。同样有可能通过诸如在可执行应用中写出代码来实例化过程对象,该可执行应用手动创建对象并将对象的参数设置为正确的配置。此方法特别有用,因为可以配置大量对象,这些对象的值可以通过算法确定。

在某种意义上,过程对象可以“运行”,即它具有来自其构件库的库代码,该库代码可以运行并使用过程对象的运行时状态来确定其实际做什么。应用的过程对象使用相同的对象和构件库的集合在控制器的运行时和设计工具的模拟器中运行。然而,用于运行时的构件库与模拟器中的构件库不同,因为它们将不同地实现其机器操作。在运行时,构件库连接并控制实际机器。在模拟器中,构件库创建模拟对象并控制模拟的状态。

图6示出根据一些实施方式的构件类库的结构。库内部是一个或多个构件定义的集合。注意,“构件”不必是机器,例如,该构件可以另选地为技能。在构件内,类定义确定此构件类型的对象将包含哪些属性。该定义还包含构件的实现方式。构件库将具有适合其语境的实现方式。对于具有模拟的高级工程系统,构件包括定义构件导入的3d模型的资产导入模块、将模拟对象创建为子对象以进行聚合的聚合创建模块、提供特殊编辑功能例如调整把手大小的编辑功能模块以及定义模拟行为的模拟行为模块。在一些实施方式中(包括图5所示的一个实施方式),自定义接口模块定义了到相关功能(例如,相机查看器)的接口。对于运行时,构件包括创建i/o(诸如到物理机的网络连接)的资源连接模块、定义执行行为以控制机器状态的执行行为模块以及在该示例中的定义其他自定义hmi可视化的自定义人机界面(hmi)模块。

作为原型,编写c++库来定义和实现世界模型类、类型和实例的元模型。元模型在本文中将作为一种类似于c++的伪代码存在。在常规语义的情况下,方法用函数调用括号“()”表示,数组类型用方括号“[]”示出,以及指针用星号或和号“*”或“&”表示。基本类定义在图7中示出并被称为wclass。它示出对象将包括属性值(名称、值对)的列表,如在许多对象系统中所见。对于定义类型而不是值的类,列表是具有名称、类型对的列表。该类支持单继承,如m_pinherits成员所示。特别重要的是,允许属性值引用另一个对象。这是允许对象结构化的关键原则,如下一章节所示。

图8所示的witem是保存特定世界模型对象的原型数据。经由实例方法从类中实例化物品,并使用启动应用的初始数据填充其属性。witem不是用于表示运行对象的最终实例。它是通过设计过程对象中的一个而产生的对象。其值被用于表示在运行时不会更改的静态结构和属性值,以及在运行时会更改的属性的初始值。

witem主要是数据对象,将运行事物的实际代码作为接口进行管理,接口的实现方式填充构件库。在图9中示出了三个主要接口。将接口作为实现语言中的类(如c++类)进行管理。开发人员可以将所需的接口作为子类并进行自定义实现。在这种情况下,开发人员将是机器制造商或高级算法设计人员。运行时对象和物品代码在内部成为世界模型对象的“真实”实现。通常,运行时对象通过指向运行时对象实现的指针相互引用。这就是为什么witem对象通常不需要显式方法的原因,此类调用在运行时对象级别进行处理。

在创建、更新(属性更改)和销毁witem实例时,将调用iwitemexec方法。这些方法用于设置实例的内容,诸如填充所需的子结构例如模拟对象。iwrunfactory和iwrunobj用于创建世界模型对象的运行时版本。由于witem版本是静态原型,因此iwrunobj或仅运行时对象是为对象执行实际运行时工作的实现。在这种情况下,运行时是指无论对象在模拟器中还是在控制器运行时中正在运行的任何情况。运行时对象将是唯一的,并且对于每个要运行的真实对象都具有单独的状态。例如,视觉系统可以“看到”需要拾起的一组工件。应用中的工件实例是witem。视觉系统看到的每个工件为iwrunobj,每个工件有一个。

图10示出根据一些实施方式的世界模型的基本部分以及它们如何一起工作。机器制造商或高级算法设计人员在构件类库中编写代码,这些库定义了应用工程师可以生成的世界模型对象的种类。库定义了对象本身的内容以及实现对象功能的代码。应用工程师取决于应用功能选择使用哪种对象来构建单元,对象包括设备、工件、技能等。这些形成过程对象,并且可以在模拟中运行,也可以转移到控制器上运行。运行应用创建运行时对象,这些运行时对象将过程对象用作原型,并实例化类库中定义的接口。运行时对象建立到真实机器的连接并管理应用的运行时数据。

过程对象的结构通过对象包含彼此引用的能力而实现。给定一个对象作为起点,也许有对机器人对象的引用,则可以跟随与语义相关的其他对象的连接。因为存在着机器人,可转到附接到该机器人的夹持器,或者深入到机器人的构造中以找出其轴线位置。进一步深入机器人可发现其刚体结构或移动的碰撞表面。

尽管从技术上讲,构件库编写者可以引入所期望的任何类型的引用结构,但已为用例定义的对象的系统支持四种默认连接。这些可以直接在设计工具的图形编辑器中得到支持,并允许应用工程师以直接的方式创建和检查这些类型的连接。

提供通用的分组机制是常见且有用的特征。在对象模型中,这在本文中称为“所有者部分层次”,并且基本理念是对象可以是多个子对象的所有者,这些子对象本身可以是其他子对象的所有者。在这种情况下,对象不会重复;对象可以是仅一个所有者的子对象。可以成为所有者的对象将提供“部分”属性来存储子对象的列表,并且每个可以成为子对象的对象都将具有“所有者”属性作为后指针。

所有者-部分分组最常用于将设备对象与子对象聚合在一起,这些子对象提供有关其功能的更多特定信息。例如,将创建机器人作为通用分组类的“组装件”。机器人的子部分可以是表示运动部分的“刚体”的实例,以及表示运动的旋转点的“铰链”的实例。机器人的刚体中的一个可包含“胶囊形状”来表示其碰撞表面,以及“模型”来表示机器人该部分的3d图形外观。在图11中示出用于类似机器人的设备的示例部分-所有者层次。

对于物理定位,所有者-部分可用于提供位置和取向值的场景图样式堆栈。组装件内的所有对象相对于组装件定位。刚体内的所有对象相对于刚体定位。这有助于简化定位数据,以便将对象轻松复制并转换到不同位置。

部分层次还可用于存储技能中的子技能;然而,在这种情况下,允许在多种语境中使用和重复使用技能。因此,所有者-部分关系的唯一性被打破。标记对象是技能的成员,也是物理空间的所有者-部分层次的成员。给定的标记在物理空间中是唯一的,但可以在技能中多次显示。

聚合仅是一种可用于存在于物理空间中的对象的组织的方法。需要指定的另一个主要语义是物理连接,或者被称为运动学。许多系统错误地将场景图关系与运动学关系混为一谈。然而,这仅在移动的实体之间的连接不形成循环的情况下有效。由于我们的系统允许任意引用其他过程对象,因此创建适当的运动学图不是问题。

图12示出运动学关节和控制器如何定义其自己的层次的示例,如可以在一些实施方式中实现的。在该示例中,物理对象根据其运动学功能布置和连接。用于设置旋转关节的角度位置的控制器在顶部处。旋转关节处于中间。最后,表示设备的零件的物理运动的主体在底部处。

注意,在不同的结构中同时使用相同的对象。对象类仅定义不同的属性来保存不同结构的引用。这允许应用工程师混合和匹配来自相同对象的不同结构中的搜索。例如,从机器人的端部受动器上的凸形对象开始,可追溯到刚体3以找到包含该表面的移动部分。之后,可以找到铰链b(通过向后指针或通过搜索机器人组装件中有限的一组零件)。可以以相同的方式从铰链b找到位置控制器b。由此,可以控制端部受动器的关节的位置。通过更多的搜索,可以找到区域中的所有碰撞形状或所有运动学关节及其相对取向。

通常,所有者-部分和物理连接由构件类库编写器创建。例如,机器制造商将在初始化机器人对象时填充其内容。应用工程师还将希望能够将相关的零件彼此附接。常见的示例是将夹持器附接到机器人的端部凸缘。在图13中,示出了一组彼此附接的设备。在这种情况下,附接与物理接触直接相关,例如,机器人手臂在现实生活中物理地触摸移动平台。接触的类型可以是重要的,也可以是不重要的。例如,对于机器人和夹持器,它们用螺栓固定在一起,使得当机器人手臂移动时,夹持器物理地抬起并移动。然而,移动平台和地面未用螺栓固定在一起。在这种情况下,附接表示更多的编辑便利性。例如,当用户移动托盘时,如果还必须移动保持在托盘中的每个工件,这会变得麻烦。因此,当用户将机器人移动到编辑器中的不同位置时,所有附接的物品都将随之移动。

附接比喻被用于表示字面的接触,但也用于表示语境上的附接,诸如放置标记或添加技能。图14示出可用于将标记和技能添加到其他组件的附接,如可在一些实施方式中使用的。在该示例中,标记附接在激光切割机门的把手上。在这种情况下,标记由图形点和线以及代表门铰链的白色箭头表示。在该模型中,标记构件以与夹持器附接到机器人手臂的相同方式附接到激光切割机构件。同样可以应用于其他非物理实体,例如技能。

图15示出可以在一些实施方式中利用的轨迹连接图。轨迹连接建模函数类似于附接连接技术。主要区别在于,尽管附接图形成了层次树,但轨迹连接是双向的,并且对于两个连接的对象都是相等的。轨迹形成一般图形而不是树。这些轨迹非常适合于连接起实际的轨迹,例如图15中标记为“a”的图像中所示的传送带线。它们还可以很好地用于管道和流网络,如图15中标为“b”的图像所示。因此,轨迹连接可以应用于技能,并且各种标记配置可以从这种连接方式中受益。

控制和操纵物理对象是自主系统的关键因素。因此,出于语境、推理和驱动的目的,需要将自主设备的世界的物理方面纳入其知识之中。在前面的章节中已经暗示了一些物理对象的定义。出于模拟和推理的目的,物理学主要限于刚体运动语义以及碰撞表面检测。其他种类的物理表示将不难添加。如上所述,可以通过所有者-部分聚合将物理属性合并到构件中。通常可以将更多种类的对象添加到集合体中。在先前的项目中,流体流动物理学也已经被并入,并且直接与构件集成并结合刚体物理学工作。

尽管并非一定需要模拟物理对象才能生成可运行的应用,但是这些对象对于模拟特别方便。为了使其工作,将模拟引擎集成到工程工具链中。在该项目中,模拟引擎是工程工具本身的直接组成部分。将过程对象中的物理对象转换为物理引擎中的对象通常接近一对一。在一些实施方式中,运行时对象直接支持物理引擎对象的创建和管理。

物理实体主要通过单独移动的各个零件分解。与产品生命周期管理(plm)数据不同(其中根据零件是否单独购买来分离零件),将构件中永不分离的零件视为同一主体。柔性体也是可行的,但是对于当前的原型,仅考虑刚体的运动。同样,单独移动的零件例如夹持器中的各个关节必须分成单独的主体。将plm计算机辅助制图(cad)数据转换为构件时,通常的首要任务之一是将图形实体连接并分离为需要移动的单独零件。在cad中,通常将带有运动件的零件冻结在单个图形模型中。夹持器可以是单个3d模型,不具有使其手指移动的内部结构。在另一个cad模型中,零件可以按其类型分组为组装件。一个组装件可专用于螺母和螺栓,而另一个组装件可使柜体保持防水(flashing)。为使构件生成器的任务进一步复杂化,通常会合并这些问题。柜的组装件可以是单个3d模型,其中柜门与门框融合在一起。

在设计工具原型中,基体类型分为刚体和零件。图16示出如可以在本发明的一些实施方式中使用的用于基本移动物体和表面建模的类。刚体是移动的东西,而零件是具有形状的东西。零件进一步分为用户可以可视化的模型和表示对象的碰撞表面的形状。通常,形状和3d模型不是一对一地表示的。构件的复杂形状可分解为较简单类型的形状的集合,例如盒子和凸多面体。这允许模拟具有待有效执行的碰撞响应,并且还有助于创建边界表面,以进行规划和碰撞规避。在图17中示出将复杂形状例如机器人分成碰撞形状的方式。更具体地,图17示出对象的多种表面表示:一种用于显示,另一种用于碰撞。尽管当并排查看结果时差异似乎很明显,但实际上,在模拟中运行时,碰撞形状充当复杂的3d网格形状的完美替代品。

如前所述,设计原型不会将运动学与场景图语义混淆。尽管场景图可以很好地实现电影角色的动画姿势,但它缺乏表示运动学关系所需的灵活性。图18示出可在用于某些实施方式的原型中得到支持的运动学关节和修饰符的子集。在该示例中,列出了基本的关节类。涵盖了常见的关节,例如旋转运动和线性运动。注意,此图中没有重复经继承的类item。为了查看其定义,请回到图16。为进一步提高灵活性,将关节功能例如限位器和弹簧性能分离为其自己的对象。这样,不使用其他功能属性的关节就不会充满未使用的属性。

该设计系统中的关节在语义上如何连接至刚体是不统一的。换句话说,附接属性与基本属性不同。将主体设置为附接属性时,它将受到关节的约束。如果未设置基体(即,为空),则关节会将附接主体约束到世界框架。当附接为空并将基体设置为刚体时,情况并非如此。相反,基体可以自由移动,好像它根本没有附接到关节一样。相反,关节的参照系随基体一起移动。可以在运行时更改附接属性,以将不同的主体连接到关节。因此,例如,用户可以将固定关节放置在真空夹持器的端部。固定关节的基本属性由夹持器的主体设置。当夹持器在待拾起的零件上方移动时,固定关节的附接属性将被设置为零件对象。当夹持器移动时,固定关节被激活并拾起零件。当清除固定关节的附接属性(设置为空)后,零件掉落。

对于驱动器,诸如机器人的轴,必须能够控制速度和位置。为表示关节运动,原型提供了速度和位置控制器。在图19中示出了一组用于控制和进一步约束关节的基本类。对于某些基于模型的设计方法,表示这些类型的控制器是唯一要建模的特性。在这种情况下,假定控制器可以工作,因为重点在于更抽象的关系,例如计划和移动。因为不是所有关节都通电,所以控制对象与运动学关节保持分离。

此时,已经奠定了可以从中得出表示程序语义的对象的基础。如从先前的章节可看出的,可重复使用的技能的功能方面并不是唯一的原则。技能概念在功能和结构上均相同。在不知道问题的结构的情况下,函数没有意义或语境。技能表示自主系统更改其环境的方式。利用上述所有对象,系统可以描述环境,并可以推断其行为将如何影响更改。

技能本身就是部分功能和部分结构。技能的功能方面用于控制排序和计时以及保留设备和控制活动。技能的结构方面由环境语境内的标记以及技能将影响的各种设备和工件所表示。标记由应用工程师创建和应用,并且是设计过程的关键方面。标记用于创建程序状态并指导技能函数的动作。

技能和标记由世界模型定义,就像系统中的任何其他对象一样。就像机器制造商可以创建表示特定机器人的构件一样,算法设计人员可以使构件表示“开门”技能。技能的继承结构与机器人不同,但是自定义实现的方法相同。因此,就像刚体类没有描述机器制造商如何制造传送带的方法一样,在此描述的对象类是出于通用目的,并不涵盖所有可能的技能。

技能的功能方面像命令性语言(诸如流程图或顺序功能图(sfc))一样有效地工作。操作功能导致环境发生更改,而计算功能则计算值并将结果分配给本地参数。图20示出可以呈现技能函数的方式。在此示例中,示出了顺序技能块。块的子技能呈现为带有图片的框,该函数的计算部分显示为赋值语句“机器人:=self.attach”。在这三个子技能中,两个子技能是基本技能(对门把手标记的引用和对“机器人”参数的引用),一个子技能是构件库定义的技能(“开门”技能)。

图21示出技能函数类的子集。示例技能本身以及三个子技能都被视为运算函数。这意味着它们运行时通常会发生某些情况。在大多数情况下,环境中对象的属性将被更改,从而导致对象表现出其行为。例如,机器人可开始移动,夹持器可夹持某物,或者传送带可开始运行。等待技能导致怠速行为。对象和参数这两个技能没有它们自己的外部行为,但是用于提供其他技能运行所需的对象和值。

技能函数的计算部分显示为图片框上方的文本。这些元素在内部称为表达式并且表示为世界模型过程对象,与设计工具的应用的所有其他方面一样。对于表达式,对象链接在一起以形成语法树。以递归方式打印出表达式获得如上方所示的字符串,而对字符串进行解析获得产生表达式对象的语法树的设计工具。图22示出部分backus-noir图,以指示可期望该语言能够处理的表达式类型。为评估表达式,调用语法树运行时对象的根目录上的方法(在这种情况下,该方法始终是参数分配)。这以递归方式调用表达式的其余部分,直到达到结果为止。

尽管使用表达式进行技能计算旨在单纯是功能性的(也就是说,它不会对应用的其余部分产生副作用),但用户可以使用抽象方法来调用执行所需功能的内部程序。期望开发人员将使用计算部分,就像使用标准编程来计算更复杂的表达式一样。一个示例是调出计划算法来计算运动的路径。使用这些表达式,可以计算几乎所有类型的数据,并在准备就绪时将数据应用于运算技能以使机器起作用。

用作技能一部分的标记不是空闲标记;它们是调查它们所附接的对象的结构的活跃的代码。标记使系统能够将新数据与特定于应用的构件相关联。标记运行代码的能力允许进行全面的状态测试和更新,而无需明确执行技能函数。该能力还使标记成为触发功能技能行为的极佳手段,类似于被传感器(诸如相机)激活。

可以以与构建技能的功能部分相同的方式来处理构建标记。对于在图14中所示的并且还在图23中所示的、但附接到不同种类的门的门把手标记,可以通过五个图形元素创建标记:两个点、一条线、一条弧线和一个箭头。标记代码具有与技能的功能部分相同的表达能力。运行标记代码的结果将在3d场景中产生图形对象,如图24所示。由此,应用设计人员可以计算出例如用于指示门的突出部分的图形标记的位置。将来,可考虑通过添加图形约束编辑功能来改进此过程。

门把手中的代码指代自身,以发现其与门把手形状的附接。上面描述的附接交互作用对此有所帮助。根据形状检索主体,并根据主体检索铰链,等等。从列表中选择用于从其他可能的关节中挑出铰链。剩下的代码是图形放置点的计算。

在图25中示出原型的标记类的部分集合。标记本质上是类似于物理构件的图形实体,因此它们是从作为主要分组对象的组装件类得出的。标记组添加了表达式和逻辑数据流链接的属性。修改器(mutator)类是特殊的组装件。在某些标记中,各种图形元素集是可选的。例如,在一些实施方式中,箭头指向物理设备应该从哪去向哪以及圆圈可以指出目的地。修改器的作用就像可以根据需要关闭和打开零件的一或零发射器。

在标记类的图形方面,具有基本形状,例如圆形、弧形和线形。还具有值缓存和标签传感器类。这些被用于存储值并将值传输到应用的不同部分。值缓存用于保存值。例如,当计算机数字控制(cnc)机器完成零件的铣削时,应用工程师可能希望将标记上的布尔值设置为真。另一方面,标签传感器可以找到存储在值缓存对象中的值。通过使用标签名称来标记缓存,具有相同名称的传感器将找到存储在该缓存中的值,并将其带到传感器所属的应用的部分。例如,标签传感器的一个很好的用途是标记容器。容器具有传感器,工件具有带有相同标签名称的值标记。当工件存储在容器中时,传感器读取其值并将该存储位置标记为已满。

标记对于制作具有发射(emitted)对象的应用也特别有用。例如,相机组件最好通过将其视为运行时对象的对象发射到世界模型中来实现。如果发射对象的原型具有附接的标记,则标记结构将与原型的其他元素一起被复制。这意味着进入标记的代码也将被复制并在创建实例时运行。其他技能可以搜索缓存的值或生成的标记的其他元素。通过使用这些数据,其他技能可以有效地“看到”相机识别的对象并根据它们的存在进行活动。

以上所示的类和对象的集合可以通过包含添加的构件库来扩展。开发人员可以添加新函数、新标记、新物理构件以及新物理模型。所有特性都适合通过附接层次在编程系统内搜索方法,并且通常能够从一个对象引用另一个对象。其他编程系统具有固定的基本对象和类型的集合。其他编程系统消除了对象引用(诸如指针),并且仅允许数据结构由普通值组成。

图26示出可以在其中实现本发明的实施方式的示例性计算环境2600。例如,计算环境2600可用于显示并允许用户与图中所示和以上讨论的各种仿真环境进行交互。计算环境2600可包括计算机系统2610,该计算机系统是可以在其上实现本发明的实施方式的计算系统的一个示例。计算机和计算环境(诸如计算机系统2610和计算环境2600)是本领域技术人员已知的,因此在此简要描述。

如图26所示,计算机系统2610可包括通信机制,诸如系统总线2621或用于在计算机系统2610内传送信息的其他通信机制。计算机系统2610还包括与系统总线2621联接的一个或多个处理器2620,用于处理信息。处理器2620可包括一个或多个中央处理单元(cpu)、图形处理单元(gpu)或本领域中已知的任何其他处理器。

计算机系统2610还包括联接到系统总线2621的系统存储器2630,用于存储将由处理器2620执行的信息和指令。在运行时期间,系统存储器2630的一部分可用于实现图1所示的存储介质105。系统存储器2630可包括易失性和/或非易失性存储器形式的计算机可读存储介质,诸如只读存储器(rom)2631和/或随机存取存储器(ram)2632。系统存储器ram2632可包括(一个或多个)其他动态存储设备(例如,动态ram、静态ram和同步dram)。系统存储器rom2631可包括(一个或多个)其他静态存储设备(例如,可编程rom、可擦除prom和电可擦除prom)。另外,系统存储器2630可用于在处理器2620执行指令期间存储临时变量或其他中间信息。可以将基本输入/输出系统(bios)2633存储在rom2631中,基本输入/输出系统包含有助于诸如在驱动期间在计算机系统2610内的元件之间转移信息的基本例程。ram2632可包含数据和/或程序模块,这些数据和/或程序模块可以被处理器2620立即访问和/或当前由该处理器操作。系统存储器2630可以另外地包括例如操作系统2634、应用程序2635、其他程序模块2636和程序数据2637。例如,图1中所示的优化模块115可以作为应用程序2635或由(一个或多个)处理器执行的其他程序模块2636中的一个包括在系统存储器2630中。

计算机系统2610还包括联接到系统总线2621的磁盘控制器2640,以控制一个或多个用于存储信息和指令的存储设备,诸如硬盘2641和可移动介质驱动器2642(例如,软盘驱动器、光盘驱动器、磁带驱动器和/或固态驱动器)。可以使用适当的设备接口(例如,小型计算机系统接口(scsi)、集成设备电子设备(ide)、通用串行总线(usb)或firewire)将存储设备添加到计算机系统2610。

计算机系统2610还可包括联接到系统总线2621的显示控制器2665,以控制显示器2666,诸如阴极射线管(crt)或液晶显示器(lcd),用于向计算机用户显示信息。该计算机系统包括用户输入接口2660和一个或多个输入设备,诸如键盘2662和点击设备2661,用于与计算机用户交互并将信息提供给处理器2620。点击设备2661可以是例如鼠标、轨迹球或指点杆,用于将方向信息和命令选择传送到处理器2620并控制显示器2666上的光标移动。显示器2666可提供触摸屏界面,该界面允许输入以补充或替换通信点击设备2661进行的方向信息和命令选择。

计算机系统2610可响应于处理器2620执行包含在存储器(诸如系统存储器2630)中的一个或多个指令的一个或多个序列,来执行本发明实施方式的处理步骤的一部分或全部。此类指令可从另一计算机可读介质(诸如硬盘2641或可移动媒体驱动器2642)读入系统存储器2630。硬盘2641可包含一个或多个本发明的实施方式使用的数据存储和数据文件。数据存储内容和数据文件可加密以提高安全性。处理器2620还可用于多处理布置中以执行系统存储器2630中包含的一个或多个指令序列。在另选实施方式中,可使用硬连线电路代替软件指令或与软件指令结合。因此,实施方式不限于硬件电路和软件的任何特定组合。

如上所述,计算机系统2610可包括至少一个计算机可读介质或存储器,用于保存根据本发明的实施方式编程的指令并且用于包含本文所述的数据结构、表、记录或其他数据。如本文所使用的术语“计算机可读介质”是指参与向处理器2620提供指令以供执行的任何介质。计算机可读介质可采用许多形式,包括但不限于非易失性介质、易失性介质和传输介质。非易失性介质的非限制性示例包括光盘、固态驱动器、磁盘和磁光盘,诸如硬盘2641或可移动介质驱动器2642。易失性介质的非限制性示例包括动态存储器,诸如系统存储器2630。传输介质的非限制性示例包括同轴电缆、铜线和光纤,包括构成系统总线2621的线。传输介质还可以采用声波或光波的形式,诸如那些在无线电波和红外数据通信期间生成的声波或光波。

计算环境2600还可包括计算机系统2610,该计算机系统使用到一个或多个远程计算机诸如远程计算设备2680的逻辑连接在网络环境中操作。远程计算设备2680可以是个人计算机(膝上型计算机或台式机)、移动设备、服务器、路由器、网络pc、对等设备或其他公共网络节点,并且通常包括以上相对于计算机系统2610所描述的许多或所有元素。当在网络环境中使用时,计算机系统2610可包括调制解调器2672,用于通过网络2671诸如因特网建立通信。调制解调器2672可经由用户网络接口2670或经由另一种适当的机制连接到系统总线2621。

网络2671可以是本领域中通常已知的任何网络或系统,包括互联网、内联网、局域网(lan)、广域网(wan)、城域网(man)、直接网络连接或一系列连接、蜂窝电话网络或能够促进计算机系统2610与其他计算机(例如,远程计算机2680)之间的通信的任何其他网络或介质。网络2671可以是有线的、无线的或其组合。可以使用以太网、通用串行总线(usb)、rj-11或本领域中通常已知的任何其他有线连接来实现有线连接。可以使用wi-fi、wimax和蓝牙、红外、蜂窝网络、卫星或本领域通常已知的任何其他无线连接方法来实现无线连接。另外,几个网络可以单独工作或彼此通信以促进网络2671中的通信。

可以用硬件和软件的任何组合来实现本公开的实施方式。另外,本公开的实施方式可以被包括在具有例如计算机可读的非暂时性介质的制品(例如,一个或多个计算机程序产品)中。介质在其中实施了例如用于提供和促进本公开的实施方式的机制的计算机可读程序代码。制品可以作为计算机系统的一部分包含在内或者可以单独出售。

尽管本文已经公开了各个方面和实施方式,但是其他方面和实施方式对于本领域技术人员将是显而易见的。本文所公开的各个方面和实施方式是出于说明的目的,而并非旨在进行限制,其中真实的范围和精神由所附权利要求书指示。

如本文中所使用的可执行应用包括代码或机器可读指令,用于响应于用户命令或输入调节处理器以实现预定功能,诸如例如操作系统、语境数据获取系统或其他信息处理系统的预定功能。可执行程序是一段代码或机器可读指令、子例程或代码的其他不同部分,或者是可执行应用的用于执行一个或多个特定过程一部分。这些过程可包括接收输入数据和/或参数;对接收到的输入数据执行操作和/或响应于接收到的输入参数执行函数;以及提供结果输出数据和/或参数。

如本文中所使用的图形用户界面(gui)包括由显示处理器生成的并且允许用户与处理器或其他设备的交互以及相关联的数据获取和处理功能的一个或多个显示图像。gui还包括可执行程序或可执行应用。可执行程序或可执行应用调节显示处理器,以生成表示gui显示图像的信号。这些信号被提供给显示设备,该显示设备显示图像以供用户查看。在可执行程序或可执行应用的控制下,处理器响应于从输入设备接收到的信号来操纵gui显示图像。以这种方式,用户可以使用输入设备与显示图像进行交互,从而使用户能够与处理器或其他设备进行交互。

本文的功能和处理步骤可以响应于用户命令自动或全部或部分地执行。自动执行的活动(包括步骤)响应于一个或多个可执行指令或设备操作自动地执行,而无需用户直接发起活动。

附图的系统和过程不是唯一的。可以根据本发明的原理导出其他系统、过程和菜单,以达到相同的目的。尽管已经参考特定实施方式描述了本发明,但是应当理解,本文示出和描述的实施方式和变型仅用于说明目的。在不脱离本发明的范围的情况下,本领域技术人员可以对当前设计进行修改。如本文所述,可以使用硬件组件、软件组件和/或其组合来实现各种系统、子系统、代理、管理器和过程。不应根据35u.s.c.112第六款的条款来解释本文中任何权利要求元素,除非使用短语“用于……的装置”明确叙述该元素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1