机器人程序的验证方法、装置、电子设备及存储介质转让专利

申请号 : CN202111068924.1

文献号 : CN113535591B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 林培文李季兰

申请人 : 季华实验室

摘要 :

本申请属于机器人控制技术领域,公开了一种机器人程序的验证方法、装置、电子设备及存储介质,通过加载待验证的AS程序;把AS程序转换为python程序;在python仿真平台上加载机器人模型、作业平台模型和python程序;在python仿真平台上运行python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿数据;获取机器人模型的预设轨迹点的位姿数据;根据实际轨迹点的位姿数据和预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,判定所述AS程序正确或不正确;从而实现了对AS程序正确性的仿真验证,避免直接使用机器人进行验证而损坏机器人。

权利要求 :

1.一种机器人程序的验证方法,用于对机器人的AS程序的正确性进行验证,其特征在于,包括以下步骤:

A1.加载待验证的AS程序;

A2.把所述AS程序转换为python程序;

A3.在python仿真平台上加载机器人模型、作业平台模型和所述python程序;

A4.在所述python仿真平台上运行所述python程序,获取所述机器人模型在所述作业平台模型中运动的实际轨迹点的位姿数据;

A5.获取所述机器人模型的预设轨迹点的位姿数据;

A6.根据所述实际轨迹点的位姿数据和所述预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;

A7.根据所述一致性判断的结果,判定所述AS程序正确或不正确;

步骤A2包括:

遍历预先生成的AST抽象语法树的节点,把所述AS程序的变量、输入输出信号、流程分支语句、信号操作判断函数转换为所述python程序的变量、输入输出信号、流程分支语句、信号操作判断函数。

2.根据权利要求1所述的机器人程序的验证方法,其特征在于,步骤A5包括:加载所述预设运动轨迹的轨迹点数据记录表;

从所述轨迹点数据记录表中提取所述机器人模型的预设轨迹点的位姿数据。

3.根据权利要求1所述的机器人程序的验证方法,其特征在于,步骤A6包括:根据所述实际轨迹点的位姿数据与所述预设轨迹点的位姿数据,确定各所述实际轨迹点与对应的所述预设轨迹点之间的重合情况;

若各所述实际轨迹点均与对应的所述预设轨迹点重合,则判定所述实际运动轨迹和所述预设运动轨迹一致,若有至少一个所述实际轨迹点与对应的所述预设轨迹点不重合,则判定所述实际运动轨迹和预设运动轨迹不一致。

4.根据权利要求1所述的机器人程序的验证方法,其特征在于,所述python程序包含多个分支流程的程序;

步骤A4包括:运行每个所述分支流程的程序,获取对应的一个实际分支轨迹的实际轨迹点的位姿数据;

步骤A5包括:获取各分支流程对应的预设分支轨迹的预设轨迹点的位姿数据;

步骤A6包括:根据各所述实际分支轨迹的实际轨迹点的位姿数据和各所述预设分支轨迹的预设轨迹点的位姿数据进行各段所述实际分支轨迹与对应的所述预设分支轨迹的一致性判断;

步骤A7包括:若有至少一个所述实际分支轨迹与对应的所述预设分支轨迹不一致,则判定所述AS程序不正确,否则判定所述AS程序正确。

5.一种机器人程序的验证装置,用于对机器人的AS程序的正确性进行验证,其特征在于,包括:

第一加载模块,用于加载待验证的AS程序;

转换模块,用于把所述AS程序转换为python程序;

第二加载模块,用于在python仿真平台上加载机器人模型、作业平台模型和所述python程序;

第一获取模块,用于在所述python仿真平台上运行所述python程序,获取所述机器人模型在所述作业平台模型中运动的实际轨迹点的位姿数据;

第二获取模块,用于获取所述机器人模型的预设轨迹点的位姿数据;

第一执行模块,用于根据所述实际轨迹点的位姿数据和所述预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;

第一判定模块,用于根据所述一致性判断的结果,判定所述AS程序正确或不正确;

转换模块用于在把所述AS程序转换为python程序时:遍历预先生成的AST抽象语法树的节点,把所述AS程序的变量、输入输出信号、流程分支语句、信号操作判断函数转换为所述python程序的变量、输入输出信号、流程分支语句、信号操作判断函数。

6.根据权利要求5所述的机器人程序的验证装置,其特征在于,第二获取模块用于在获取所述机器人模型的预设轨迹点的位姿数据时:加载所述预设运动轨迹的轨迹点数据记录表;

从所述轨迹点数据记录表中提取所述机器人模型的预设轨迹点的位姿数据。

7.一种电子设备,其特征在于,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如权利要求1‑4任一项所述机器人程序的验证方法中的步骤。

8.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时运行如权利要求1‑4任一项所述机器人程序的验证方法中的步骤。

说明书 :

机器人程序的验证方法、装置、电子设备及存储介质

技术领域

[0001] 本申请涉及机器人控制技术领域,具体而言,涉及一种机器人程序的验证方法、装置、电子设备及存储介质。

背景技术

