掌桥专利:专业的专利平台
掌桥专利
首页

通过自主机器支持任务的对象标记

文献发布时间:2023-06-19 11:35:49


通过自主机器支持任务的对象标记

技术领域

本申请涉及工程自主系统。尤其是,本申请涉及用于在自主系统中实现可重用技能的数据对象。

背景技术

具有最先进的工厂设计的工业化制造是基于相当静态的、不灵活的装配线。在全球化和越来越多的全球信息获取的推动下,消费者对更多定制产品的需求要求使用更便宜、更灵活的机械对生产过程进行快速和高度动态的重新配置。在一组静态设备之间具有固定的分组工业通信网络的概念不再适用。设备将与各种描述功能进行通信,描述功能更多地描述了生产的计划结果,而不是特定致动器和传感器的具体I/O数据值。

为了处理此类复杂数据,用于编程设备的方法同样必须改变。如今,机器编程的方式是以机器为中心的。如果机器人要向左移动,则会编写指令使其向左移动。为了组装甚至两个零件,往往需要大量的运动。为了组装许多零件,组装指令的数量变大并且难以管理。此外,很难发现并纠正错误。在很长的指令序列中,可能很难找到错过的运动。因此,固定命令的简单列表是不够的。标准编程技术没有考虑自动化设备对工件的影响,并且因此无法说明最终结果。当前,自主设备仅限于处理特定零件,其缺乏组装多个零件的可扩展性。由于当前的自动化程序是针对具有特定于机器的上下文的零件组装的,因此该程序不可扩展以允许其它机器参与组装而无需修改指令。

发明内容

被用于生产过程的自主系统包括至少一个设备,该至少一个设备被配置为根据生产过程的任务来操纵工件。该设备包括:控制器,其具有在其上存储可执行指令的存储器;以及处理器,其被配置为执行指令以执行以下步骤。自主系统的世界模型被生成为包括数据对象,其中一个或多个数据对象将生产过程中的相应物理对象表示为仿真中的虚拟表示。相应物理对象的类型可以包括工作空间、工作空间中的一个或多个工件以及设备。语义标记被附加到数据对象,使得语义标记中的每个语义标记都包括与技能相关的信息,该技能被定义为完成任务目标的抽象功能。将第一组语义标记设定为激活状态,以在物理对象当前可用于任务执行的条件下触发数据对象的适用技能。根据生产过程的任务,将第二组语义标记设定为数据对象当前不被操纵的停用状态。该设备被控制为执行由语义标记指导的任务,同时依赖于具有基于物理对象的类型、技能的类型和数据对象的配置的推理操作的预期功能。

附图说明

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

图1是根据本公开的实施例的机器维护系统的框图。

图2是根据本公开的实施例的使用可重用技能的自主系统的框图。

图3是根据本公开的实施例的机器人的图示,其识别高级面向对象语言以指定应用功能。

图4是示出根据本公开的实施例的应用编程中的抽象的层次图。

图5是根据本公开的实施例的机器维护用例的图示。

图6是图5中所示系统的分解图示,指示包括根据本公开的实施例的机器维护单元的各个对象。

图7是根据本公开的实施例的使用两个机器人抓具作为单元来执行任务的对象范围的图示。

图8是根据本公开的实施例的与其相关联的对象具有严格关系的单元的分层表示。

图9是根据本公开的实施例的使用共享对象的不同配置的多个单元的分层表示。

图10是根据本公开的实施例的功能块在输送机轨道系统中的使用的图示。

图11示出根据本公开的实施例的引用另一对象的技术的使用。

图12示出根据本公开的实施例的使用世界对象的代替来接收传递的技能引用。

图13是根据本公开的实施例的对象自引用用于应用技能的图示。

图14是根据本公开的实施例的机器维护应用的图示,其示出了过多数量的通用标签标记。

图15是图14的机器维护应用的图示,示出了根据本公开的实施例的表示技能的语义含义的更紧凑的标记。

图16是根据本公开的实施例的具有不同图形表示的不同类型的标记的图示。

图17是根据本公开的实施例的区域语义标记的图示。

图18是根据本公开的实施例的与用于组装任务的技能有关的语义标记的图示。

图19是可用于实现本公开的实施例的各方面的计算机系统的框图。

具体实施方式

许多因素正在改变工业开发用于生产商品的机械的方式。例如,工厂中使用的设备,诸如输送带系统和机器人技术,变得越来越灵活和智能。与设备以及在控制器之间进行通信的能力已经发展到更高级别的网络通信标准,并且不再局限于简单的数字输入/输出控制值。消费者的需求不断变化,鼓励生产商生产更多定制产品,同时保持低价位和相关费用。这些变化以及其它变化正在推动整个生产过程朝向自主和灵活的解决方案发展。因此,工程师如何开发此类系统的性质必须改变。

自主系统具有三个基本特性。首先,与传统设备相比,设备及其控制器对环境了解更多。先进的传感器以一种更为通用的方式检测对象的存在,允许设备获得传统生产设计中前所未有的知识。其次,使用基于待制造产品的更高层次的抽象来管理生产,而对用于执行过程操作的确切方法或甚至机械了解则更少。再次,系统应使用其知识来从意外情况中恢复。该系统应具有允许控制流处理中断和错误的算法,而无需工程师预期所有可能的故障情况。

已经进行了与本公开有关的研究以研究自主系统如何工作,并且原型被构建以示出可能的能力。鉴于工程师对自主系统的关注,执行该研究,就像工程师如何创建自主系统一样。解决方案是在工程工具和领域模型中为应用程序开发人员提供更高级别的抽象。为了设计应用程序上下文,公开了一种生成设备、材料和工作产品的“世界模型”的方法,该模型超出了机器的可控制I/O,并建立了机器操作的整个空间。为了向机器传达意图,“技能”被定义并呈现,以基于单元生产的工作产品的种类以及工作产品如何转换来表示单元的功能。最后,标记、搜索和推理的概念被技能用来使机器执行其职责。

将根据本公开的一些方法的示例应用于用例以示出其有效性。一种用例包括机器维护和包装。在机器维护期间,柔性设备被用于使另一台机器自动化,而这通常是人类操作员维护的。为了包装,可以将多个物品放在一起以分类到容器中。然后可以包装对象或以其它方式进一步处理对象。将示出具有可重用技能的工程使应用程序工程师的工作清晰有效。

首先,提供在整个说明书中使用的一些术语的定义。在整个本公开中使用术语“技能”。术语技能的含义可以与该术语在先前为术语技能赋予完全不同含义的其它上下文中的使用区别开。对于具有可重用技能的自主工程,该技能用于对机器进行编程,但它们本身不旨在用作编程语言。根据本公开的实施例,技能是编程,而计算机辅助绘图(CAD)是技术绘图。技能形成了机器可以做什么以及机器应该做什么的更高层次的抽象或表示。以这种方式,技能与通常描述功能语义的行为区别开。

为了本公开的目的,将根据以下它们的相关定义使用以下术语。

技能-技能定义了材料成为工作产品的转换。在目标是实现转换的意义上,技能是与机器无关的,并且实现目标的方法是可选的。

行为-行为是机器、工作产品和系统中的其它实体执行的活动。例如,机器人可以移动其关节。行为是特定于机器的并且可以被应用于多种任务。

在当今的自动化编程实践中,许多现有代码都使用表示行为的函数编写。也就是说,存在表示导致机器去影响某个运动或感测特定值的动作的一些I/O和功能块。自动化程序员通常负责手动编写代码,以描述如何将这些行为组合在一起以使设备完成有用的工作。根据本公开的方面的技能编程的示例可以执行CNC代码以铣削产品。CNC的执行具有适用于待操纵产品的语义含义。例如,这是在空间中移动切割工具的路径。相同的CNC代码可以在不同的机器配置上运行并实现类似的效果,因为语义不适用于机器的设置方式。可能拥有由龙门式机械设备或机器人臂式设备完成的相同CNC。

本文中提出了使用对象框架来设计技能,其中用户选择并配置表示在构建的自动化系统的不同方面的对象,并将它们组装在一起以使它们工作。该类型的架构使技能设计更像是挑选目标系统的各个部分,而不必编译和编写很长的编码指令序列。系统支持的大多数对象已经为工程师所熟悉。对象表示诸如机器人、抓具和传感器的设备。还建议定义对象以表示世界上的所有项目。这些项目包括工作产品、运载器以及任何其它自动化元素,无论它是否电子激活。就像在仿真工具中一样,受过程影响的对象与进行工作的对象一样重要。

自动化系统的行为体现在世界对象的对象中,诸如执行动作的设备和所作用的产品。因此,行为本身并不是真正的对象。设备和产品是对象,并且行为表征其是什么。在数字形式中,行为通过设备活动的仿真来表示。在物理世界中,真实设备实际上会执行该行为。

表示技能的对象旨在用于高级动作。对于操纵活动,技能可能是“在某个位置放置一个对象”。对于组装任务,该技能可能是“接受两个工作项目,并以给定的配置将它们结合在一起”。通过使用世界模型中的其它对象(诸如机器人或待组装工件)来对技能进行参数化。技能及其参数形成了与外界的接口,这使应用和连续应用技能变得很方便,从而实现最终产品。可以进行搜索、仿真和优化。

