本发明一种面向环境建模的移动机器人运行时验证方法,具体涉及一种在运行时验证过程中移动机器人的环境建模方法,属于机器人安全技术领域。
背景技术:
随着移动机器人的应用越来越广泛,人们在享受机器人带来的服务和便利的同时也越来越关注移动机器人的安全。由于移动机器人在真实的物理环境中工作,环境的动态变化会对机器人的执行效果产生影响,这些影响可能会导致接收到的传感器数据与正常情况相比存在偏差,从而做出不符合当前情形下的决策,使得移动机器人发生错误的或是危险的行为。在复杂环境下怎样保证系统的安全性和可靠性是众多学者研究的重点。
在复杂环境中,影响机器人的物理因素有很多,如噪声、无线信号和空气的震动等。例如在医用机器人领域,手术室是一个嘈杂的环境,噪音会影响机器人在手术期间的表现。其中siu等人通过对vinci外科手术机器人的实验发现,vinci机器人执行的手术任务越困难,噪音影响越明显。噪声降低了机器人手术的效果,不同类型的噪声,如随机或有节奏的声音对机器人的手术任务影响程度不同。另外,在机器人的导航定位研究中,park等人发现由于天线和ic标签的性质,在使用射频识别技术对移动机器人导航定位和姿态估计时,总会出现定位不确定的问题。
为了在这些复杂的物理环境中保证系统的安全性和可靠性,国内外学者们提出了很多方法。例如为了克服传感器噪声,通过将地标特征作为机器人的外部参考源提出了反馈和验证机制。为了使自主机器人在远程感知的开发研究中应对环境的变化,tabak等人提出了一种算法,通过在环境中不同位置处收集数据来生成或是更新环境的3-d体积模型。此外,还可以利用机器学习方法、多传感器数据融合、视频反馈机制和力学的知识来不断地调整环境模型,从而适应环境的变化。但是在复杂的且变化的环境中,由于环境变化的不可预见性,系统模型是无法提前建立的,所以,需要研究新的方法来处理这种情况。
本发明将运行时验证(rv)方法引用到移动机器人系统中,监视移动机器人在不确定环境中的行为,捕捉和避免物理环境带来的危险问题。运行时验证方法作为测试、模型检测等传统质量保障方法的补充,不需要提前建立系统模型,而是针对程序产生的踪迹进行实时建模分析。
技术实现要素:
本发明的目的在于提供一种面向环境建模的移动机器人运行时验证方法,以针对解决传统的系统模型使移动机器人无法在随时变化的物理环境下捕捉和避免危险的问题,如图1所示。
移动机器人的基本组件大致分为控制器,执行器和物理系统三个部分。这三大部分要求处于同一个局域网中。首先,控制系统通过网络将控制命令发送给执行器。然后,执行器接收到命令后选择合适的执行命令传达给物理系统。最后,物理系统执行命令产生物理行为。其中,控制器确保控制程序能遵循属性规约发送正确的决策命令是保证系统安全性的一个关键点。因此,将运行时验证部署在控制器上实时地监听事件信息,并在物理系统行为违反属性规约的时候向控制器发送警示信息或是参数信息。在执行运行时验证时组合环境建模方法,能及时正确地处理物理环境对机器人行为的影响,使得监视模型更加准确和完整,也使得移动机器人的安全属性能够在环境动态变化的情况下一直满足。
本发明一种面向环境建模的移动机器人运行时验证方法,设计了模型定义、模型合并规则、模型转换规则和模型组合规则,将领域知识定义为环境模型后组合到监视模型中,环境建模方法的流程如图2所示。首先,按照设计的定义规则将领域知识形式化为只有一个系统参数和单个环境影响因子的数学模型。然后,设计合并规则将相同系统参数下仅有一个环境影响因子的数学模型合并为相同系统参数下有一个或多个环境影响因子的数学模型。接着,设计转换规则将环境模型表达成通用的伪代码形式。最后,设计组合规则将环境模型的伪代码组合到属性规约中,生成监视器执行验证,在环境变化时通过调整动态输入或参数范围适应环境的变化。此方法不影响运行时验证的执行过程,它作为监视模型建立的预备工作,在生成监控器前完成。本发明方法具体过程如下:
1.物理环境模型定义
物理环境对移动机器人行为产生影响的原因是系统中的某些参数会因为物理环境的改变而发生变化,具体体现为系统的动态输入发生偏差,从而影响控制系统的逻辑判断,故而波及到移动机器人的行为。要避免这种影响,首先需要确定系统参数和物理环境的关系,此关系由相关领域知识给出,最终根据设计的环境模型定义来统一表示。在此之前,先定义相关的符号表示,系统参数的集合s={s1,…,si,…,sn},环境参数的集合e={e1,…,ej,…,em},其中i、n、j和m都为正整数,集合中的每一个元素都用一个二元组(name,type)标识元素的名称和类型。下面是对物理环境的相关定义。
定义1(环境模型):环境模型由三元组m(s,e',r)表示一个系统参数s与一组对s产生影响的环境参数集合e'之间的关系。其中s∈s,
定义2(关系):一个关系r∈r由一个三元组(f,vc,l)定义。其中f是函数的声明部分,包括函数名、函数的参数列表和返回值类型。f指明了系统参数s在整个系统代码中出现的位置。vc是一个二元组(value(s),c(e')),其中c(e')表示当前环境条件,是一个包含e'的逻辑表达式。value(s)表示在条件c(e')下的系统参数s的值,它可以是一个数值,也可以是一个计算式。l表示在此条件下该环境参数对系统参数的影响级别。影响级别是一系列的正整数,数值越大代表影响程度越小。此影响级别应该由领域知识给出。
2.环境模型合并规则
一个系统参数可能会受到多个物理因素的影响,同样地,一个物理因素也可能会影响到多个系统参数。它们之间的关系是复杂的,在领域知识中的表达很简单,但是在运行时验证中是很难操作的,因为无法有效地避免同一个系统参数的不同影响因素之间的关系是完备且互斥的。因此需要通过设计合并规则来规范化和标准化这些独立的数学模型,此规则为后续将数学模型转换为伪代码提供逻辑基础。
假设有两个环境模型m1(s1,e1',r1)和m2(s2,e2',r2),如果s1=s2,则这两个对同一个系统参数建立的环境模型可以进行合并,假定合并结果为m(s,e',r),其中s=s1。具体的合并规则定义如下。
前提条件:系统参数相同是判断两个环境模型是否可以合并的前提条件。
模型计算规则:集合m={m1,m2,...,mm}和n={n1,n2,...,nn}做组合操作的结果是f(m,n),其中每两个元素取“&&”,得到的结果之间取“||”,即{(m1&&n1)||(m1&&n2)||…||(mm&&nn)}。其中下标m和n都为正整数。
第一模型合并规则:也叫模型内标准化规则,是一种针对关系的合并规则。具体为关系集合内的元素之间作“||”操作,“||”为逻辑中的“或”。其中vc执行“||”操作,f和l不变。如m1中r1={r11,r12…r1n},执行此规则后r1={r11||r12||…||r1n}={f1,(vc11||vc12||...||vc1n),l1},m2同理。
第二模型合并规则:如果e1'=e2',f1!=f2即系统参数s在系统代码中的函数位置不同,那么环境模型则互为独立,不需要合并。为了规范化书写,m可以写成(s,{e1',e2'},r1∪r2),也可以保持不变。例如:m1模型中r1=(f1,vc1,l1),m2模型中r2=(f2,vc2,l2),f1!=f2,规范化后m的r={r1∪r2}={(f1,vc1,l1)∪(f2,vc2,l2)}。
第三模型合并规则:也叫模型间标准化规则。如果e1'!=e2'且f1=f2,即系统参数s的物理影响因素不同,但是在系统代码中的函数位置相同。合并规则为e={e1',e2'},关系r中f=f1,vc执行模型计算规则,l取l1和l2中的最小值,即l=min{l1,l2}。在组合条件下,系统参数value(s)的值取受环境影响程度最大的值,即worst{value1(s),value2(s)}。
在这里不存在e1'=e2'且f1=f2的情况,因为在一个环境模型m(s,e',r)中,对于一个系统参数s和特定的e',r是具有完备性的。当环境模型不符合合并规则的前提条件时,执行第一模型合并规则,对自身进行规范化操作。第二模型合并规则和第三模型合并规则是模型间的合并规则,其中系统参数是否在同一个函数中是决定环境模型之间是否可以合并的关键。多个模型进行规范化合并时,两两执行合并规则直到不满足合并的前提条件。存在多种物理因素影响多个系统参数的情况时,依据模型合并的前提条件,分别将具有相同系统参数的数学模型合并。
3.环境模型转换规则
建立环境模型的最终目的是要将此模型组合到运行时属性规约中,使得在线监视过程能够适应环境的变化,及时地处理复杂环境对物理系统(cps)的影响,从而让安全属性在复杂的物理环境中一直满足。在组合之前,为了能够简单明了地表达和实现环境模型,本文提出将伪代码作为中间转化代码。伪代码(pseudocode)是一种算法描述语言,它结构清晰,代码简单,可读性好,并且类似自然语言。对于任意一个环境模型m=(s,e',r),关系为r=(f,(value(s),c(e')),l),转换规则分为以下几步:
(1)根据关系中f的信息生成对应函数。
(2)变量声明:在函数中,如果s不是函数的本地参数,生成一个s变量并初始化。
(3)根据(value(s),c(e'))生成条件判断语句,其中c(e')为判断条件,value(s)为在当前条件下s的值。其中特殊符号“||”在程序中代表“elseif”。
(4)并集符号“u”出现则重新生成一个新的函数,执行(1)-(3)步。
环境模型转换为伪代码的关键是(value(s),c(e'))对的逻辑转换,将环境对系统参数的关系转换为程序逻辑语言,便于之后将模型伪代码组合到属性规约中。第(2)步中的变量声明是伪代码中的语法需要,在监视模型中,s由规约中的事件定义程序捕获得到。
4.模型组合规则
组合规则的目的是要将伪代码实现为具体编程语言的程序后组合到属性规约的事件操作部分,具体组合规则分为以下几个步骤:
(1)遍历所有属性规约中的事件定义,选择事件切入点的函数和环境模型代码中的函数f相同且在事件操作中含有系统参数s参与计算的事件。
(2)选定代码块:其中代码块的开始是第一条系统参数s在赋值等号右边的语句,代码块的结束标志是最后一条系统参数s在赋值等号右边的语句。
(3)将代码块作为整体替换环境模型对应伪代码中if条件控制的执行语句。如果存在一个代码块对应多个模型代码的情况时,即多个模型代码中的系统参数s出现在同一个表达式中,此时将所有模型代码中的if条件进行数学组合操作后的新模型代码替换原代码块。
(4)赋值号右边的s被置换为环境模型对应的伪代码中相同判断条件执行语句中的s的新值。
(5)将最终形成的函数代码插入到当前事件中替换代码块。
属性规约事件定义中的连接点是切面插入应用程序的地方,可以是实例和静态方法的调用和执行、实例域和静态域中取值与设值的调用、构造器的调用和执行等操作。而切入点的作用则是过滤这些连接点,匹配符合条件的连接点从而激活事件。这里事件切入点的函数指的是事件定义中<aspectjadvice>中的指定匹配条件的函数,判断函数“相同”的充要条件的是返回值,权限修饰符和函数的参数列表都相同。在组合规则中,代码块的划分是关键,将修改目标锁定在系统参数参与模型计算的语句上以便于添加环境条件。
本发明一种面向环境建模的移动机器人运行时验证方法,其优点及功效在于:该方法能及时正确地处理物理环境对机器人行为的影响,使得监视模型更加准确和完整,也使得移动机器人的安全属性能够在环境动态变化的情况下一直满足。此方法不影响运行时验证的执行过程,它作为验证模型建立的预备工作,在生成监控器前完成。
附图说明
图1面向移动机器人的运行时验证示意图
图2本发明环境建模方法的流程图
具体实施方式
下面结合附图和实施例,对本发明的技术方案做进一步的说明。
以下先介绍本发明实施例所基于的硬件装置和数据采集结果。
(一)硬件装置
本发明实施例的实验平台选用了ev3机器人,它可以加载多种传感器,如超声波传感器,触摸传感器,陀螺仪等。其中,本发明实施例主要用到超声波传感器,触摸传感器和两个大型电机(内置角度传感器)。
除此之外,ev3还兼容lejos第三方库来支持java语言编程,lejosev3既可以运行下载好的单体java程序,也可以通过蓝牙、无线或usb与远程控制端进行交互,接受远程控制。本发明实验设计场景为移动机器人匀速行驶执行避障任务,单次执行时间至少需要十分钟,传感器采样频率设为1s,同时,已知超声波传感器的测量精度为1cm,测量距离为3~250cm。
(二)数据采集
在实验中发现当机器人以恒定速度sets(m/s)行驶时,实际行驶速度将受到电池电量的影响。为了研究具体的影响关系,在当前实验条件下,从0.42(m/s)到0.78(m/s),对ev3进行了两千多次试验。
从试验可以看出,设定速度sets和电量battery之间存在以下的数学关系。
s1:当设定速度sets≤0.48时,sets不受电量影响。
s2:当sets∈(0.48,0.66],并且满足battery<=(sets+0.1347)÷0.1024时,存在影响关系为:speed=0.1024×battery-0.1347。
s3:当sets∈(0.48,0.66],并且满足battery>(sets+0.1347)÷0.1024时,sets将不会受到电量的影响。
s4:当速度sets>0.66时,存在关系speed=0.0876×battery-0.0056。
当速度值设定的越小,机器人的行驶速度受电量的影响越小,越容易保持设定速度行驶。反之,当速度的设定值越大,受电量变化的影响就越大,实际行驶速度会出现偏差,甚至是很难达到设定值。
实施例
1.建立环境数学模型
当移动机器人以固定速度sets(m/s)匀速行驶时,实际行驶速度speed(m/s)将会受到电池电量battery的影响,这里speed为一个系统参数,battery是一个对系统参数产生影响的因子,其中speed=(speed,double),battery=(battery,double)。依据上述数据采集结果中的四种场景为例建立数学模型。
本实施例涉及到一个系统参数speed和一个物理因素battery之间的关系。假设关系为r0,则本实施例对应的数学模型应该为m0=(speed,{battery},r0)。为了便于撰写,为复杂的表达式定义别名如下。
c1:=(sets≤0.48)
c2:=(0.48<sets&&sets<0.66&&battery<=(sets+0.1347)÷0.1024)
v2:=(speed=0.1024×battery-0.1347)
c3:=(0.48<sets&&sets<0.66&&battery>(sets+0.1347)÷0.1024)
c4:=(sets≥0.66)
v4:=(speed=0.0876×battery-0.0056)
环境因素对系统参数的影响程度应由领域知识中获得,从1开始,数值越大代表影响程度越小。在此实施例中,由于只有一个环境因素battery,所以假设电池电量对速度的影响级别为1,变量speed存在于函数handle中。根据数据采集中s1到s4这四种情况,关系r0={r01,r02,r03,r04},具体如下:
r01=(handle,(speed,c1),1)
r02=(handle,(v2,c2),1)
r03=(handle,(speed,c3),1)
r04=(handle,(v4,c4),1)
2.对环境模型进行合并
在模型m0(speed,{battery},r0)中,关系为r0={r01,r02,r03,r04}。因为只有一个模型,所以只需要对自身进行规范化,执行第一模型合并规则后,r0=(handle,((speed,c1)||(v2,c2)||(speed,c3)||(v4,c4)),1),展开式(2)如下:
3.将环境模型转换为伪代码
对模型m0(speed,{battery},r0)进行了标准化,得到关系r0=(handle,((speed,c1)||(v2,c2)||(speed,c3)||(v4,c4)),1)。接下来通过执行以下步骤,将m0转换为伪代码。
(1)依据r0中的f生成handle函数。
(2)声明speed变量,并赋值为0。在使用编程语言实现时,如果该变量已经存在于函数的参数列表中,则步骤2可省略。
(3)根据关系中的vc关系建立if逻辑部分。
最终m0伪代码如下表1所示。
表1
将数学模型转化为伪代码后,通过以下组合规则将伪代码实现为具体编程语言的程序并组合到属性规约中,最后利用运行时验证工具对模型中描述的属性进行安全性验证。
4.将伪代码与属性规约组合
生成m0的伪代码后,使用java语言编写函数实现伪代码中的逻辑,按照组合规则将其插入到属性规约中,步骤如下:
(1)遍历所有属性规约的事件定义,并选择函数与handle相同的事件。如在turn属性规约中的setparameter、forward和turnnotification三个事件中,只有setparameter事件满足要求,且系统参数speed参与了危险距离danger变量的赋值计算。
(2)选定第一条speed在赋值等号右边的语句作为代码块的开始,最后一条speed在赋值等号右边的语句作为代码块的结束划定代码块区域。具体如下:
如上述第9行代码所示,代码块包含danger=0.3×speed+0.01+0.146一条语句。
(3)将代码块作为整体替换模型代码中if条件控制的执行语句。
(4)将赋值号右边的speed置换为环境模型代码中相同判断条件执行语句中的speed的新值。
最后,所获得的结果如下:
本发明设计了模型定义语言将领域知识建模为环境模型。初始建立的环境模型描述了一个系统参数与单个环境影响因子之间的数学关系。然后,设计了合并规则将相同系统参数下仅有一个环境影响因子的环境模型合并为相同系统参数下有一个或多个环境影响因子的环境模型。接着,设计了转换规则将环境模型表达成通用的伪代码形式。最后,设计组合规则将伪代码组合到属性规约中执行验证。此方法可以通过在环境变化时调整动态输入或参数范围来正确地及时处理复杂环境对移动机器人的影响。