[0002] 现有的一些机器人的控制程序是通过AS语言编写的,若要验证编写的AS程序是否正确,一般只能直接在真实的机器人上运行该AS程序,判断机器人的运动过程是否与预期
编排的流程一致,进而判断AS程序的正确性。然而,若AS程序编写有误,则容易引起机器人
的损坏。对于其它种类的工业机器人,采用python语言进行控制程序编写是比较普遍的做
法,从而在进行控制程序验证时,可直接用python软件提供的仿真平台进行仿真验证,从而
可避免验证过程中损坏机器人。但是,python软件无法直接运行AS语言编写的程序,因此,
针对机器人目前难以通过有效的仿真方法进行AS程序正确性的验证。
[0003] 针对上述问题,目前尚未有有效的技术解决方案。

发明内容

[0004] 本申请的目的在于提供一种机器人程序的验证方法、装置、电子设备及存储介质,旨在解决现有技术中针对机器人目前难以通过有效的仿真方法进行AS程序正确性的验证
的问题。
[0005] 第一方面,本申请提供了一种机器人程序的验证方法,用于对机器人的AS程序的正确性进行验证,包括以下步骤:
[0006] A1.加载待验证的AS程序;
[0007] A2.把所述AS程序转换为python程序;
[0008] A3.在python仿真平台上加载机器人模型、作业平台模型和所述python程序;
[0009] A4.在所述python仿真平台上运行所述python程序,获取所述机器人模型在所述作业平台模型中运动的实际轨迹点的位姿数据;
[0010] A5.获取所述机器人模型的预设轨迹点的位姿数据;
[0011] A6.根据所述实际轨迹点的位姿数据和所述预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;
[0012] A7.根据一致性判断的结果,判定所述AS程序正确或不正确。
[0013] 本申请的机器人程序的验证方法,通过把机器人的AS程序转换为python程序,从而在python仿真平台上直接运行转换后的python程序进行仿真,根据机器人模型的实际运
动轨迹和预设运动轨迹的一致性判断AS程序是否正确,从而实现了对AS程序正确性的仿真
验证,避免直接使用机器人进行验证而损坏机器人。
[0014] 优选地,步骤A2包括:
[0015] 遍历预先生成的AST抽象语法树的节点,把所述AS程序的变量、输入输出信号、流程分支语句、信号操作判断函数转换为python程序的变量、输入输出信号、流程分支语句、
信号操作判断函数。
[0016] 优选地,步骤A5包括:
[0017] 加载预设运动轨迹的轨迹点数据记录表;
[0018] 从所述轨迹点数据记录表中提取所述机器人模型的预设轨迹点的位姿数据。
[0019] 从轨迹点数据记录表直接提取预先记录的预设轨迹点的位姿数据,可快捷方便地得到预设轨迹点的位姿数据。
[0020] 优选地,步骤A6包括:
[0021] 根据所述实际轨迹点的位姿数据与所述预设轨迹点的位姿数据,确定各所述实际轨迹点与对应的所述预设轨迹点之间的重合情况;
[0022] 若各所述实际轨迹点均与对应的所述预设轨迹点重合,则判定所述实际运动轨迹和预设运动轨迹一致,若有至少一个所述实际轨迹点与对应的所述预设轨迹点不重合,则
判定所述实际运动轨迹和预设运动轨迹不一致。
[0023] 优选地,所述python程序包含多个分支流程的程序;
[0024] 步骤A4包括:运行每个所述分支流程的程序,获取对应的一个实际分支轨迹的实际轨迹点的位姿数据;
[0025] 步骤A5包括:获取各分支流程对应的预设分支轨迹的预设轨迹点的位姿数据。
[0026] 步骤A6包括:根据各所述实际分支轨迹的实际轨迹点的位姿数据和各所述预设分支轨迹的预设轨迹点的位姿数据进行各段所述实际分支轨迹与对应的所述预设分支轨迹
的一致性判断;
[0027] 步骤A7包括:若有至少一个所述实际分支轨迹与对应的所述预设分支轨迹不一致,则判定所述AS程序不正确,否则判定所述AS程序正确。
[0028] 当python程序中包含多个分支流程的程序时,遍历所有分支流程,以确保对每一个实际分支轨迹与对应预设分支轨迹的一致性均得到判断,进而保证最终的AS程序正确性
的判定结果是准确的。
[0029] 第二方面,本申请提供了一种机器人程序的验证装置,用于对机器人的AS程序的正确性进行验证,包括:
[0030] 第一加载模块,用于加载待验证的AS程序;
[0031] 转换模块,用于把所述AS程序转换为python程序;
[0032] 第二加载模块,用于在python仿真平台上加载机器人模型、作业平台模型和所述python程序;
[0033] 第一获取模块,用于在所述python仿真平台上运行所述python程序,获取所述机器人模型在所述作业平台模型中运动的实际轨迹点的位姿数据;
[0034] 第二获取模块,用于获取所述机器人模型的预设轨迹点的位姿数据;
[0035] 第一执行模块,用于根据所述实际轨迹点的位姿数据和所述预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;
[0036] 第一判定模块,用于根据一致性判断的结果,判定所述AS程序正确或不正确。
[0037] 本申请的机器人程序的验证装置,通过把机器人的AS程序转换为python程序,从而在python仿真平台上直接运行转换后的python程序进行仿真,根据机器人模型的实际运
动轨迹和预设运动轨迹的一致性判断AS程序是否正确,从而实现了对AS程序正确性的仿真
验证,避免直接使用机器人进行验证而损坏机器人。
[0038] 优选地,转换模块用于在把所述AS程序转换为python程序时:
[0039] 遍历预先生成的AST抽象语法树的节点,把所述AS程序的变量、输入输出信号、流程分支语句、信号操作判断函数转换为python程序的变量、输入输出信号、流程分支语句、
信号操作判断函数。
[0040] 优选地,第二获取模块用于在获取所述机器人模型的预设轨迹点的位姿数据时:
[0041] 加载预设运动轨迹的轨迹点数据记录表;
[0042] 从所述轨迹点数据记录表中提取所述机器人模型的预设轨迹点的位姿数据。
[0043] 第三方面,本申请提供了一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如所述机器人
程序的验证方法中的步骤。
[0044] 第四方面,本申请提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时运行如所述机器人程序的验证方法中的步骤。
[0045] 有益效果:
[0046] 本申请提供的机器人程序的验证方法、装置、电子设备及存储介质,通过加载待验证的AS程序;把所述AS程序转换为python程序;在python仿真平台上加载机器人模型、作业
平台模型和所述python程序;在所述python仿真平台上运行所述python程序,获取所述机
器人模型在所述作业平台模型中运动的实际轨迹点的位姿数据;获取所述机器人模型的预
设轨迹点的位姿数据;根据所述实际轨迹点的位姿数据和所述预设轨迹点的位姿数据进行
实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,判定所述AS程序正
确或不正确;从而实现了对AS程序正确性的仿真验证,避免直接使用机器人进行验证而损
坏机器人。
[0047] 本申请的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请了解。本申请的目的和其他优点可通过在所写的说明书、权
利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