为了将机器定义为自主的,可以考虑以下标准:

1.系统了解其自身、其环境及其上下文。通过显式表示环境内的对象并保持对象的属性为最新状态,自主系统可以推断其状态以及如何实现其目标。

2.可以以目标特定的术语来指导系统。通过提供技能,可以在比I/O值或设备状态更高的级别描述任务。任务的目标可以通过对环境中的世界对象的配置和引用来表示。如果机器可以自行决定如何进行操作,则无需详细说明如何执行实际工作。

3.系统对意外事件具有适应力。因为机器人知道高级目标及其环境状态,所以它基于该状态确定新的动作,而不必遵循一组固定的指令。通过在环境中搜索待执行的动作来实现技能,环境中的对象结构描述了如何完成任务。

图1是示出根据示例性实施例的各方面的机器维护用例的框图。根据该用例,希望能够灵活且高效地配置和编程移动操纵器101,该移动操纵器将与CNC机械103一起用于机器维护105。该用例的主要目的是演示可以创建一个系统,该系统使应用程序工程师能够有效地配置存储、供应和生产区域的位置以及所涉及的机器及其所需的技能。特别地,应该容易地将移动操纵器101配置成维护多台机器,并且该系统作为整体应该能够操纵和运输各种不同的材料110和产品120。最后,机器的大部分内容都应使用产品生命周期管理(PLM)数据(例如零件模型)来得出。

机器维护用例在多个维度上演示了所描述的方法的益处。通过实现生产系统的重新配置,可以提供更高的灵活性,从而车间可以灵活地适应不断变化的制造工艺或何时引入新产品。在图1的机器维护用例中,该优势体现在系统处理各种不同材料110和产品120的能力上。

通过实现生产系统的有效且直接的重新配置,提供了降低的运营成本和更短的上市时间,由此减少了工装时间,这尤其重要,因为大规模定制导致越来越小的批量。在图1的机器维护用例中,通过使系统集成商能够快速地重新配置机器维护系统,体现了该好处。

减少投资是另一个好处。直接重新配置生产系统减少现有生产资源未充分利用的量,从而增强生产设施的投资资本回报率(ROIC)。在图1的机器维护用例中,该好处通过如下体现:该系统简化使用单个移动操纵器101来维护多台机器103的使用,因此总体上需要更少的移动操纵平台。

一种具有可重用技能的自主设计的方法及其系统的主要目的在于提供用于工程支持系统的新方法(诸如机器人操作系统(ROS)和其它现有方法)。

图2是根据本公开的实施例的各方面的用于自主工程系统的示例性架构的框图。自主系统革新(ASR)控制器210与机器220、221分开示出,因为它具有ASR运行时211。原则上,目标机器220、221可以托管运行时,但是出于说明目的,实现方式将限于系统的多平台控制器。作为示例,ASR控制器210可以是能够运行ASR运行时211规范的任何设备,诸如基于Linux的网络路由器。运行时211包含用于访问目标机器220、221的应用程序编程接口(API),该目标机器提供例如TCP/IP或数字I/O能力。

定制机器人操作系统(ROS)引擎230可以实现为到目标机器220、221的单独控制路径的一部分。应该期望的是,相同的机器也可以由运行时211控制(尽管不一定要同时)。ROS引擎230定义用于发现和执行技能的接口,并且与用于技能规划240的软件交互。该自动计划器最终将切换为使用用于技能的世界模型对象213以及用于执行计划的过程的执行引擎212。

其它主要组件包括工程设计工具230、工程设计应用程序的运行时执行以及编程模型本身的设计。工程设计的产品是过程对象213。这些过程对象213实际上是指定世界模型以及控制应用程序功能的逻辑语义二者的代码。过程对象213在它们被指定的工程230和执行它们的运行时211二者中都示为相同。

定义用于目标过程的世界模型对象(例如,机器模型、工作产品和技能)的组件定义231形成了该方法的基础。这些定义231由工程服务器232在工程设计时并由执行引擎212在运行时211加载。组件定义231提供了将应用程序的逻辑行为连接到执行该行为的真实机器220、221的真实实现方式。在工程设计期间,可以用仿真来代替机器行为。应用程序工程师使用工程用户界面233来创建、查看和编辑经工程设计的过程,并且可以依赖工程服务器232来模拟经工程设计的过程的行为。

这些过程被下载到运行时211并由执行引擎212来执行。引擎212将被实现为公共运行时211的插件,并经过由经工程设计的过程所引用的组件定义231中所定义的机器行为与具体机器(例如,机器人、输送机、CNC机器)进行通信。行为本身通常使用计算机的本机控制器界面执行。最后,执行用户界面240被用于实时跟踪经工程设计的过程的执行。该界面240可视化过程执行进度和当前系统状态,并且还向操作员提供对过程执行的基本控制(例如,暂停/继续/停止)。

为了在全球市场上竞争,明天的工厂需要完整的生产线,包括自动化技术,可以在需求上升时毫不费力地对其进行重新配置或调整用途。同样,物联网(loT)背景下的一个主要目标是通过赋予它们对日常事物进行“编程”(和重新编程)并在智能设备及其提供的服务之上创建新功能的能力来赋予用户权力。然而,使用户能够组合服务仍然是一个大型并且需要大量研究的问题。实际上,这是最终用户编程领域的主要挑战之一。同样,在狭隘的背景中,众所周知,工业机器人很难编程,导致制造商推出新产品时较长的转换时间。当前的研究集中在易于使用和负担得起的机器人编程工具的开发上。将来,普遍希望应用程序工程师仅辅助编程机器人,而无需具备机器人技术方面的专业知识。最后,另一个目前受到大量研究的替代方法是,通过启用基本通用机器技能的自动配置和组合,尝试使人类工程师从环中完全脱出。

向用户提供对其智能环境进行编程的工具已被认为是普遍存在的计算研究(尤其是智能家庭领域)的一项重要挑战,但对于智能工厂而言,情况也是如此,在智能工厂中,易于(重新)配置制造环境变得越来越重要,并且必须支持操作员来管理隐含的动态特性。文献中介绍的并且在行业中广泛使用的许多服务组合系统都具有过程驱动的范例:它们支持最终用户(即过程设计者)使用特定于域的语言或复合服务的抽象模型,或使用基于图形或服务栈的可视化工具来构成服务混搭。对于行业中许多知名系统(例如IBM BusinessProcess Manager、Oracle BPEL Process Manager、Microsoft BizTalk和SAPNetWeaver),解决业务流程建模和执行的开源解决方案(例如Apache ODE和JBoss jBPM)以及研究原型(例如eFIow)都是如此。在IoT空间中,存在类似的系统-称为“混搭工具”,例如Yahoo!Pipe、Google Mashup Editor和IBM Mashup Center。用于创建近期扩展为还允许用户创建更复杂的“配方”的简单的两阶服务混搭的一项非常受欢迎的服务是“If This ThenThat(IFTTT)”,其包含由设备(例如恒温器、车库门等)和程序(例如Dropbox、GoogleCalendar等)提供的数百种基本服务,并且很快就可以采用新颖的服务和可用于合成中的设备。

技能的概念是系统功能的常用抽象。然而,由于诸如“技能”和“行为”的词很常见,因此不同的研究人员会对相同的术语(通常在同一领域)使用不同的定义。尽管技能定义在粒度级别和参数设置上大多不同,但是它们通常起源于原子系统功能的任务组成概念(反之亦然,在分层次任务分解中)。

该抽象的目标是公开高级编程接口,其隐藏了底层低级系统指令的复杂性,并且从而导致控制与过程逻辑之间更好的分离。还可以使用技能,不仅将其作为单元控制的基础,而且还可以提供计划和优化中涉及的更多种自动推理,因为将机器操作形式化作为技能,允许人们针对系统实现原理性的方法,以自动地推理并在单元之间传达意图。

出于使用机器人技能来工程设计的目的,已经进行了一些研究,该研究将“任务”定义为以图形结构连接的一组行为,其中图形中的每个链接表示一个行为与下一个行为之间的过渡。通用行为被包装在“任务项”中,该任务项包括在执行任务之前必须满足的前提条件列表、行为(或其它任务)的名称和用于执行的参数列表,以及到基于当前执行的行为的返回状态执行的附加任务项(通常是二进制成功或失败)的链接。完整的任务由链接在有向无环图中的任务项组成-图形还可以包含子任务,允许更复杂的分层次任务结构。对于建模技能和行为,已采用了类似的抽象方法,其中将设备的基本功能捕获为“运动原语”,并作为通用或面向应用的技能组成了任务序列。另一个系统将技能建模为功能块,该功能块将系统状态和参数作为输入并产生经修改的系统状态作为输出。

