机器人程序的验证方法、装置、电子设备及存储介质转让专利
申请号 : CN202111068924.1
文献号 : CN113535591B
文献日 : 2021-12-14
发明人 : 林培文 , 李季兰
申请人 : 季华实验室
摘要 :
权利要求 :
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任一项所述机器人程序的验证方法中的步骤。
说明书 :
机器人程序的验证方法、装置、电子设备及存储介质
技术领域
背景技术
编排的流程一致,进而判断AS程序的正确性。然而,若AS程序编写有误,则容易引起机器人
的损坏。对于其它种类的工业机器人,采用python语言进行控制程序编写是比较普遍的做
法,从而在进行控制程序验证时,可直接用python软件提供的仿真平台进行仿真验证,从而
可避免验证过程中损坏机器人。但是,python软件无法直接运行AS语言编写的程序,因此,
针对机器人目前难以通过有效的仿真方法进行AS程序正确性的验证。
发明内容
的问题。
动轨迹和预设运动轨迹的一致性判断AS程序是否正确,从而实现了对AS程序正确性的仿真
验证,避免直接使用机器人进行验证而损坏机器人。
信号操作判断函数。
判定所述实际运动轨迹和预设运动轨迹不一致。
的一致性判断;
的判定结果是准确的。
动轨迹和预设运动轨迹的一致性判断AS程序是否正确,从而实现了对AS程序正确性的仿真
验证,避免直接使用机器人进行验证而损坏机器人。
信号操作判断函数。
程序的验证方法中的步骤。
平台模型和所述python程序;在所述python仿真平台上运行所述python程序,获取所述机
器人模型在所述作业平台模型中运动的实际轨迹点的位姿数据;获取所述机器人模型的预
设轨迹点的位姿数据;根据所述实际轨迹点的位姿数据和所述预设轨迹点的位姿数据进行
实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,判定所述AS程序正
确或不正确;从而实现了对AS程序正确性的仿真验证,避免直接使用机器人进行验证而损
坏机器人。
利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
具体实施方式
此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因
此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的
范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做
出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
迹和预设运动轨迹的一致性判断AS程序是否正确,从而实现了对AS程序正确性的仿真验
证,避免直接使用机器人进行验证而损坏机器人。
操作判断函数。
语法语义校验。一段程序最终是用树(ast抽象语法树)来组织存储,包括数据和流程分支,
树有唯一的根节点。通过根节点自顶向下可以遍历到任意节点(节点:数据、流程分支)。对
于流程分支节点,流程分支入口通常是main函数作为程序入口。通过深度遍历流程分支入
口,将流程分支逻辑对应转换到目标语言的流程分支语句,当流程分支需要使用的变量数
据,则通过树的数据子节点进行访问。这里的遍历预先生成的AST抽象语法树的节点,主要
包括流程分支的遍历。
任何符号,此外,在AS程序中的变量是没有变量定义的,而python程序中需要显式进行变量
定义声明,如果变量是数组变量,则需要定义数组维度。因此,在把AS程序的变量转换为
python程序的变量时,把数值变量的变量名前的“#”号改为“_”号,把字符串变量的变量名
前的“$”号删除,并添加对变量的定义声明语句。例如,下表中示例性地给出了一个二维数
组tx1在AS程序中的变量定义和转换为python程序变量后的变量定义。
号时,可用比特数组(bitarray)来表示输入、输出信号,其中,比特数组的第0位是输入或输
出信号的起始位,数组的大小等于输入或输出信号的个数,且用各比特位的值表示对应的
输入或输出信号的开关状态,其中,当一个比特位的值为0表示对应的输入或输出信号的开
关状态为关,当一个比特位的值为1表示对应的输入或输出信号的开关状态为开。
序中的“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”语句程序。
作;如果信号编号参数是正,那么该信号的值为1时,则返回true,否则false;如果信号编号
参数是负,那么该信号的值为0时,则返回true,否则false。在把AS程序中的SIG语句程序转
换为python程序中对应G语句程序时,转换方式可参考下表。
初始化为0, 将2进制值转为与比特数组长度一致的2进制值(不足的位置为0),最后将这段
长度的比特数组值替换掉原输入或者输出信号的比特数组对应的编号序列。在把AS程序中
的第一句式的BITS语句程序转换为python程序中对应的语句程序时,转换方式可参考下
表。
序中的第二句式的BITS语句程序转换为python程序中对应的语句程序时,转换方式可参考
下表。
编号”,从输入或者输出信号的比特数组中提取该信号编号的值,如果信号编号是正,且该
信号编号的值为1,则该信号到达指定状态,否则为未到达指定状态;只有所有的信号编号
的状态都到达指定状态,机器人才退出待机状态,继续后续的流程代码;待机是通过线程的
sleep函数实现。在把AS程序中的SWAIT语句程序转换为python程序中对应的语句程序时,
转换方式可参考下表。
换方式可参考下表。
素按顺序表示为(x,y,z,o,a,t),需要将6个元素中的x值加上x移动量,y值加上y移动量,z
值加上z移动量。在把AS程序中的SHIFT语句程序转换为python程序中对应的语句程序时,
转换方式可参考下表。
时,把BASE指令、TOOL指令、HOME指令、LAPPRO指令、JAPPRO指令、JMOVE指令、LMOVE指令映射
到python仿真平台对应的仿真指令,以取得模型的控制。其中,各机器人指令的表达句式和
映射到python仿真平台的仿真指令参考下表。
TCP点(工具坐标系原点)的位姿数据(包括位置坐标数据和姿态角度数据)。在实际应用中,
AS程序和转换后得到的python程序中,包含有预设运动轨迹的轨迹点的位置数据,在运行
时控制机器人的TCP点依次移动到各轨迹点处,从而,步骤A4中的实际轨迹点是指与预设轨
迹点相对应的轨迹点,机器人每移动一次就获取一个实际轨迹点的位姿数据,保证得到的
实际轨迹点的位姿数据与预设轨迹点的位姿数据是一一对应的关系,以便于后续进行实际
运动轨迹和预设运动轨迹的一致性判断时,可直接一一对比各实际轨迹点的位姿数据与各
预设轨迹点的位姿数据即可,无需先对获取的实际轨迹点的位姿数据进行筛选。
python程序中提取机器人模型的预设轨迹点的位姿数据。
或转换后的python程序中提取机器人模型的预设轨迹点的位姿数据的方式相比,可更加快
捷方便地得到预设轨迹点的位姿数据。
设运动轨迹不一致。
的六个元素与对应的预设轨迹点的位姿数据的六个元素之间的偏差(三个位置坐标之间的
偏差和三个姿态角度之间的偏差,该偏差是绝对值),若有至少一个位置坐标的偏差大于预
设的位置偏差阈值,或者有至少一个姿态角度的偏差大于预设的角度偏差阈值,则判定对
应的实际轨迹点和预设轨迹点不重合,否则判定对应的实际轨迹点和预设轨迹点重合。
不正确。
需要对每个分支流程的程序均进行验证。从而,在一些实施方式中,python程序包含多个分
支流程的程序;
的判定结果是准确的。
仿真平台上运行python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿
数据;获取机器人模型的预设轨迹点的位姿数据;根据实际轨迹点的位姿数据和预设轨迹
点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,
判定AS程序正确或不正确;从而实现了对AS程序正确性的仿真验证,避免直接使用机器人
进行验证而损坏机器人。
判断函数。
语法语义校验。一段程序最终是用树(ast抽象语法树)来组织存储,包括数据和流程分支,
树有唯一的根节点。通过根节点自顶向下可以遍历到任意节点(节点:数据、流程分支)。对
于流程分支节点,流程分支入口通常是main函数作为程序入口。通过深度遍历流程分支入
口,将流程分支逻辑对应转换到目标语言的流程分支语句,当流程分支需要使用的变量数
据,则通过树的数据子节点进行访问。这里的遍历预先生成的AST抽象语法树的节点,主要
包括流程分支的遍历。
任何符号,此外,在AS程序中的变量是没有变量定义的,而python程序中需要显式进行变量
定义声明,如果变量是数组变量,则需要定义数组维度。因此,在把AS程序的变量转换为
python程序的变量时,把数值变量的变量名前的“#”号改为“_”号,把字符串变量的变量名
前的“$”号删除,并添加对变量的定义声明语句。例如,下表中示例性地给出了一个二维数
组tx1在AS程序中的变量定义和转换为python程序变量后的变量定义。
号时,可用比特数组(bitarray)来表示输入、输出信号,其中,比特数组的第0位是输入或输
出信号的起始位,数组的大小等于输入或输出信号的个数,且用各比特位的值表示对应的
输入或输出信号的开关状态,其中,当一个比特位的值为0表示对应的输入或输出信号的开
关状态为关,当一个比特位的值为1表示对应的输入或输出信号的开关状态为开。
序中的“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”语句程序。
作;如果信号编号参数是正,那么该信号的值为1时,则返回true,否则false;如果信号编号
参数是负,那么该信号的值为0时,则返回true,否则false。在把AS程序中的SIG语句程序转
换为python程序中对应G语句程序时,转换方式可参考下表。
初始化为0, 将2进制值转为与比特数组长度一致的2进制值(不足的位置为0),最后将这段
长度的比特数组值替换掉原输入或者输出信号的比特数组对应的编号序列。在把AS程序中
的第一句式的BITS语句程序转换为python程序中对应的语句程序时,转换方式可参考下
表。
序中的第二句式的BITS语句程序转换为python程序中对应的语句程序时,转换方式可参考
下表。
编号”,从输入或者输出信号的比特数组中提取该信号编号的值,如果信号编号是正,且该
信号编号的值为1,则该信号到达指定状态,否则为未到达指定状态;只有所有的信号编号
的状态都到达指定状态,机器人才退出待机状态,继续后续的流程代码;待机是通过线程的
sleep函数实现。在把AS程序中的SWAIT语句程序转换为python程序中对应的语句程序时,
转换方式可参考下表。
换方式可参考下表。
素按顺序表示为(x,y,z,o,a,t),需要将6个元素中的x值加上x移动量,y值加上y移动量,z
值加上z移动量。在把AS程序中的SHIFT语句程序转换为python程序中对应的语句程序时,
转换方式可参考下表。
时,把BASE指令、TOOL指令、HOME指令、LAPPRO指令、JAPPRO指令、JMOVE指令、LMOVE指令映射
到python仿真平台对应的仿真指令,以取得模型的控制。其中,各机器人指令的表达句式和
映射到python仿真平台的仿真指令参考下表。
人的TCP点(工具坐标系原点)的位姿数据(包括位置坐标数据和姿态角度数据)。在实际应
用中,AS程序和转换后得到的python程序中,包含有预设运动轨迹的轨迹点的位置数据,在
运行时控制机器人的TCP点依次移动到各轨迹点处,从而,实际轨迹点是指与预设轨迹点相
对应的轨迹点,机器人每移动一次就获取一个实际轨迹点的位姿数据,保证得到的实际轨
迹点的位姿数据与预设轨迹点的位姿数据是一一对应的关系,以便于后续进行实际运动轨
迹和预设运动轨迹的一致性判断时,可直接一一对比各实际轨迹点的位姿数据与各预设轨
迹点的位姿数据即可,无需先对获取的实际轨迹点的位姿数据进行筛选。
模型的预设轨迹点的位姿数据时:从AS程序或转换后的python程序中提取机器人模型的预
设轨迹点的位姿数据。
或转换后的python程序中提取机器人模型的预设轨迹点的位姿数据的方式相比,可更加快
捷方便地得到预设轨迹点的位姿数据。
设运动轨迹不一致。
的六个元素与对应的预设轨迹点的位姿数据的六个元素之间的偏差(三个位置坐标之间的
偏差和三个姿态角度之间的偏差,该偏差是绝对值),若有至少一个位置坐标的偏差大于预
设的位置偏差阈值,或者有至少一个姿态角度的偏差大于预设的角度偏差阈值,则判定对
应的实际轨迹点和预设轨迹点不重合,否则判定对应的实际轨迹点和预设轨迹点重合。
运动轨迹和预设运动轨迹一致则判定AS程序正确,否则判定AS程序不正确。
需要对每个分支流程的程序均进行验证。从而,在一些实施方式中,python程序包含多个分
支流程的程序;
判断;
的判定结果是准确的。
仿真平台上运行python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿
数据;获取机器人模型的预设轨迹点的位姿数据;根据实际轨迹点的位姿数据和预设轨迹
点的位姿数据进行实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,
判定AS程序正确或不正确;从而实现了对AS程序正确性的仿真验证,避免直接使用机器人
进行验证而损坏机器人。
标出)互连并相互通讯,存储器302存储有处理器301可执行的计算机程序,当计算设备运行
时,处理器301执行该计算机程序,以执行上述实施例的任一可选的实现方式中的机器人程
序的验证方法,以实现以下功能:加载待验证的AS程序;把AS程序转换为python程序;在
python仿真平台上加载机器人模型、作业平台模型和python程序;在python仿真平台上运
行python程序,获取机器人模型在作业平台模型中运动的实际轨迹点的位姿数据;获取机
器人模型的预设轨迹点的位姿数据;根据实际轨迹点的位姿数据和预设轨迹点的位姿数据
进行实际运动轨迹和预设运动轨迹的一致性判断;根据一致性判断的结果,判定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),磁存储器,快闪存
储器,磁盘或光盘。
辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可
以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间
的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连
接,可以是电性,机械或其它的形式。
个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的
目的。
的关系或者顺序。
任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。