[0048] 图1为本申请实施例提供的机器人程序的验证方法的一种流程图。
[0049] 图2为本申请实施例提供的机器人程序的验证装置的第一种结构示意图。
[0050] 图3为本申请实施例提供的电子设备的结构示意图。

具体实施方式

[0051] 下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在
此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因
此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的
范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做
出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0052] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本申请的
描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0053] 请参照图1,图1是本申请一些实施例中的机器人程序的验证方法,用于对机器人的AS程序的正确性进行验证,包括以下步骤:
[0054] A1.加载待验证的AS程序;
[0055] A2.把AS程序转换为python程序;
[0056] A3.在python仿真平台上加载机器人模型、作业平台模型和该python程序;
[0057] A4.在python仿真平台上运行该python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿数据;
[0058] A5.获取机器人模型的预设轨迹点的位姿数据;
[0059] A6.根据实际轨迹点的位姿数据和预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;
[0060] A7.根据一致性判断的结果,判定AS程序正确或不正确。
[0061] 该机器人程序的验证方法,通过把机器人的AS程序转换为python程序,从而在python仿真平台上直接运行转换后的python程序进行仿真,根据机器人模型的实际运动轨
迹和预设运动轨迹的一致性判断AS程序是否正确,从而实现了对AS程序正确性的仿真验
证,避免直接使用机器人进行验证而损坏机器人。
[0062] 需要说明的是,该机器人程序的验证方法的应用对象不限于是机器人,也可以是其它采用AS程序进行控制的机器人。
[0063] 在一些实施方式中,步骤A2包括:
[0064] 遍历预先生成的AST抽象语法树的节点,把AS程序的变量、输入输出信号、流程分支语句、信号操作判断函数转换为python程序的变量、输入输出信号、流程分支语句、信号
操作判断函数。
[0065] 其中,AST抽象语法树是根据AS语言自身的定义,通过词法、语法解析生成的,该AST抽象语法树包括了全局变量表和所有函数表,该AST抽象语法树生成后还需要通过词法
语法语义校验。一段程序最终是用树(ast抽象语法树)来组织存储,包括数据和流程分支,
树有唯一的根节点。通过根节点自顶向下可以遍历到任意节点(节点:数据、流程分支)。对
于流程分支节点,流程分支入口通常是main函数作为程序入口。通过深度遍历流程分支入
口,将流程分支逻辑对应转换到目标语言的流程分支语句,当流程分支需要使用的变量数
据,则通过树的数据子节点进行访问。这里的遍历预先生成的AST抽象语法树的节点,主要
包括流程分支的遍历。
[0066] 具体的,在AS程序中,数值变量、字符串变量的变量名前需要分别添加“#”、“$”号,而在python程序中,数值变量的变量名前需要添加 “_”号,字符串变量的变量名前不添加
任何符号,此外,在AS程序中的变量是没有变量定义的,而python程序中需要显式进行变量
定义声明,如果变量是数组变量,则需要定义数组维度。因此,在把AS程序的变量转换为
python程序的变量时,把数值变量的变量名前的“#”号改为“_”号,把字符串变量的变量名
前的“$”号删除,并添加对变量的定义声明语句。例如,下表中示例性地给出了一个二维数
组tx1在AS程序中的变量定义和转换为python程序变量后的变量定义。
[0067]
[0068] 其中,_tx1 = numpy.zeros([3,6],dtype=float)为对变量tx1的定义声明语句。
[0069] 具体的,AS程序中,输入信号和输出信号是一段连续的区间编号,信号的值是该段连续区间编号对应的比特位,在把AS程序的输入输出信号转换为python程序的输入输出信
号时,可用比特数组(bitarray)来表示输入、输出信号,其中,比特数组的第0位是输入或输
出信号的起始位,数组的大小等于输入或输出信号的个数,且用各比特位的值表示对应的
输入或输出信号的开关状态,其中,当一个比特位的值为0表示对应的输入或输出信号的开
关状态为关,当一个比特位的值为1表示对应的输入或输出信号的开关状态为开。
[0070] 具体的,AS程序中的流程分支语句主要包括“Case Value”、“IF ELSE”、“Goto”等,其中“Case Value”等价于python程序中的“switch case”语句,“IF ELSE”等价于python程
序中的“IF ELSE”语句,“Goto”等价于python程序中的“Goto”语句。在把AS程序的流程分支
语句转换为python程序的流程分支语句时,把“Case Value”语句程序转换为python程序的
“switch case”语句程序,把“IF ELSE”语句程序转换为python程序的“IF ELSE”语句程序,
把“Goto”语句程序转换python程序的“Goto”语句程序(实际上,也可把AS程序的“Goto”语
句程序转换为python程序的“IF ELIF ELSE” 语句程序)。例如下表示例性地给出了一个AS
程序的“Case Value”语句程序和转换后的python程序的“switch case”语句程序,以及一
个AS程序的IF ELSE”语句程序和转换后的python程序的“IF ELSE”语句程序。
[0071]
[0072] 具体的,AS程序中的信号操作判断函数包括SIG函数、BITS函数、SWAIT函数、SIGNAL函数、SHIFT函数和机器人指令。
[0073] 其中,SIG函数的表达句式一般为“SIG(信号编号,・・・)”,主要用于返回指定信号的逻辑与(AND):判定指定的“信号编号”的值是否与“信号编号”的正负一致,并且做与操
作;如果信号编号参数是正,那么该信号的值为1时,则返回true,否则false;如果信号编号
参数是负,那么该信号的值为0时,则返回true,否则false。在把AS程序中的SIG语句程序转
换为python程序中对应G语句程序时,转换方式可参考下表。
[0074]
[0075] 其中,BITS函数表达句式包括“BITS 开始信号编号, 信号数=值”(第一句式)和“BITS(开始信号编号,信号数)”(第二句式)。
[0076] 第一句式用于读取“值”,转换为2进制值,并把从“开始信号编号”开始的“信号数”个信号的信号值设为该二进制值:首先定义一段比特数组,大小为“信号数”,所有比特位均
初始化为0, 将2进制值转为与比特数组长度一致的2进制值(不足的位置为0),最后将这段
长度的比特数组值替换掉原输入或者输出信号的比特数组对应的编号序列。在把AS程序中
的第一句式的BITS语句程序转换为python程序中对应的语句程序时,转换方式可参考下
表。
[0077]
[0078] 第二句式用于读取“开始信号编号”开始的“信号数”个信号的信号状态:读取“开始信号编号”开始的“信号数”个信号的信号状态,得到二进制流,转为十进制值。在把AS程
序中的第二句式的BITS语句程序转换为python程序中对应的语句程序时,转换方式可参考
下表。
[0079]
[0080] 其中,SWAIT函数表达句式一般为“SWAIT (信号编号,・・・)”,用于使机器人在外部输入或输出信号、内部信号到达指定状态之前,在当前步骤进入待机状态:对指定的“信号
编号”,从输入或者输出信号的比特数组中提取该信号编号的值,如果信号编号是正,且该
信号编号的值为1,则该信号到达指定状态,否则为未到达指定状态;只有所有的信号编号
的状态都到达指定状态,机器人才退出待机状态,继续后续的流程代码;待机是通过线程的
sleep函数实现。在把AS程序中的SWAIT语句程序转换为python程序中对应的语句程序时,
转换方式可参考下表。
[0081]
[0082] 其中,SIGNAL函数表达句式一般为“SIGNAL 信号编号,・・・”,用于设置外部输入信号、内部信号。在把AS程序中的SIGNAL语句程序转换为python程序中对应的语句程序时,转
换方式可参考下表。
[0083]
[0084] 其中,SHIFT函数表达句式一般为“SHIFT(变换值 BY x移动量,y移动量,z移动量)”,用于使变换值按各方向指定的移动量发生变化:变换值是一个含6个元素的值,6个元
素按顺序表示为(x,y,z,o,a,t),需要将6个元素中的x值加上x移动量,y值加上y移动量,z
值加上z移动量。在把AS程序中的SHIFT语句程序转换为python程序中对应的语句程序时,
转换方式可参考下表。
[0085]
[0086] 其中,机器人指令主要包括BASE指令、TOOL指令、HOME指令、LAPPRO指令、JAPPRO指令、JMOVE指令、LMOVE指令等,在把AS程序中的机器人指令转换为python程序中对应的指令
时,把BASE指令、TOOL指令、HOME指令、LAPPRO指令、JAPPRO指令、JMOVE指令、LMOVE指令映射
到python仿真平台对应的仿真指令,以取得模型的控制。其中,各机器人指令的表达句式和
映射到python仿真平台的仿真指令参考下表。
[0087]
[0088] 其中,步骤A3中的机器人模型和作业平台模型是根据待验证的AS程序所要控制的机器人和该机器人所处的作业平台预先制作的三维模型。
[0089] 其中,步骤A4中,运行该python程序时,会驱动机器人模型在作业平台模型中运动,机器人模型运动的轨迹就是实际运动轨迹。其中,实际轨迹点的位姿数据是指机器人的
TCP点(工具坐标系原点)的位姿数据(包括位置坐标数据和姿态角度数据)。在实际应用中,
AS程序和转换后得到的python程序中,包含有预设运动轨迹的轨迹点的位置数据,在运行
时控制机器人的TCP点依次移动到各轨迹点处,从而,步骤A4中的实际轨迹点是指与预设轨
迹点相对应的轨迹点,机器人每移动一次就获取一个实际轨迹点的位姿数据,保证得到的
实际轨迹点的位姿数据与预设轨迹点的位姿数据是一一对应的关系,以便于后续进行实际
运动轨迹和预设运动轨迹的一致性判断时,可直接一一对比各实际轨迹点的位姿数据与各
预设轨迹点的位姿数据即可,无需先对获取的实际轨迹点的位姿数据进行筛选。
[0090] 其中,在获取机器人模型的预设轨迹点的位姿数据时,可从AS程序或转换后的python程序中提取对应的预设轨迹点的位姿数据,从而步骤A5包括:从AS程序或转换后的
python程序中提取机器人模型的预设轨迹点的位姿数据。
[0091] 作为一种优选实施方式,步骤A5包括:
[0092] 加载预设运动轨迹的轨迹点数据记录表;
[0093] 从轨迹点数据记录表中提取机器人模型的预设轨迹点的位姿数据。
[0094] 该实施方式中,预先记录好预设轨迹点的位姿数据形成预设运动轨迹的轨迹点数据记录表,从轨迹点数据记录表直接提取预先记录的预设轨迹点的位姿数据,与从AS程序
或转换后的python程序中提取机器人模型的预设轨迹点的位姿数据的方式相比,可更加快
捷方便地得到预设轨迹点的位姿数据。
[0095] 优选地,步骤A6包括:
[0096] 根据实际轨迹点的位姿数据与预设轨迹点的位姿数据,确定各实际轨迹点与对应的预设轨迹点之间的重合情况;
[0097] 若各实际轨迹点均与对应的预设轨迹点重合,则判定实际运动轨迹和预设运动轨迹一致,若有至少一个实际轨迹点与对应的预设轨迹点不重合,则判定实际运动轨迹和预
设运动轨迹不一致。
[0098] 其中,位姿数据包括三个位置坐标数据和三个姿态角度数据(共六个元素),在确定各实际轨迹点与对应的预设轨迹点之间的重合情况的时候,计算实际轨迹点的位姿数据
的六个元素与对应的预设轨迹点的位姿数据的六个元素之间的偏差(三个位置坐标之间的
偏差和三个姿态角度之间的偏差,该偏差是绝对值),若有至少一个位置坐标的偏差大于预
设的位置偏差阈值,或者有至少一个姿态角度的偏差大于预设的角度偏差阈值,则判定对
应的实际轨迹点和预设轨迹点不重合,否则判定对应的实际轨迹点和预设轨迹点重合。
[0099] 若实际运动轨迹和预设运动轨迹一致,则说明AS程序正确,否则说明AS程序有误,从而,步骤A7中,若实际运动轨迹和预设运动轨迹一致则判定AS程序正确,否则判定AS程序
不正确。
[0100] 在实际应用中,AS程序和转换后的python程序中可能包含多个分支流程的程序,在运行时,会根据不同的条件或人工选择而进入不同的分支流程;为验证AS程序的正确性,
需要对每个分支流程的程序均进行验证。从而,在一些实施方式中,python程序包含多个分
支流程的程序;
[0101] 步骤A4包括:运行每个分支流程的程序,获取对应的一个实际分支轨迹的实际轨迹点的位姿数据;
[0102] 步骤A5包括:获取各分支流程对应的预设分支轨迹的预设轨迹点的位姿数据;
[0103] 步骤A6包括:根据各实际分支轨迹的实际轨迹点的位姿数据和各预设分支轨迹的预设轨迹点的位姿数据进行各段实际分支轨迹与对应的预设分支轨迹的一致性判断;
[0104] 步骤A7包括:若有至少一个实际分支轨迹与对应的预设分支轨迹不一致,则判定AS程序不正确,否则判定AS程序正确。
[0105] 当python程序中包含多个分支流程的程序时,遍历所有分支流程,以确保对每一个实际分支轨迹与对应预设分支轨迹的一致性均得到判断,进而保证最终的AS程序正确性
的判定结果是准确的。
[0106] 由上可知,该机器人程序的验证方法,通过加载待验证的AS程序;把AS程序转换为python程序;在python仿真平台上加载机器人模型、作业平台模型和python程序;在python
仿真平台上运行python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿
数据;获取机器人模型的预设轨迹点的位姿数据;根据实际轨迹点的位姿数据和预设轨迹
点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,
判定AS程序正确或不正确;从而实现了对AS程序正确性的仿真验证,避免直接使用机器人
进行验证而损坏机器人。
[0107] 请参考图2,本申请提供了一种机器人程序的验证装置,用于对机器人的AS程序的正确性进行验证,包括:
[0108] 第一加载模块1,用于加载待验证的AS程序;
[0109] 转换模块2,用于把AS程序转换为python程序;
[0110] 第二加载模块3,用于在python仿真平台上加载机器人模型、作业平台模型和python程序;
[0111] 第一获取模块4,用于在python仿真平台上运行python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿数据;
[0112] 第二获取模块5,用于获取机器人模型的预设轨迹点的位姿数据;
[0113] 第一执行模块6,用于根据实际轨迹点的位姿数据和预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;
[0114] 第一判定模块7,用于根据一致性判断的结果,判定AS程序正确或不正确。
[0115] 在一些实施方式中,转换模块2用于在把AS程序转换为python程序时:
[0116] 遍历预先生成的AST抽象语法树的节点,把AS程序的变量、输入输出信号、流程分支语句、信号操作判断函数转换为python的变量、输入输出信号、流程分支语句、信号操作
判断函数。
[0117] 其中,AST抽象语法树是根据AS语言自身的定义,通过词法、语法解析生成的,该AST抽象语法树包括了全局变量表和所有函数表,该AST抽象语法树生成后还需要通过词法
语法语义校验。一段程序最终是用树(ast抽象语法树)来组织存储,包括数据和流程分支,
树有唯一的根节点。通过根节点自顶向下可以遍历到任意节点(节点:数据、流程分支)。对
于流程分支节点,流程分支入口通常是main函数作为程序入口。通过深度遍历流程分支入
口,将流程分支逻辑对应转换到目标语言的流程分支语句,当流程分支需要使用的变量数
据,则通过树的数据子节点进行访问。这里的遍历预先生成的AST抽象语法树的节点,主要
包括流程分支的遍历。
[0118] 具体的,在AS程序中,数值变量、字符串变量的变量名前需要分别添加“#”、“$”号,而在python程序中,数值变量的变量名前需要添加 “_”号,字符串变量的变量名前不添加
任何符号,此外,在AS程序中的变量是没有变量定义的,而python程序中需要显式进行变量
定义声明,如果变量是数组变量,则需要定义数组维度。因此,在把AS程序的变量转换为
python程序的变量时,把数值变量的变量名前的“#”号改为“_”号,把字符串变量的变量名
前的“$”号删除,并添加对变量的定义声明语句。例如,下表中示例性地给出了一个二维数
组tx1在AS程序中的变量定义和转换为python程序变量后的变量定义。
[0119]
[0120] 其中,_tx1 = numpy.zeros([3,6],dtype=float)为对变量tx1的定义声明语句。
[0121] 具体的,AS程序中,输入信号和输出信号是一段连续的区间编号,信号的值是该段连续区间编号对应的比特位,在把AS程序的输入输出信号转换为python程序的输入输出信
号时,可用比特数组(bitarray)来表示输入、输出信号,其中,比特数组的第0位是输入或输
出信号的起始位,数组的大小等于输入或输出信号的个数,且用各比特位的值表示对应的
输入或输出信号的开关状态,其中,当一个比特位的值为0表示对应的输入或输出信号的开
关状态为关,当一个比特位的值为1表示对应的输入或输出信号的开关状态为开。
[0122] 具体的,AS程序中的流程分支语句主要包括“Case Value”、“IF ELSE”、“Goto”等,其中“Case Value”等价于python程序中的“switch case”语句,“IF ELSE”等价于python程
序中的“IF ELSE”语句,“Goto”等价于python程序中的“Goto”语句。在把AS程序的流程分支
语句转换为python程序的流程分支语句时,把“Case Value”语句程序转换为python程序的
“switch case”语句程序,把“IF ELSE”语句程序转换python程序的“IF ELSE”语句程序,把
“Goto”语句程序转换为python程序的“Goto”语句程序(实际上,也可把AS程序的“Goto”语
句程序转换为python程序的“IF ELIF ELSE” 语句程序)。例如下表示例性地给出了一个AS
程序的“Case Value”语句程序和转换后的python程序的“switch case”语句程序,以及一
个AS程序的IF ELSE”语句程序和转换后的python程序的“IF ELSE”语句程序。
[0123]
[0124] 具体的,AS程序中的信号操作判断函数包括SIG函数、BITS函数、SWAIT函数、SIGNAL函数、SHIFT函数和机器人指令。
[0125] 其中,SIG函数的表达句式一般为“SIG(信号编号,・・・)”,主要用于返回指定信号的逻辑与(AND):判定指定的“信号编号”的值是否与“信号编号”的正负一致,并且做与操
作;如果信号编号参数是正,那么该信号的值为1时,则返回true,否则false;如果信号编号
参数是负,那么该信号的值为0时,则返回true,否则false。在把AS程序中的SIG语句程序转
换为python程序中对应G语句程序时,转换方式可参考下表。
[0126]
[0127] 其中,BITS函数表达句式包括“BITS 开始信号编号, 信号数=值”(第一句式)和“BITS(开始信号编号,信号数)”(第二句式)。
[0128] 第一句式用于读取“值”,转换为2进制值,并把从“开始信号编号”开始的“信号数”个信号的信号值设为该二进制值:首先定义一段比特数组,大小为“信号数”,所有比特位均
初始化为0, 将2进制值转为与比特数组长度一致的2进制值(不足的位置为0),最后将这段
长度的比特数组值替换掉原输入或者输出信号的比特数组对应的编号序列。在把AS程序中
的第一句式的BITS语句程序转换为python程序中对应的语句程序时,转换方式可参考下
表。
[0129]
[0130] 第二句式用于读取“开始信号编号”开始的“信号数”个信号的信号状态:读取“开始信号编号”开始的“信号数”个信号的信号状态,得到二进制流,转为十进制值。在把AS程
序中的第二句式的BITS语句程序转换为python程序中对应的语句程序时,转换方式可参考
下表。
[0131]
[0132] 其中,SWAIT函数表达句式一般为“SWAIT (信号编号,・・・)”,用于使机器人在外部输入或输出信号、内部信号到达指定状态之前,在当前步骤进入待机状态:对指定的“信号
编号”,从输入或者输出信号的比特数组中提取该信号编号的值,如果信号编号是正,且该
信号编号的值为1,则该信号到达指定状态,否则为未到达指定状态;只有所有的信号编号
的状态都到达指定状态,机器人才退出待机状态,继续后续的流程代码;待机是通过线程的
sleep函数实现。在把AS程序中的SWAIT语句程序转换为python程序中对应的语句程序时,
转换方式可参考下表。
[0133]
[0134] 其中,SIGNAL函数表达句式一般为“SIGNAL 信号编号,・・・”,用于设置外部输入信号、内部信号。在把AS程序中的SIGNAL语句程序转换为python程序中对应的语句程序时,转
换方式可参考下表。
[0135]
[0136] 其中,SHIFT函数表达句式一般为“SHIFT(变换值 BY x移动量,y移动量,z移动量)”,用于使变换值按各方向指定的移动量发生变化:变换值是一个含6个元素的值,6个元
素按顺序表示为(x,y,z,o,a,t),需要将6个元素中的x值加上x移动量,y值加上y移动量,z
值加上z移动量。在把AS程序中的SHIFT语句程序转换为python程序中对应的语句程序时,
转换方式可参考下表。
[0137]
[0138] 其中,机器人指令主要包括BASE指令、TOOL指令、HOME指令、LAPPRO指令、JAPPRO指令、JMOVE指令、LMOVE指令等,在把AS程序中的机器人指令转换为python程序中对应的指令
时,把BASE指令、TOOL指令、HOME指令、LAPPRO指令、JAPPRO指令、JMOVE指令、LMOVE指令映射
到python仿真平台对应的仿真指令,以取得模型的控制。其中,各机器人指令的表达句式和
映射到python仿真平台的仿真指令参考下表。
[0139]
[0140] 其中,上述的机器人模型和作业平台模型是根据待验证的AS程序所要控制的机器人和该机器人所处的作业平台预先制作的三维模型。
[0141] 其中,第一获取模块4在运行该python程序时,会驱动机器人模型在作业平台模型中运动,机器人模型运动的轨迹就是实际运动轨迹。其中,实际轨迹点的位姿数据是指机器
人的TCP点(工具坐标系原点)的位姿数据(包括位置坐标数据和姿态角度数据)。在实际应
用中,AS程序和转换后得到的python程序中,包含有预设运动轨迹的轨迹点的位置数据,在
运行时控制机器人的TCP点依次移动到各轨迹点处,从而,实际轨迹点是指与预设轨迹点相
对应的轨迹点,机器人每移动一次就获取一个实际轨迹点的位姿数据,保证得到的实际轨
迹点的位姿数据与预设轨迹点的位姿数据是一一对应的关系,以便于后续进行实际运动轨
迹和预设运动轨迹的一致性判断时,可直接一一对比各实际轨迹点的位姿数据与各预设轨
迹点的位姿数据即可,无需先对获取的实际轨迹点的位姿数据进行筛选。
[0142] 其中,在获取机器人模型的预设轨迹点的位姿数据时,可从AS程序或转换后的python程序中提取对应的预设轨迹点的位姿数据,从而第二获取模块5用于在获取机器人
模型的预设轨迹点的位姿数据时:从AS程序或转换后的python程序中提取机器人模型的预
设轨迹点的位姿数据。
[0143] 作为一种优选实施方式,第二获取模块5用于在获取机器人模型的预设轨迹点的位姿数据时:
[0144] 加载预设运动轨迹的轨迹点数据记录表;
[0145] 从轨迹点数据记录表中提取机器人模型的预设轨迹点的位姿数据。
[0146] 该实施方式中,预先记录好预设轨迹点的位姿数据形成预设运动轨迹的轨迹点数据记录表,从轨迹点数据记录表直接提取预先记录的预设轨迹点的位姿数据,与从AS程序
或转换后的python程序中提取机器人模型的预设轨迹点的位姿数据的方式相比,可更加快
捷方便地得到预设轨迹点的位姿数据。
[0147] 优选地,第一执行模块6用于在根据实际轨迹点的位姿数据和预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断的时候:
[0148] 根据实际轨迹点的位姿数据与预设轨迹点的位姿数据,确定各实际轨迹点与对应的预设轨迹点之间的重合情况;
[0149] 若各实际轨迹点均与对应的预设轨迹点重合,则判定实际运动轨迹和预设运动轨迹一致,若有至少一个实际轨迹点与对应的预设轨迹点不重合,则判定实际运动轨迹和预
设运动轨迹不一致。
[0150] 其中,位姿数据包括三个位置坐标数据和三个姿态角度数据(共六个元素),在确定各实际轨迹点与对应的预设轨迹点之间的重合情况的时候,计算实际轨迹点的位姿数据
的六个元素与对应的预设轨迹点的位姿数据的六个元素之间的偏差(三个位置坐标之间的
偏差和三个姿态角度之间的偏差,该偏差是绝对值),若有至少一个位置坐标的偏差大于预
设的位置偏差阈值,或者有至少一个姿态角度的偏差大于预设的角度偏差阈值,则判定对
应的实际轨迹点和预设轨迹点不重合,否则判定对应的实际轨迹点和预设轨迹点重合。
[0151] 若实际运动轨迹和预设运动轨迹一致,则说明AS程序正确,否则说明AS程序有误,从而,第一判定模块7在根据一致性判断的结果,判定AS程序正确或不正确的时候,若实际
运动轨迹和预设运动轨迹一致则判定AS程序正确,否则判定AS程序不正确。
[0152] 在实际应用中,AS程序和转换后的python程序中可能包含多个分支流程的程序,在运行时,会根据不同的条件或人工选择而进入不同的分支流程;为验证AS程序的正确性,
需要对每个分支流程的程序均进行验证。从而,在一些实施方式中,python程序包含多个分
支流程的程序;
[0153] 第一获取模块4还用于运行每个分支流程的程序,获取对应的一个实际分支轨迹的实际轨迹点的位姿数据;
[0154] 第二获取模块5还用于获取各分支流程对应的预设分支轨迹的预设轨迹点的位姿数据;
[0155] 第一执行模块6还用于根据各实际分支轨迹的实际轨迹点的位姿数据和各预设分支轨迹的预设轨迹点的位姿数据进行各段实际分支轨迹与对应的预设分支轨迹的一致性
判断;
[0156] 第一判定模块7还用于在有至少一个实际分支轨迹与对应的预设分支轨迹不一致时,判定AS程序不正确,否则判定AS程序正确。
[0157] 当python程序中包含多个分支流程的程序时,遍历所有分支流程,以确保对每一个实际分支轨迹与对应预设分支轨迹的一致性均得到判断,进而保证最终的AS程序正确性
的判定结果是准确的。
[0158] 由上可知,该机器人程序的验证装置,通过加载待验证的AS程序;把AS程序转换为python程序;在python仿真平台上加载机器人模型、作业平台模型和python程序;在python
仿真平台上运行python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿
数据;获取机器人模型的预设轨迹点的位姿数据;根据实际轨迹点的位姿数据和预设轨迹
点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,
判定AS程序正确或不正确;从而实现了对AS程序正确性的仿真验证,避免直接使用机器人
进行验证而损坏机器人。
[0159] 请参照图3,图3为本申请实施例提供的一种电子设备的结构示意图,包括:处理器301和存储器302,处理器301和存储器302通过通信总线303和/或其他形式的连接机构(未
标出)互连并相互通讯,存储器302存储有处理器301可执行的计算机程序,当计算设备运行
时,处理器301执行该计算机程序,以执行上述实施例的任一可选的实现方式中的机器人程
序的验证方法,以实现以下功能:加载待验证的AS程序;把AS程序转换为python程序;在
python仿真平台上加载机器人模型、作业平台模型和python程序;在python仿真平台上运
行python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿数据;获取机
器人模型的预设轨迹点的位姿数据;根据实际轨迹点的位姿数据和预设轨迹点的位姿数据
进行实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,判定AS程序正
确或不正确。
[0160] 本申请实施例提供一种存储介质,计算机程序被处理器执行时,执行上述实施例的任一可选的实现方式中的机器人程序的验证方法,以实现以下功能:加载待验证的AS程
序;把AS程序转换为python程序;在python仿真平台上加载机器人模型、作业平台模型和
python程序;在python仿真平台上运行python程序,获取机器人模型在作业平台模型中运
动的实际轨迹点的位姿数据;获取机器人模型的预设轨迹点的位姿数据;根据实际轨迹点
的位姿数据和预设轨迹点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;根
据一致性判断的结果,判定AS程序正确或不正确。其中,存储介质可以由任何类型的易失性
或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static Random 
Access Memory, 简称SRAM),电可擦除可编程只读存储器(Electrically Erasable 
Programmable Read‑Only Memory, 简称EEPROM),可擦除可编程只读存储器(Erasable 
Programmable Read Only Memory, 简称EPROM),可编程只读存储器(Programmable Red‑
Only Memory, 简称PROM),只读存储器(Read‑Only Memory, 简称ROM),磁存储器,快闪存
储器,磁盘或光盘。
[0161] 在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻
辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可
以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间
的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连
接,可以是电性,机械或其它的形式。
[0162] 另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多
个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的
目的。
[0163] 再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
[0164] 在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际
的关系或者顺序。
[0165] 以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的
任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。