为了使建模的技能和行为在行业部署中有用,必须提供允许其有效且直观地构成可执行任务的能力。对于机器人系统,传统上是使用演示编程(PbD)框架完成编程的,该框架使用各种传感器(例如,语音、视觉、触摸、运动捕捉等)和虚拟演示环境。然而,许多基于物理传感器的系统无法达到工业部署所需的稳健性和准确性水平,并且研究人员和操作员已将虚拟演示描述为机器人编程任务既费时又不方便。在前面描述的行为和技能模型的基础上,用于对工业设备(包括机器人)进行编程的新颖系统旨在通过将编程机器的任务转换为利用更简单的构建块来构造可执行代码之一来克服这些问题。

使人们能够直观有效地将基本行为组合成有用的应用程序(在loT领域中通常称为“混搭”)是最终用户编程研究领域的核心。在该背景下,当前学术界的许多混搭编辑器以及用于业务环境中服务组合的几乎所有知名工具都具有可视化组合界面,以使混搭设计人员无需编程或编写脚本技能即可使用它们。可视化编程抽象也已应用在以下的背景中,即通过堆叠表示各个服务的块或连接智能对象的图片以描述所需的组合功能,为最终用户在家庭自动化场景中智能环境的配置提供了便利。一些研究包括用户评估,并得出结论,所有参与者都很快(即在几分钟之内)熟悉这些概念,并且仅需很少的事先培训就能够为自己创建应用程序。Ninja是使用户能够在家庭自动化领域中创建复合服务的商业平台,类似于IFTTT,它可以包含许多商业平台。具体地,对于IoT,IBM已提出将Node-RED系统用作连接loT服务的工具;来自学术界的名为ClickScript的类似系统已经被扩展到可以在loT背景中处理智能事物及其服务,并且很容易将该系统适应于进一步的用例。

目前,工业领域中的技能工程设计专注于对机器人设备进行编程。例如,语音命令已被用于通过人类指导员与机器人之间的对话来迭代构造任务来组合简单的机器人行为。在组合期间,研究人员区分技能排序阶段和教学阶段。在平板计算机上使用基于触摸的GUI进行排序,操作员可在其中从技能库中选择技能,以创建与手头任务中的操作相匹配的技能序列。接下来,操作员在教学阶段期间按技能顺序对通用技能进行参数设置。其它研究讨论了动觉教学(通过推动末端执行器将机器人臂引导至目标位置)和基于手势的教学(基于一组抽象操纵技能,仅使用单个参数作为输入)。通过一项用户研究得出的结论是,基于技能的编程方法实际上使非专家能够在可接受的时间量内直观地编程与工业相关的任务:用户不需要超过15分钟的时间就可以进行序列化和讲授基本的机器维护任务(在两个位置处交换两个对象:一个盒子装有零件并且需要与空的盒子交换)。此外,排序步骤对于所有参与者都是直接直观的,指示了技能本身是直观的,并且由于技能抽象和更简单的参数匹配,用户通常更喜欢基于手势的教学。

人们可以从对最终用户编程的研究以及旨在用于非程序员的工具的设计中学到很多关于可用性的知识。不过,对于工业机械而言,风险会大于对房屋的灯具进行编程使其遵循房屋周围的灯具所产生的后果。诸如机器人的工业智能组件的设计要比家用恒温器复杂得多。然而,原理可能非常相似。将复杂的设备封装为该设备功能的高层抽象表示是有意义的。以能够说明该设备的语义的方式来表示设备,而不是转换为通用编程API也是有意义的。

当前的loT标准不兼容并且不旨在用于工业。结果,严重限制了可以编程给定一组设备的数量。将新设备纳入标准也很困难。开发基于技能的工程的目标的一部分将不仅是定义设备如何编程,而且要定义设备的运行时表示,使得可以在工厂车间中放心地部署它。

具有技能的编程主要是两个概念的结合。首先,将应用程序中使用的设备和产品表示为一种源自组件库的世界模型。在当前的实践中,程序员手写自定义数据结构和算法来表示程序状态。其次,将设备执行的功能和任务封装到高级抽象对象中,该对象被组装在一起(与其它世界模型对象一起)以实现有效的解决方案。在通常的实践中,代码被编写为一种逻辑表达式的数学集合,其通常与世界模型完全分开,并且必须进行编译才能运行。直觉是,编写程序以实现物理结果时,该物理性的组织是该应用程序中的关键要素,并且可以通过重新使用一组标准的构建块而不是从头开始编写代码来实现该组织的大部分。

作为一般规则,更容易知道您想要什么,但是不那么容易知道如何实现该目标。传统的编程语言要求程序员使用术语来描述一种算法,该术语基本上比人们试图解决的问题简单得多。例如,在使用“for”语句表达迭代循环的需求与查找仓库中的所有盒子并堆放在一起的需求之间没有明显的关系。“for-loop”是低级的数学概念;而取回盒子是高水平的人类概念。尽管根据本公开的系统可能不能完全解决对知道如何直观地运输盒子的机器人进行编程的AI问题,但是一个目标是将编程问题推高到抽象水平,使得需要更少的操作来实现更大的结果。

在典型的编程中,为了提高抽象水平,创建了可重用库。尽管库是用特定语言编写的,但它以不同的元模型来表达概念。通过在元模型中应用这些概念,程序员可以使用库的更高级别的抽象来进行创建,并更有效地构建应用程序。使用特定领域的语言以及相关联的编辑器,可以达到甚至更高的抽象水平。考虑用于创建生产系统仿真(如ProcessSimulate)的编辑器。在Process Simulate的编辑器中,可以加载诸如机器人的实体,并使用直接操作和属性对话框在屏幕上移动它们。从用户的角度来看,用户正在编程生产过程的仿真可能完全消失,因为可以看到使用中的设备的3D图形描述。

对于具有技能概念的编程,从图形编辑的观点开始是有帮助的(如在ProcessSimulate中)并建立在顶部。程序员通常知道他们希望设备做什么以及应该如何完成工作的属性,但是不太可能知道如何完成任务或知道各种实现选择彼此将如何交互。因此,程序员的大部分工作应该是按照与在仿真工具中执行的方式几乎相同的方式来选择和安排应用程序的元素。

例如,在图3中,程序员可能想要拾取一组对象301并将它们分类到箱子310中。该应用的“程序”将由机器人320、相机330和任何其它活动设备组成。另外,它包含如工件301、夹具303和容器310的被动对象。此外,希望像图中所示一般地指定活动。尽可能接近仅是“拾取这些盒子340”和“将它们放入该盒子350”。在该情况下,大多数实际编程将确定待影响的对象的正确选择。

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

通过在更高的抽象级别上启用应用程序编程,我们同样正在创建一种新型的工程师。传统的工程师将是机器制造商或集成商,并且会熟悉如I/O和可编程逻辑控制器(PLC)编程等概念以及如何使用诸如Relay-Ladder-Logic(RLL)的基本逻辑进行编程。采用自主机器进行编程可以实现一类新的应用程序工程师,他们可能不知道如何使用低级语言进行编程或如何构建电路,而是了解如何组装一套机器来完成生产任务,并且知道这些机器可以做什么来协调它们一起工作。可以将应用程序工程师视为机器管理者而不是机器制造者。

更恰当的比较可能是视频游戏产业中的编程。过去,小规模的程序员团队会从头开始构建新的视频游戏柜,如Space Invaders,将芯片与显示器和扬声器组装在一起,以使游戏正常工作。后来,将使用如C++的高级语言的图形库对PC游戏进行编程。最近,大批游戏设计师组成的团队就好像在制作电影一样来制作游戏。对游戏的“引擎”进行编程的专家数量仍然很少,而且他们使用C++进行工作。然而,存在称为“关卡设计师”的一类全新的游戏程序员,他们使用高级编辑器来组合游戏的世界和互动。真正使游戏变得有趣的是关卡设计师和引擎程序员。

在图4中示出了编程语义的新层次。如右侧所示,最上面的编码元素旨在根据应用程序对生产的作用来表达应用程序的语义。产品401的“目标”是对工件进行的操作和转换,而与执行该工件的设备无关。位于底部的是设备本身,它们必不可少与硬件相关403。从应用程序的角度来看,该设备可被用于许多目的并且可以通过多种硬件来实现目标。

这些不同的抽象级别的功能被赋予高级的名称“技能”410和低级别的“行为”430。例如,机器人的行为是,它可以在关节处移动以使其末端执行器移动位置到不同的地方。同样,应用程序可具有组装汽车座椅的技能。组装汽车座椅的技巧可能非常复杂,有很多不同类型的座椅以及用于将其附接到底盘的紧固机构。因此,技能会具有复杂的参数来描述这些不同的选择。但是组装汽车座椅不是一种行为,因为可以使用许多可能的机器来完成该任务。

机器制造商431具有例如通过程序代码或库434构建机器并对它们的行为进行编程的作用。使用指令432来指定行为,就像传统上可能对机器进行编程一样。仅在需要使设备和行为对于更高级别的应用程序工程师421可用的意义上,才修改机器构建角色。我们还考虑系统集成商433,该系统集成商负责决定机器组件和技能之间的接口因素435。这将反映一台机器应具有的行为以及如何访问和控制它们。

应用程序工程师421具有建立自己可以从内部技能420构造的技能的角色。原则上,技能410与内部技能420之间没有区别。只是在这种情况下,技能410也可以从外部访问,诸如从MES系统411访问。因此,应用程序工程师421可以建立从技能410或内部技能420构造的技能。例如,应用程序工程师421可以访问与自主线412或自主单元413有关的更高级别的技能。内部技能420用于实现其它技能422,但是它们本身也是特定于实现方式的而无法用作机器接口。

如前所述,自主的第一关键是使系统具有有关其环境的知识。该知识不仅必须包含受主动控制或提供传感器值的设备的模型,而且还必须包含所有无源对象以及可能进入环境但不受单元控制的有源对象。我们将这些对象称为“世界模型对象”的子集,因为它们构成了单元世界的一部分。世界对象是在应用程序的功能元素之间进行表示和交互的工具。它们也是定义应用程序的行为的必要工具。世界模型对象的使用允许系统自主地执行一项或多项技能423以执行系统的行为。在接下来的部分中,我们还将向该世界模型中引入更多类型的对象。

在图5中示出了示例用例。这里,我们有一台机器,在这种情况下是激光雕刻设备501,由移动机器人503维护。在该示例中,机器人拾取工件505并将其带到激光雕刻机501上,工件503看起来像由抓具507夹持的图中的小灰色盒子。机器人503从输送带(未示出)上取下工件507,将其放入夹具509进行运输,打开激光雕刻机的盖子511,将工件505插入激光雕刻机501中,并且继续进行处理。

在图6中示出了在此类单元中使用的物理世界对象的分解。创建了世界对象,以表示应用程序的物理以及语义和功能方面。世界对象很少是纯粹的物理或逻辑的。机器人(例如如KMR 601)既是物理对象,又在程序控制下移动。机器人运输KMP 603和输送机607的情况更是如此。该移动同样是物理的和逻辑的,该单元的应用程序的其它部分可能会希望查看机器人601的当前姿势,以便决定自己的行为的执行。即使是简单的对象(如看起来像一个小盒子的工件505)也是物理的和逻辑的。工件505的存在是应用程序的逻辑元素,在那里它使该单元执行工作,并且因此它就像开关。工件的大小可以决定抓握设备507的开口大小,而其角度和位置则决定了如何移动。单元可以在范围内嵌套,例如激光切割器501可以包括激光切割器盖体511。类似地,附加到切割器盖体511的手柄605是切割器盖体511以及激光切割机501的一部分。

使用本公开中描述的工程技术创建的应用程序旨在用于网络物理生产单元(CPPU或仅单元)的编程。单元的范围不能精确说明,因为它很大程度上取决于应用程序以及应用程序工程师的印象。通常,单元提供与紧密相关的一组机器一致的一组服务。几乎总是将附加到机器人的抓具视为同一单元的一部分。然而,两个机器人是否属于同一单元取决于任务。如果两个机器人在同一工作产品上一起工作,则最好将它们视为同一单元的一部分。两个独立工作的机器人作为单独的单元可能会更好。可以横跨整个车间共享感测工作零件的位置的相机系统。这样,它可能被认为是其自身的单元,或者可以被认为是横跨其它处理单元的共享子单元。

参考图7,世界模型中单元的范围可以取决于任务而变化。机器人701可以定期用作单个单元,但是对于一些特殊任务(诸如,搬运大的对象),它可以招募第二机器人703来帮助搬离重物。当将单独运行的机器人701应用于其通常的任务时,它将形成一个单元。当以该模式工作时,第二辅助机器人703将同样是其自己的单元。为了执行组合的任务,两个单独的单元可以临时形成组合的第三单元705。在组合的任务进行时,尽管仍然存在,但是单独的单元701、703将是不活动的,并且在重新激活以再次开始执行各个任务之前,必须等待直到组合单元705完成其任务。

单元的范围也不与控制器一对一。单个单元可以以分布式方式在多个控制器上实现,并且多个单元可能在单个控制器内和任何其它组合内实现。例如,相机系统可能需要其自己的处理单元来处理用于识别对象的计算负荷。如机器人和输送带的智能组件通常会使用它们自己的处理器和控制器。

由于单元、设备和控制器之间没有牢固的关系,因此单元概念更多地被视为技能服务的逻辑接口,而不是任何物理上的访问。一个单元与它可以提供的服务相关联,该服务可以通过该单元向外界展示的技能来指定。例如,一个单元可以提供仅需要一个机器人701即可完成的服务-就像将工件从输送带移动到贮存箱一样。分开的单元可以包括相同的机器人701和另一个机器人703,以执行组合的组装技能,诸如将工件707插入到容器中,如图7中所示。

图8和图9是示出根据本公开的实施例的一个或多个单元指定的关系和范围的框图。如果一个给定设备只能属于一个单元而建立一种严格的关系,则必须是结合了多个设备资源的任何技能都必须要求这些设备成为同一单元的一部分的情况。在图8中示出了这种情况。提供了包括三个技能803、805和807的单个单元801。技能803、805、807可以与包括机器人和工件的一个或多个物理对象809相关联。然而,生产系统很少是从绿色领域创建的,并且从历史上看,设备可能已经被先前的应用程序工程师横跨多个单元分开,如图9中所示。单元810、820和830是分别定义的,并且分别包含技能811、821和831。当认识到通过该组合可以产生有用的技能时,这不应禁止要使用的设备809的新配置。这样,应该有可能在不删除或重写原始单元的代码的情况下,将具有新技能的新单元无缝地强加到现有的一组设备上。多个单元共享设备的情况如图9中所示。

模型只能包含这么多的细节,直到它变得无法用于任何事物为止。在设计要在工程中使用的世界模型对象时,需要理解和考虑模型的目的。首先要认识到的是,目的是对生产机器进行编程,而不是模拟机器甚至设计机器。重要的是生产本身,而不是设备的特定内部工作原理。此类问题可以留给其它工程设计工具。

模型的细节在物理上无法完美,也不需要完美。该模型仅需足够详细,即可处理单元的抽象级别的情况。例如,图5中所示的移动平台设备需要足够详细才能四处移动,因为其移动会直接影响其对单元的功能。实际上,这就是该单元所做的。但是,无需对移动平台的内部工作原理(诸如其电路板或其所包含的许多螺母和螺栓)进行建模。单元的操作绝不会拆解移动平台,因此,知道里面的东西将是太多的细节。

期望在组件库中创建的一组组件将基于应用程序工程师的需求,并将以正确的详细水平创建。组件的重用将有利于服务于目标的组件,并且将在必要时创建新的组件。可以使用为其它目标而创建的组件(诸如仿真模型),但不应期望产生太多的结果。仿真通常是为特定目标而创建的,在较慢的时间帧内(例如,数小时来计算一分钟的活动)进行计算,或者解决设备的特定特殊行为(如振动多少)。取现有数据,剔除不需要的部分,并且然后手动添加丢失的部分,这更合理。

产品生命周期管理(PLM)是设计和生产某种产品所采取的技术、工具和实践的集合。该产品可能相对简单,如塑料杯;或者,它可能非常复杂,如游轮。显然,适用于此类不同工作的工具和技术的种类也完全不同。希望可以以某种方式利用PLM中使用的数据集合和工具来不仅描述产品,还可以对制造该产品的机器进行编程。在很多情况下,这是可能的。例如,当今的CAD系统通常可以设计合适的CNC程序,以使用标准CNC机床切割零件。然而,在大多数情况下,仍然缺失大量信息。可以预期,由本公开提出的工程数据和系统的种类将进一步增强PLM数据,使得可以做更多的工作来使制造更加自动化。

如上所述,在假定使用当前工程设计实践的情况下,简单地找到一个需要制作世界对象的数据的种类的可能性就很小。例如,仅因为塑料产品在成型方面使用了挤压工艺并不意味着该产品的PLM数据中内置了挤出机的布局和功能。通常,PLM数据由通常不兼容的工具生成的专用格式组成。机器的PLM数据可包括其CAD几何图形、其接线图和其PLC源代码。对于人类来说,检查数据可以推断出该设备如何工作。对于机器,这些是独立的数据源,几乎没有重叠,并且隐含了其大部分功能但未说明。

举例来说,可能清除的一种明显的PLM数据是3D几何形状。具有用于设备的正确3D形状对于设备的显示、编程和仿真很有用。显然,存在用于创建3D CAD的工具,但是机器制造商经常使用2D CAD。机器制造商的目标是为他们的设备创建蓝图,他们可以将该蓝图移交给实际制造该设备的机械师和零件供应商。对于该任务,2D CAD是众所周知的并且是许多制造商工具链中历史悠久的元素。

如果假设制造商确实提供3D CAD几何形状,则仍然需要考虑粒度和细节方面。3DCAD使用几何图元(多边形,也称为三角形)来渲染甚至最小的细节,如通气孔和螺丝孔。该细节水平导致可能在几百个多边形中呈现的几何形状变得分割成几百万个多边形。即使假设摩尔定律将以某种方式使显卡足够快地呈现这种不必要的复杂性,但效率低下仍然限制了可以处理的问题的大小。与其仅绘制具有数百万个多边形的一台机器,不如绘制具有更有效选择的多边形数的数百台机器更加有用。

存在几种方法可以用来降低CAD中的3D几何复杂度。然而,这些不是自动的,而是依靠熟练的图形专家来正确使用。这些方法包括网格抽取、纹理映射和样条逼近。在网格抽取中,网格中的多边形在低曲率的位置连接在一起,以使网格中的整体多边形更少。这些方法仍然存在拓扑更改(诸如删除孔)的问题。纹理映射是视频游戏中用来创建逼真的图形的方法。存在纹理映射的许多变体,包括双向反射分布函数(BRDF)、法线贴图和游戏设计师用来增强真实感的多维纹理。但是,基本原理是用图像替换几何形状。例如,为了代替将形成光栅的孔表示为实际孔,可以在同一位置绘制孔的图片。这将使用显著更少的多边形,并优化了图形处理器以快速绘制图像图。对于样条曲线逼近,其想法是找到多项式函数来表示表面中的多边形。这是一种曲线拟合操作。一旦找到曲线,可以通过为曲线创建新的渲染来调节多边形的数量。最初以512线段绘制的圆可以缩小为具有12线段的圆。该过程具有与具有拓扑结构的网格抽取相似的问题。

在设计用于自主系统的工程设计系统时发现的见解之一是,在对应用程序的语义理解上从符号上与应用程序的物理表示之间没有明显的分离。当标记自主应用程序的语义特征时,几乎总是涉及物理特性。例如,门把手具有3D效果,它位于空间中的某个位置,抓具需要以某种方式接近它以抓握,等等。通常,该物理性被直接编码在用于执行应用程序的指令中。例如,机器人将被移动到位置(1.2m、2.33m、0.22m),基本上是在空间上的某个点。这一点可能恰好是机器人要打开的门的门把手的位置。通过在指令中放置位置而不是门的表示,物理位置与门打开之间的关联会丢失。

因此,不是将语义数据编码为指令,而是将过程翻转并将数据编码为世界描述。打开门的指令将不再对门的位置进行编码。相反,它包含从已知对象(接地对象)到世界模型结构的引用路径,直到找到所需的数据为止。

可以从多于一个的角度解决世界对象模型中的标签对象。

对于共存的建模对象,可能存在用于表示用于不同算法的相似概念的不同模型。例如,可以提供用于发现碰撞的简化表面模型,该模型允许如下的算法,该算法太慢而无法处理复杂的表面,无法在可在运行时使用的时间帧内进行简化。然而,碰撞表面和可视化模型二者都被直接绑定到机器人身体的位置。能够将一种或两种形状模型与主体对象相关联而不必更改任何一种模型或主体对象本身的定义,可以提供高度的运行时多功能性。

此外,附件的通用概念有助于减少对编码数据的系统的类型的使用。无需创建对象的新子类来编码新数据,只需经由适当的附件将新数据附加到对象即可。附件形成了可以轻松搜索的一种基本的引用类型。例如,不需要特殊形式来考虑包括机器人和抓具的操纵器类别。单独的机器人就可以代替顶层对象并且抓具会变得“附加”到机器人。这也有助于减少辅助类别的数量并允许部分配置自然地出现。如果对象的特定配置不存在,则不会制作附件。完全可行的是,设备包含不具有抓具的机器人,或者设备具有抓具但不具有机器人。

在实施例中,考虑使用一致的表示。要使用通用模型,各个用户必须能够访问模型并为其提供新数据,而不会破坏其他用户的数据。可以共享用于表示设备的整体结构(诸如设备的轴、运动零件和形状)的基本结构。然而,还必须添加具体算法具体信息,而无需实现全新的数据结构。应避免将过多的隐式知识强加给数据结构的格式。例如,轴的场景图模型不能表示具有运动学回路的配置。因此,更好的表示是使用单独的轴对象来表示连接。在优选多种表示的情况下,必须注意将表示彼此限制,使得修改正确地反映在两者结构中。在结构之间定义约束或使用特性设定方法可以使结构保持一致。

在另一个实施例中,位置/取向/形状被用作第一类特性。对于控制物理设备,可能希望在其逻辑结构中看到更多的物理表示。但是通常,位置和形状的概念可以归结为更简单的数据结构。对于拾取和放置任务,明确表示位置的优势非常明显,因为它是机器人的操纵器所在的位置。但是大小、形状、位置和取向的概念可以以更一般甚至更细微的方式使用。例如,考虑钻孔的表示。通常会说,钻孔技能具有深度和直径的参数,它们是数字实体。在实施例中,可以创建具有适合的孔的大小和位置的对象(例如,圆柱状对象),并且该形状用作钻孔技能参数。尽管指定圆柱体的参数数量与仅提供数字实体的数量相同,但是通过将参数减少为仅数字列表,就失去了作为圆柱体的知识和语义。无法扫描该组技能并且看不出哪些技能支持某些形状。此外,数字列表的顺序和语法是任意的,这可能使编程与开放项目混淆,诸如以下示例:直径是否意外设定为高度?是否根据孔的直径、半径或钻头大小标记了所需的形状?另一方面,以公知的方式明确地对圆柱形状进行参数化。

根据另一个实施例,图形语义标记可被用作标签。提供几何形状作为直接可编程概念的自然结果是,标记变得更加明显地成为图形和几何形状。例如,运载器中的工作产品位置可以用标记进行标记。同样,显著活动的位置也可以从低层几何形状本身获得。工作零件的静止位置可能变为“零件放在桌子上的任何位置”。可视化标签及其派生的几何形状是如本文所描述的编辑环境的特征。根据本公开的实施例的使用语义标记通过隐藏与给定任务不相关的图形标签来减轻认知负荷。

表示技能的工程对象实际上是与表示工程系统中所有其它动态特征的对象相同的种类。正如可以表示在圆形方向中移动的机器人臂中的致动器一样,也可以表示机器人执行的服务,如拾取对象。当然,技能对象的上下文与致动器不同,因为它具有不同的作用。可能将致动器视为机器人的“一部分”,而将如拾取东西的服务视为“附加到”机器人。

如上所述,为了支持容易访问技能,“单元”被定义为包含该单元的所有服务级别技能的关键对象。这对于希望在应用不同技能时支持单元的多种配置的应用程序工程师很有用。对于使用一个控制器恰好实现一个单元的简单的情况,该单元对象本身是可选的,并且因此可以向控制器本身查询其提供的所有服务技能。

可以使用多种不同的技术和语言来定义一项技能的实现。现在将示出基于命令式迭代流程和表达评估的基本技能组成语言(如流程图),但其它形式也是可能的。例如,在游戏引擎中,通常优选基于电路的约束方案。原则上,技能概念是与语言无关的。关键特征包括通过对象对应用程序的世界的表示、采用应用程序特定的信息对世界对象的标记,以及构成可执行服务的技能的组合。

技能的执行是基于调查和遍历在世界对象中发现的标记标签结构。通过技能表达,人们能够找到与特定概念相关的标签-如机器人应该拾取的对象-以及如何参数化设备的动作-如待拾取对象所处的位置。对象本身也是活动的。对象的特性更改以反映更新的状态。诸如使用传感器检测对象的存在时,可以创建或销毁对象。特性值本身可以由约束条件决定,该约束条件与可能影响技能如何与给定情况交互的任何技能调用分开评估。

不管技能是如何制定的,在某些时候,设备必须实际做某事。如前所述,这被称为行为。行为就是世界对象所做的事情:机器人移动、计时器滴答作响、工件被加工等。在这种情况下,可以提供导致行为发生的多种不同方式:特性设定、方法调用、功能块以及自定义技能。方法的多样性反映了对各种功能和语义保持便利接口的愿望。具有一个参数的简单函数可能最好通过特性来体现。具有许多参数和同步调用语义的复杂函数最好被实现为方法调用。

使行为做出响应的一种方法是更改其对象特性中的值。例如,抓具可具有“抓握”特性,其值是0.0到1.0范围内的浮点值。当设定为1.0时,抓具完全打开;当设定为0.0时,抓具关闭。在运行时设定值会更改抓具的设定点。抓具做出响应而移动,并且完成后,可以使用另一个特性来切换停止的事件。

实现行为的另一种手段是采用对象方法。世界对象由类定义。作为类定义的一部分,类实现者(通常是机器制造商)可以提供自定义方法,可以调用该自定义方法来代表对象执行操作。方法对于可以很容易地表达为过程调用的活动很有用。示例是通过将所有轴的位置设定为一组值来命令机器人移动。比起设定单个机器人轴特性,这可能被认为更方便,因为隐含了同时设定所有轴值。可能还需要一种不同的方式来激活行为,通过使用具有不同名称的不同方法,可以更轻松地描述该行为。例如,机器人可以用一种方法移动到某个点;在第二方法中,机器人可以移动到一个点,但是被设定为在力阈值下停止。

功能块是一种基于对象的技术,用于表示功能,类似于PLC编程中所完成的。功能块具有类似于对象的状态,但也像功能一样被激活。在图10中,智能输送机轨道系统1001中的运载器圆盘1009由功能块作为其输入来控制。在该表示中,功能块表现为电路元件1007,其输入与设备对象(在该情况下为运载器圆盘1009)绑定在一起。不同种类的功能块将执行与设备相关联的不同行为。在图10中,三个不同功能1011、1013、1015的选择被应用于圆盘1009,如在1005处连接的三行电路所表示,以形成圆盘1009的输入。

定制技能只是指出某些类型的功能很复杂并且应该使用较低级语言进行编码以提高效率的一种方式。并不是说不能将此类技能指定为应用程序工程设计级别上的其它技能的组合。直接对技能的行为进行硬编码会更加方便。工程系统以与支持任何世界对象的行为相同的方式来支持该功能。技能是工程系统中的一种对象,就像机器人是一种对象一样。技能可以具有行为。简单的技能可以具有简单的行为,如设定另一个对象的特性的值。复杂的技能可具有复杂的行为,如在不引起碰撞的情况下确定智能输送机系统中的最优路线。

复合技能仅仅是通过组装一组其它技能而制定的技能。从实现方式的角度来看,所有技能在某种意义上都是复合的,它们使各种设备的行为发挥作用。在一方面,本公开的方法可以通过使用工程构建块来组合来自其它技能的效果从而协助应用程序工程师为自动化程序组装新技能。构建块基于常见的编程操作,诸如迭代、条件、序列等。

典型的复合技能的语义可能按顺序执行一组技能作为序列块或技能序列。技能序列中编码的数据是将要执行的子技能的有序列表。技能序列的行为是一次一个按顺序调用每个子技能。其它种类的组合块(如if-then或loop)将具有对应的行为实现方式。

能够组合新技能对应用程序工程师来说是必要的好处。制造商无法预期在特定情况下设备可能具有的所有交互需求。常见的示例是利用多个设备(如具有抓具的机器人)的交互。通常,机器人的制造商与抓具的制造商不同。抓具甚至可以由应用程序所有者从组成部分中手动构建。机器人的制造商无法事先知道应用程序工程师计划安装哪种抓具。可能会预见到某些用例,如使用机器人抓具,但在一般情况下,这是不可知的。

编程结构块仅是形成程序所需信息的一部分。其它需要的元素是数据表示和公式表达式。数据表示至少在全局级别上在世界模型中处理。局部变量可以在技能块组成中建立。剩下的就是表达语言。

表达语言处理如运算符(例如加法、乘法、取模等)的基本数据操纵功能,以及结构性爬升功能,查找对象的父级和部件,搜索具有具体特性的对象,从对象中获取特性等。

实现表达语言的典型方法是提供解析器。可以应用带有中缀运算符的类似Simula的文本语言,也可以使用类似Simulink的图形约束语言,其中运算符被连接到表示数据流的图形节点和折线图中。数据流图往往更易于编写,但难以阅读和理解。文本语言往往更易于阅读,因为它们更紧凑,但是它们却很难编写并且可能仍然难以理解。

技能的参数显示为对世界模型中对象的引用。可以从原子技能和表达中提取对象引用,然后可以确定哪些不是已知对象。对特定已知对象的引用将是常量全局引用(对象本身不是常量,该引用是固定的)。任何其它引用都可以是派生引用,诸如获取对象并找到被附加或以其它方式链接到该对象的引用,或可以是作为参数传递的引用。技能块需要一种将对象引用从参数传递到子技能的机制。

应注意,技能是对象,就像物理实体也是对象一样。技能从类派生并具有特性。为了使技能影响另一个对象,它必须能够生成对该对象的引用。为了不断引用,对对象的引用被嵌入到技能本身中。对世界对象的引用被直接存储在技能特性中。图11示出用于生成用于闭合抓具1101的技能特性的设定的示例。图11中示出抓具1101的参数表,具有名称、所有者、附件和抓具特性1103的字段。抓具的行为由抓握特性1103提供。在该示例中,抓具名称为Grip1234,并且技能被附加到机器人Robo4321。将抓握特性1103设定为零将闭合抓具。可以通过接收来自应用程序工程师的输入(例如,使用GUI)来执行该设定,如设定技能1105所示,用于设定抓具特性1103。设定技能1105直接指向抓具名称1107,并且当它被调用时,抓具1101闭合。

参考图12,示出了用于传递的引用的符号替代的示例。替代表示一种世界对象并且可以被包括在执行这项技能的表达式中。在运行时,符号替代被转换为对实际世界对象的引用并且表达式真实地适用于该对象。例如,符号替代可能是对存储表达式结果的局部变量的引用。在图12中,设定技能1201使用符号替代1203来识别要闭合哪个抓具。在该情况下,表达式1203是包围技能1201的参数。

图13是根据本公开的实施例的附加到对象的自引用技能的图示。该技能本身是世界对象并且可被用作查找其它连接的全局引用。通过将自引用技能附加到要执行该工作的机器人,该技能将自动找到执行任务的机器人。为了找到机器人,技能1301使用指代自己的表达式(如“this”指针)并读取其附加特性以找到机器人1303。技能将自身称为“self”,并从中找到抓具对象1305作为参数传递给其子技能1307之一。

实现技能的困难之一是知道哪些活动可以并行进行并且哪些活动需要序列化。在典型的编程中,并行性被明确地写入程序代码中。如果程序员对可以同时执行哪些代码的直觉是错误的,则会出现问题。通常,当两个代码片段在单个设备上同时执行时,结果是不可预测的,并且通常是灾难性的。

通过提供上下文,世界对象提供了自动管理公共资源同时防止最严重的并行故障的手段。构成技能的对象分组不仅包括技能的代码,还包括受技能影响的所有对象的集合。如果技能将抓具的打开位置设定为0.5,则说明抓具是技能的对象集合的成员。假设在与Gripper1附加的第一机器人(Robotl)上运行“拾取”技能。如果第二机器人是同一单元的一部分,比如说带有Gripper2的Robot2,则即使还没有完成Robotl的拾取技能,通常也可以在Robot2上启动“放置”技能。

然而,仅仅因为技能中使用的对象不相同并不意味着影响不同对象的任何技能都应同时运行。例如,如果在第一机器人Robotl上执行拾取操作,则不可能在附加到执行抓取的机器人的抓具上同时运行抓具释放技能。尽管对于观察该情况的人来说似乎很明显,但对于系统而言却并不明显。在拾取运行的大部分时间里,抓具会握住工件,但其局部状态不会改变。因此,必须考虑世界对象的范围,而不仅仅是对象本身。世界对象的范围包括对象本身以及附加到该对象的所有其它对象。如果正在运行Robotl上的拾取技能,则禁止启动对Gripperl进行操作的释放技能。这是因为Gripperl已附加到Robotl,所以即使在给定的时刻未修改Gripperl,它也会被锁定,直到其所附加的对象可用为止。

确定技能之间共享哪些对象可能很复杂。继续以在Robotl上运行的拾取技能为例,该系统可能面临被调用的另一个技能,该另一个技能共享对象,但只能间接引用。考虑将“运输”技能应用于工件(标记为“零件”)。假设运输零件需要驱动放置零件的移动平台“Mobile”。确定要驱动哪个平台可以通过内部技能来执行。事实证明,移动平台还可以保持Robotl(Robotl被附加到Mobile)。该信息是世界模型的一部分,因此很容易获得。Mobile被锁定,因此运输技能必须被阻挡,直到完成拾取技能为止,因为在顶部的机器人去获取零件时,机器人的移动平台不应被驱动离开。针对实现方式,直到发现资源竞争并且因此冻结其执行直到其资源被解除阻挡为止,“传输”的调用才开始。一旦所有对象可用,就可以评估技能将引用的所有对象,并且可以开始执行。

图14和图15是根据本公开的实施例的使用用于编程和控制的标记方案的自主系统的图示。使用标记方案进行编程的主要缺点是控制向用户呈现多少细节。在图14中,示出了用于控制移动平台1401和机器人1403的标记应用程序。该特定系统具有四个不同的命令,包括包装一组工件,补充其工件库存以及维护激光切割器1405。如果将所有不同机器人动作的标记1410放在一起,则结果会变得凌乱不堪。

如图15中所示,通过简单地将标记1510减少到单个功能正在使用的标记,杂乱量显著减少。在图15中,标记1510被减少为仅用于校准机器人1501的位置的标记。机器人1501首次激活时,被驱动移到由一个或多个一米轨道之一的长箱形区域表示的输送机区域1503上。然后,机器人1501越过并在三个位置触摸输送机1503。输送机上标记1510所示的位置是被触摸的地点,但输送机旁边的标记1510也被布置为示出机器人接近矢量和其它属性。生成引用对象1505以表示在3D空间中存储的校准结果。然而,所示的图可能不被认为是特别可读的,因为标记1510可能过于笼统和重叠。

在图16中,图15的通用标签标记已经被更紧凑的标记1601代替,以作为增强,从而标记1601具有该技能旨在完成的更多语义含义。像通用标记一样,紧凑标记1601被完全嵌入3D空间中并且在场景旋转时会相应地移动。尽管用户可能不像在图中那样容易地在视觉上识别标记1601的目的,但是可以将随附的文本添加到标记1601作为附加指导。在该示例中,点表示机器人抓具被送去开始运动的位置。正方形点1603是归位开始位置,而圆形点1605是机器人1501开始触摸经过的地点。机器人1501从带圆圈的点1605开始并且在箭头的方向中移动,触摸输送机1503三次。在一个方面,针对编程的技能运行机器人1501操作的仿真可以用来向应用程序工程师展示标记的含义。

为了提供信息隐藏以便用户仅需要查看用于特定技能的标记,可以将标记对象本身作为该技能本身的一部分。例如,复合技能可以包含子技能,但也可以包含对用作参数的标记的引用。这样,技能也可以观察并设定标记中的值以影响不同的活动。例如,可以移动标记以跟随相机中的动作。例如,被设计为覆盖四个机器人动作的校准例程将具有描述执行动作的位置的相关联标记。标记实际上是该技能的成员,并且它们还被用作子技能的参数,诸如执行横扫到触摸的动作以触摸输送带。与物理对象不同,技能对象的成员可以在其它技能对象中被重复使用。相同的“横扫到触摸”技能可以根据需要被显示多次,但对所有人仍然具有相同的实现方式。类似地,在一种技能中使用的标记也可以在另一种技能中使用。启用数据隐藏功能是因为系统可以取决于当前选择的技能来限制示出哪些标记。始终示出的唯一顶级标记将是该应用程序定义的最高级服务级别技能。

图17是根据本公开的实施例的区域语义标记的图示。在实施例中,一个或多个自主设备由至少一个控制器来控制,以根据生产过程的任务来操纵工件。在一些实施例中,可以实现用于将工件组装成工作产品的自主系统。为了在应用程序中执行组装行为,可以将新技能添加到控制器的控制程序中,以用于一个或多个设备来表示工作产品的组装,以及用于少量新标记来表示要组装什么以及如何组装。例如,机器人抓具可以是由自主控制器控制的设备,该自主控制器生成具有代表工作空间、工件和该设备的数据对象的世界模型。应用世界模型,控制器可以将语义标记附加到数据对象,使得语义标记中的每个语义标记包括与被定义为用于完成任务目标的抽象功能的技能有关的信息。控制器通过在执行功能任务时更新数据对象的状态,并基于从传感器获得的物理对象的位置信息来排列和映射数据对象,从而使世界模型与自主系统的物理对象同步。

如图17中所示,定义了用于工作空间的数据对象1791,以及用于机器人设备1795的数据对象。为了更好地控制附加到数据对象的语义标记,通过将唯一的颜色应用于现场、现场的有色框架等,工作空间1791的区域被定义并且可以在视觉上被增强用于仿真。如图17中所示,蓝色区域1792和黄色区域1793被定义为分别表示组装区域和用于可用工件的区域。例如,黄色区域1793可以指定要组装的工件可以位于的空间,而蓝色区域1792可以指定工件要在哪里组装。蓝色区域1792和黄色区域1793是语义标记的示例,并且这些对象的语义是可编程的。在一方面,蓝色区域1792可以用于激活在其区域内的数据对象的标记,而黄色区域1793可以用作可以放置工件的搜索空间。不同类型的应用程序可以取决于任务的复杂性使用具有不同语义的或多或少的区域。例如,其它任务(诸如工件的切割或磨削)也可能具有单独的工作空间。在实施例中,两个或更多个设备1795被部署在自主系统中,并且语义标记用语义来编程,语义允许两个或更多个设备协作地执行任务而无需特定于设备的指令。

继续组装示例,可以定义第一任务以将前几个工件移动到组装区域1792。由于组装区域1792开始为空,因此可以基于已经定义和布置的固定放置标记1794来选择拾取和放置操作以将工件移动到组装区域1792中。对于组装任务,可以定义单独的技能以实现该目标,诸如设备1795抓取工件并提起工件的拾取技能,将工件放下到指定工作空间位置的放置技能,以及将工件耦接到设备1795可以找到的另一工件的组装技能。在一方面,这些技能的功能是通用的,因为它们是顺序应用的,并且不限于世界模型中的单个对象,也不是特定于设备的功能,这为自主系统提供了灵活性和可扩展性。

附加的语义标记可以包括以下内容。拾取标记可以被附加到工作空间1791的指定区域,诸如黄色区域1793,以指定需要组装的所有工件。底部地点标记可以在需要底部工件进行组装的位置处表示具体类型的放置标记1794。孔件标记可以表示世界模型中的任何和所有活跃孔标记,以及表示世界模型中的任何和所有活跃桩钉标记的对应的桩钉件标记,其中一个工件的桩钉适合组件中另一个工件的孔。生成此类标记为设备1795中的一个或多个设备提供数据对象集合,以经由一个或多个控制器进行操作。

可以将语义标记设定为激活状态以触发设备操作的适用技能。例如,蓝色区域1792中的工件可以被共同激活以触发用于组装任务的技能集,诸如拾取、放置和组装技能中的一项或多项。可替代地,可以使用特定的语义标记来单独激活工作空间中的工件。在一方面,可以将附加到数据对象的语义标记设定为用于当前不由一个或多个设备1795操纵的对象的停用状态。

自主控制器可以使用语义标记的语义信息来生成世界模型以包括预期功能。预期功能也可以被认为是技能决定是否继续进行的一种先决条件。在一方面,用于执行任务的条件可以基于顺序要求,诸如定义要求成功地完成后续技能的语义标记。例如,控制器可以定义并附加用于拾取和放置的语义标记,使得仅特定类型(例如,颜色、大小等)的对象要在组装顺序中首先放置(例如,作为底部零件)。此类信息可以被存储在拾取和放置标记中。另外,语义标记可以包括指示对象将被放置在何处以及如何放置的信息。因此,如果组装任务要求首先放置黑色工件和灰色工件,则自动设备不会拾取棕褐色工件,因为没有目标来做这件事情。预期功能可能依赖于顺序任务,以控制设备操作以应用第一任务,直到需要操纵的所有数据对象都被处理。在没有找到与第一任务有关的任何其它数据对象的情况下,设备自主地继续执行针对第二任务的语义标记所指导的技能,直到完成为止,依此类推,以完成序列中的后续任务。

可以基于物理对象的类型、数据对象的类型、技能的种类以及世界模型中数据对象的配置来应用预期功能。例如,可以基于是否会阻挡放置后续工件来确定放置工件的位置。可以基于是否存在到达工件的无碰撞路径来确定被拾取的工件。对于组装任务,如果工件会阻挡以后的工件的组装,则不应对其进行组装。可以将预期功能直接编程到由语义信息提供的技能的算法中,或者可以由用户诸如通过激活关键语义标记(例如,经由GUI)来编程预期功能。

图18是根据本公开的实施例的与用于组装任务的技能有关的语义标记的图示。在实施例中,对预期功能进行编程以通过使用“桩钉”和“孔”标记来指示要按哪个顺序组装零件。在图18中,用于工件1801的数据对象具有桩钉结构1811,桩钉标记1821被附加到该桩钉结构。拾取标记1823指示工件1801的抓握位置。孔标记1831指示在工件1801的底部存在孔(不可见)。此类孔可以与另一个工件的桩钉匹配,以用于以后的组装任务。还示出了用于工件1802的数据对象,该工件1802具有孔结构1812,该孔结构1812附加有孔标记1822。桩钉标记1811与孔标记1822匹配。为了组装,将桩钉插入孔中,并且标记相对于零件的局部取向示出如何进行连接。孔标记1822的箭头线1832部分示出桩钉工件1801应该沿着什么路径才能按顺序正确地插入孔中。可替代地,桩钉标记可以包括箭头线,以指导孔工件在桩钉上的放置。

在实施例中,所有的桩钉标记可以被着色为代表非活跃状态的特定颜色。被附加到非活跃桩钉的孔标记同样没有不活跃,并且考虑经由预期功能进行拾取,该标记将被跳过。非活动标记可以通过将工件放置到蓝色区域1792中而被激活,例如,由附加到蓝色区域1792的语义标记程序控制。一旦桩钉标记被激活,语义标记程序就可以控制已激活标记的颜色变化(例如,从沉闷的颜色变为亮色)。通过分配附加到每个工件的桩钉和孔的正确连接性,除非无法组装该零件,否则该零件的孔标记将变得全部活跃。随着越来越多的工件被组装在一起,它们的标记变为活跃,从而导致剩余的工件变为活跃。

该系统可以被概括为组装工件的数据对象,其中通过使用关系而不是静态对象来连接桩钉和孔,在诸如一堆通用对象的对象之间没有一对一的连接。随着越来越多的工件可供拾取,控制选择哪些工件变得越来越重要。这可以通过将过滤器功能应用于技能并创建触发区域来进行管理,该触发区域在工件被放置并从它们的附近移走时做出反应。

为了施加粘合剂或执行焊接和其它种类的基于工具的动作,可以用附加标记补充标记,该附加标记表示具有胶水或焊接或其它活动的位置。像组装任务一样,可以通过给具有粘附标记的任务更高的优先级来使后续操作等待。这样,零件就不会放置在需要立即使用机器人进行操作的位置。

因为技能技术描述了结果,所以在不更改任务的情况下,更容易将应用程序重新定位为执行不同但相似的任务。通过将不同的对象放到世界模型中(可能在具有不同连接的不同地方),系统将自动执行不同的任务。使用说明时,该操作不起作用,因为指定的动作与工作产品无关。机器人只会在不存在的零件上执行移动,并在错误的地点中与其他人碰撞。

应用通用技能可以改善错误恢复。例如,如果机器人掉落了工件,则传感器可以检测到工件掉落的位置。不必更改任务,因为执行原始操作仍然是应用程序的任务。它将使用新的初始配置来执行该操作。

上面描述的基于技能的技术允许将期望结果的预期直接构建到技能中,而不仅仅依赖于用户通过指令直接对预期进行编程。常见的情况(诸如路径阻挡、可用零件数量和工具配置)可以由技能中的算法处理,而无需程序员干预。

在本公开中,自主系统和自主系统的方法帮助应用程序工程师基于通用技能快速且直观地设计和配置工业过程,该通用技能不限于具体单元而是在单元如何转换工作产品方面表示单元的功能。

提出了一种基于世界模型的生成、修改和共享的架构,该世界模型捕获与工业过程相关的设备、材料、工作产品、位置、技能等。为了创建工业过程,应用程序工程师使用所描述的工具来创建过程对象的集合,该过程对象包含工程过程的抽象功能规范,以便在实际硬件上进行仿真和执行。工程过程的执行取决于将过程规范与机器行为的实际实现相关联的组件定义(对于仿真,该行为将经由特定于仿真的组件定义替换为仿真行为)。在ASR运行时上运行的执行引擎控制过程对象的执行,并使用执行UI可视化执行过程和当前系统状态。

所描述的概念为应用程序工程师设计工业过程提供了更高层次的抽象,该工业过程取决于可重用技能库来简化工业设备的编程和编排。该方法的主要优点包括加速(重新)配置工业设置和通用解决方案,以便在不同类型的硬件上多次部署(例如,在工业设施中普遍存在拾取和放置过程)。此外,将工业过程的逻辑规范与其实际执行硬件分开将导致这些规范的库即使在硬件、其控制器及其API发生更改时也仍然有效。最后,在更高的抽象级别上管理生产系统应使它们能够从意外情况中恢复,而无需工程师预测所有可能的故障情况。

图19示出可以在其中实现本公开的实施例的示例性计算环境1700。诸如计算机系统1710和计算环境1700的计算机和计算环境是本领域技术人员已知的,并且因此在此简要描述。

如图19中所示,计算机系统1710可以包括通信机制,诸如系统总线1721或用于在计算机系统1710内传送信息的其它通信机制。计算机系统1710进一步包括与系统总线1721耦合的一个或多个处理器1720,用于处理信息。

处理器1720可以包括一个或多个中央处理单元(CPU)、图形处理单元(GPU)或本领域中已知的任何其它处理器。更一般地,本文所使用的处理器是用于执行存储在计算机可读介质上的机器可读指令以执行任务的设备,并且可以包括硬件和固件中的任何一个或组合。处理器还可包括存储器,该存储器存储可执行以执行任务的机器可读指令。处理器通过操纵、分析、修改、转换或传输供可执行过程或信息设备使用的信息,和/或通过将信息路由到输出设备来对信息起作用。例如,处理器可以使用或包括计算机、控制器或微处理器的能力,并且可以使用可执行指令来进行调节,以执行通用计算机没有执行的特殊功能。处理器可以与使得能够在它们之间进行交互和/或通信的任何其它处理器(电和/或包括可执行组件)耦合。用户界面处理器或生成器是包括用于生成显示图像或其一部分的电子电路或软件或两者的组合的已知元件。用户界面包括一个或多个显示图像,该显示图像使得用户能够与处理器或其它设备进行交互。

继续参考图19,计算机系统1710还包括耦合到系统总线1721的系统存储器1730,用于存储将由处理器1720执行的信息和指令。系统存储器1730可以包括易失性和/或非易失性存储器(诸如只读存储器(ROM)1731和/或随机存取存储器(RAM)1732)形式的计算机可读存储介质。RAM1732可以包括其它动态存储设备(例如,动态RAM、静态RAM和同步DRAM)。ROM 1731可以包括其它静态存储设备(例如,可编程ROM、可擦除PROM和电可擦除PROM)。另外,系统存储器1730可被用于在处理器1720执行指令期间存储临时变量或其它中间信息。包含有助于在计算机系统1710内的元素之间传递信息的基本例程的基本输入/输出系统1733(BIOS)诸如在启动期间可以存储在ROM 1731中。RAM 1732可以包含可被处理器1720立即访问和/或当前由其操作的数据和/或程序模块。系统存储器1730可以另外包括例如操作系统1734、应用程序1735、其它程序模块1736和程序数据1737。

计算机系统1710还包括磁盘控制器1740,该磁盘控制器被耦接到系统总线1721以控制用于存储信息和指令的一个或多个存储设备,诸如磁硬盘1741和可移动介质驱动器1742(例如软盘驱动器、光盘驱动器、磁带驱动器和/或固态驱动器)。可以使用适当的设备接口(例如,小型计算机系统接口(SCSI)、集成设备电子设备(IDE)、通用串行总线(USB)或FireWire)将存储设备添加到计算机系统1710。

计算机系统1710还可以包括显示控制器1765,该显示控制器被耦接到系统总线1721以控制显示器或监视器1766,诸如阴极射线管(CRT)或液晶显示器(LCD),用于向计算机用户显示信息。该计算机系统包括输入接口1760和一个或多个输入设备,诸如键盘1762和点击设备1761,用于与计算机用户交互并将信息提供给处理器1720。点击设备1761例如可以是鼠标、光笔、轨迹球或指向杆,用于将方向信息和命令选择传送给处理器1720,并控制显示器1766上的光标移动。显示器1766可提供触摸屏界面,该界面允许输入以补充或替换指向设备1761对方向信息和命令选择的通信。在一些实施例中,用户可穿戴的增强现实设备1767可提供允许用户与物理和虚拟世界交互的输入/输出功能。增强现实设备1767与显示控制器1765和用户输入接口1760通信,从而允许用户与由显示控制器1765在增强现实设备1767中生成的虚拟项目进行交互。用户还可以提供由增强现实设备1767检测到并作为输入信号发送到用户输入接口1760的手势。

计算机系统1710可以响应于处理器1720执行包含在诸如系统存储器1730的存储器中的一个或多个指令的一个或多个序列,来执行本发明的实施例的一部分或全部处理步骤。此类指令可以从诸如磁硬盘1741或可移动介质驱动器1742的另一计算机可读介质读取到系统存储器1730中。磁硬盘1741可以包含本发明的实施例使用的一个或多个数据存储和数据文件。数据存储内容和数据文件可以加密以提高安全性。处理器1720还可用于多处理装置中以执行包含在系统存储器1730中的一个或多个指令序列。在替代实施例中,可使用硬连线电路代替软件指令或与软件指令结合。因此,实施例不限于硬件电路和软件的任何特定组合。

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

计算环境1700可以进一步包括计算机系统1710,该计算机系统在网络环境中使用到诸如远程计算设备1780的一个或多个远程计算机的逻辑连接来操作。远程计算设备1780可以是个人计算机(膝上型计算机或台式计算机)、移动设备、服务器、路由器、网络PC、对等设备或其它公共网络节点,并且通常包括上面相对于计算机系统1710所述的许多或所有元素。当在联网环境中使用时,计算机系统1710可以包括用于在诸如互联网的网络1771上建立通信的调制解调器1772。调制解调器1772可以经由用户网络接口1770或经由另一适当的机制连接至系统总线1721。

网络1771可以是本领域中通常已知的任何网络或系统,包括互联网、内联网、局域网(LAN)、广域网(WAN)、城域网(MAN)、直接网络连接或一系列连接、蜂窝电话网络或能够促进计算机系统1710与其它计算机(例如,远程计算设备1780)之间的通信的任何其它网络或介质。网络1771可以是有线的、无线的或其组合。可以使用以太网、通用串行总线(USB)、RJ-6或本领域通常已知的任何其它有线连接来实现有线连接。可以使用Wi-Fi、WiMAX和蓝牙、红外、蜂窝网络、卫星或本领域通常已知的任何其它无线连接方法来实现无线连接。另外,几个网络可以单独或彼此通信地工作以促进网络1771中的通信。

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

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

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

附图的系统和过程不是唯一的。可以根据本发明的原理导出其它系统、过程和菜单以实现相同的目的。尽管已经引用特定实施例描述了本发明,但是应当理解,本文示出和描述的实施例和变型仅用于说明目的。在不脱离本发明的范围的情况下,本领域技术人员可以对当前设计进行修改。如本文所述,可以使用硬件组件、软件组件和/或其组合来实现各种系统、子系统、代理、管理器和过程。

相关技术
  • 通过自主机器支持任务的对象标记
  • 全面支持自主JSON文档对象(AJD)云服务的技术
技术分类

06120112979230