面向对象的无人车电源故障检测专家系统设计*
2019-07-10杨一鸣汪贵平
杨一鸣 汪贵平
(长安大学,西安 710064)
主题词:面向对象 专家系统 电源检测 无人车
1 前言
无人驾驶汽车车载用电设备和供电需求增加,对系统的可靠性也有非常严苛的要求,如果车辆运行过程中出现发电机故障、配电线路故障、各传感器模块电源故障并导致设备掉电等情况,无人车会丢失实时数据,系统无法继续获取数据和进行参数的更新与下发。近年来,故障诊断系统发展迅速,很多学者利用神经网络或改进神经网络进行电源故障检测系统的设计[1-3],但是基于神经网络的故障检测系统未能利用专家经验,另外,专家系统的训练样本需要大量的故障数据,通过无人驾驶车辆日常运行捕捉电源系统故障需要大量的时间;小波分析作为基于信号处理进行故障诊断的一种方法而被广泛采用,但存在小波基、尺度和平移量选择困难等缺点[4]。上述故障诊断方法的融合是未来故障诊断系统的发展趋势:Gofuku等人通过引入估计智能体、支持向量机(Support Vector Machine,SVM)状态辨识器、小波变换异常检测器和基于案例的推理机来构建混合故障诊断系统[5],取得了不错的成效;北京航空航天大学的张莉针对航空电源提出了一种多智能体信息融合故障诊断方法,通过多传感器信息融合和多智能体技术融合提高故障诊断的可靠性和系统的可扩展性[6]。但融合的做法使得故障诊断系统的复杂程度大幅增加,提高了实现难度和成本。近年来,专家系统在故障诊断方面取得了很大进展并进行了实际部署,很大一部分在知识表示上使用了产生式规则,一般的产生式规则需要反复进行“知识匹配—冲突消解—产生结果”的过程[7],匹配较为费时。为提升检测效率,本文采用基于深度优先的产生式匹配策略,在系统构建和知识表示方面应用面向对象的设计方法,设计结构简单且高效的故障诊断系统,以期提升系统的灵活性和可扩展性。
2 系统描述
专家系统的逻辑推理核心是知识库和推理机。演绎推理、归纳推理等典型的经典逻辑推理往往遵循标准逻辑规范,依赖于确定度高的事件和现象,对于车辆电源系统复杂故障诊断而言,其灵活性和适应性不足[8],而启发式推理则有着与人类思维方式更加接近的推理过程[9]。本文将启发式推理与面向对象的程序设计相结合,进行无人车电源故障检测专家系统的设计。按照文献[10]中的方法,以对象为中心,将对象的属性、领域知识、方法等进行封装,在提高程序健壮性的同时赋予程序模块化的特征。
无人车电源系统可以分为供电模块、控制模块和传感器模块。供电模块包括发电机、整流器和车载电池等;控制模块包括汽车线控系统CAN网络中的各类ECU;传感器模块包括激光雷达、相机、组合导航和交换机等。电源监测系统用于对无人车电源系统进行检测,其总体结构如图1所示,主要包括供电模块、故障检测专家系统、连接在CAN网络上的汽车微控制器群和连接在以太网上的无人车车载设备。
图1 无人车电源监测系统结构
3 面向对象的专家系统设计
面向对象的专家系统将传统专家系统用类封装起来,传统专家系统主要包括征兆提取模块、知识库、推理机和人机接口。参照文献[11]对程序设计的考量,为避免结构化程序设计带来的繁琐算法,对每个模块单独定义了不同的类:文件类、接口类、会话类、属性库类和规则库类,系统结构如图2所示。其中,规则库类是故障诊断专家系统的核心。
以往的面向对象的专家系统往往将规则对象的属性作为真实对象的属性,存在于对象内部,这样可以保留面向对象的知识表示方法的封装和继承的特点,便于规则的传递。但在故障情况复杂的无人车电源系统中,如需更新或修改对象规则,需要对整个对象重新进行编译,系统易用性较差。本文使用文献[12]中的方法,单独定义规则库类,存放于外部存储空间,系统进行故障诊断时调用该规则库,这样可以有效提升系统的灵活性和可扩充性,有效解决异构对象重用的问题。相比于一般的面向对象设计,本系统规则库与文件对象相互独立,规则库并不是对象的一个属性,在对象发生继承时规则不能有效传递,但这并不影响文件类对象引用规则库。
图2 面向对象的专家系统结构
4 面向对象的专家系统实现
4.1 事件的获取
为了全面、直观地了解各事件及其对应的前、后件,本文引入故障拓扑模型对无人车电源系统故障进行归类和分析,一般性故障问题可以采用文献[13]中建立故障树模型的方法进行分析,但是无人车电源系统故障具有模糊性和不确定性,故障之间存在着复杂的联系,一种故障可能对应多种故障原因,一种故障原因也可能对应多种故障,并无明确的层次结构,所以简单的故障树模型并不适用于该故障检测专家系统。无人车电源系统故障拓扑模型如图3所示,各故障模块之间存在复杂的耦合关系,一个模块发生故障会影响其他模块的工作。无人驾驶系统自上而下一般分为环境感知层、规划决策层和车辆控制层。规划决策层及车辆控制层基于Linux系统搭建,自动驾驶传感器信息的传递通过节点的发布和订阅进行;决策层根据传感器信息进行路径的规划和车辆控制量的计算,车辆的控制命令通过CAN总线下发[14-15]。
使用专家系统的征兆提取模块,车辆电源系统故障的检测通过两种方式进行:传感器模块故障通过对订阅的各传感器节点发布的主题(Topic)的监测和分析完成,一旦Topic数据消失或存在异常,则判定故障发生;供电模块和控制模块故障通过周期性读取并解析CAN总线上对应协议的数据流实现。
图3 无人车电源系统故障拓扑
无人车电源系统各模块故障获取原理如图4所示。捕捉到故障事件后需要运用推理规则对故障原因和故障位置进行推理。
图4 无人车电源系统故障获取原理
4.2 规则的设计
基于产生式规则的专家系统可表示为“Ifpthenq”的形式,其中p为触发规则的条件,q为结论或中间命题。在面向对象的专家系统设计中,用P表示规则前件,Q表示规则后件,前件一般由对象的属性和方法组成,后件由方法组成。前件、后件的可信度由规则前件中所有的比较节点确定。虽然规则独立于对象,但为了进行推理,要把规则在形式上对象化,首先定义比较对象为:
在此基础上进一步定义比较节点为:
用于描述规则的规则节点为:
规则置信度由前件置信度和后件置信度共同决定[16],当前规则的置信度为:
式中,ECol为比较对象E的表达式,其名称为A;E1和E2为两个不同的比较对象;T为比较类型,这里选择置信度比较;N为规则名称;P为规则的前件集合;Q为规则的结果集合;cf为规则的置信度;ef为规则执行状态标志位。
在电源故障诊断中,将规则对应的前件和后件合并,同时合并其置信因子cf,最终合并的置信因子为:
规则R的执行状态标志位efR的值为:
其中,置信因子的比较阈值cf-R由该类型故障全部历史置信因子cfRi(i=1,2,…,n)取平均得到:
式中,cfp和cfq分别为规律p和规律q对应的置信因子,这里p和q分别对应规则前件、规则后件或者2个规则前件;n为该类型全部历史故障数量。
4.3 面向对象的规则库
规则库用于存放电源系统故障规则,是规则库类的私有成员。在规则库类中定义成员函数进行规则的更新与管理,类的对象可以通过公有函数访问类的私有成员变量。规则类的公有部分主要包括规则名称、规则对应的前件集合P和后件集合Q、浮点型置信因子cf、布尔型规则执行状态标志位ef以及规则所属的类别g,规则类的定义过程为:
其中,成员RuleName为对规则的名称描述。
定义规则类后,定义规则库类Rule_Lib进行规则层面的管理,具体实现为:
在系统习得新的故障规则时,面向对象的规则库类对新对象进行创建与初始化,形成新的规则对象并将其放入规则列表,随后完成新规则的关系生成,新对象的创建与更新过程如图5所示。
图5 对象的创建与更新
在完成规则库的设计后,推理机即可利用捕获的故障事件和相应的规则进行故障原因的推理和定位。
4.4 推理机的设计
推理机的性能与构造一般与规则的表示方式和组织方式有关,与规则的内容无关,这可以保证推理机与规则库的相对独立,本文设计的专家系统推理机使用改进的深度优先搜索(Depth First Search,DFS)算法生成动态树,在电源故障诊断中,DFS算法的使用更符合故障诊断的判断逻辑,比广度优先算法更能满足检测系统的要求[17]。如果利用静态树模型进行故障诊断,无人车电源检测系统各模块间的复杂关系会导致静态树的纵深过长、节点过多、重复率上升,进而占用大量计算资源,对系统性能产生不利影响[18]。利用DFS算法抽取故障关系表中相应节点前件中的信息,并按照树结构对节点前件进行排序,依据节点等级和排序结果动态生成事件树模型。文献[19]~文献[20]使用动态树进行故障的推理和诊断,计算相应的故障概率并将其作为故障原因判断的重要依据,参照此方法,本文定义动态树类,描述动态树节点与故障规则拓扑表中故障前、后件的映射关系,以激光雷达模块故障为例,首先建立对应的故障关系如表1所示。其中,R1代表雷达模块故障,C1代表相机模块故障,G1代表组合导航模块故障,I1代表逆变器故障,S1代表交换机故障,B1代表电池故障。
表1 激光雷达模块故障关系
随后,按照文献[21]中的方法将故障关系表中的节点取出重新排序成树形结构,排序算法如图6所示。
图6 DFS算法生成动态树算法
这样,相应模块的故障关系即转换成了动态树模型。深度优先算法的应用依赖规则库中的规则关系,面向对象的规则表示方法为:
事件可以为初事件、中间事件或最终事件。导出规则(Educe Rule)指可以使事实变成结论的规则,归纳规则(Iduce Rule)指以该事实为前提的另一个规则,对应动态树同一级上的相邻2个节点。类RuleDoc中的成员UsedRules调用上一个规则文件对象中的CurRules列表,成员UsedRules和成员CurRules共同为故障诊断专家系统提供推理,Rule Relation用于说明当前对象使用的规则。
以GPS模块电源故障为例,定义传感器模块故障规则如表2所示,其中,Rsi表示传感器模块故障规则,Rpi表示供电模块故障规则,In_Service为正常工作状态,Error表示故障状态,no_SC表示模块未出现短路故障,no_OC表示模块未出现开路故障。
表2 传感器模块电源故障规则
表3给出了GPS模块故障的对应关系,Rs1和Rs2是其中的2条规则。
表3 传感器模块电源故障规则关系
以供电模块故障为例,当事件PS_Error出现时,对应规则Rs1和Rs2,推理机首先检查对应的第1个导出规则:如果该规则的ef位为1,则代表规则Rs1生效,Rs1中对应的事件GPS_Error、GPS_no_SC和GPS_no_OC均成立;如果规则Rs1的ef位为0,则推理机寻找第2条规则Rs2并读取ef位的值。如果规则Rs1和Rs2的ef位均为0,则表示事件PS_Error大概率不会发生,这时推理机将从规则关系列表中寻找与事件PS_Error有关的归纳规则Rp1和Rp2,并将其ef位均置为0。
推理机的推理过程如图7所示。该改进的DFS算法与传统的DFS算法相比,在根据推理结果对规则标志位进行置位或复位的同时,可以对假设的事实和所有规则之间的启发式关系进行反向归纳[22]。所以应用改进的DFS算法推理机可以快速修正搜索路径,缩小搜索范围,减少验证规则的重复工作,提高推理效率。
图7 启发式推理流程
5 仿真与试验验证
分别利用仿真测试和实车测试检测无人车电源检测系统在模拟和真实环境下的故障诊断性能。
5.1 仿真验证
仿真测试通过计算机设置故障类型和故障出现时间,观察不同电源故障设置下电源故障检测专家系统能否准确判断故障类型并快速定位故障位置。
以雷达模块故障为例,在仿真程序中设置中断,中断到来时将雷达数据重定向在储存盘中,制造雷达数据丢失故障。仿真测试结果如图8所示,软件中规则库栏实时显示专家系统的推理过程,该系统还具备手动扩充规则库的功能。
图8 雷达模块故障仿真测试结果
雷达故障发生时,系统先在规则库中寻找相应的规则以及对应的规则关系,然后对导出规则和归纳规则的执行状态标志位进行判断,当未找到匹配故障时,寻找与导出规则或归纳规则同级的相邻规则再次进行匹配。该仿真测试结果为未找到匹配的故障,因为仿真过程只是人为中断了雷达数据的传输,雷达模块供电并未出现故障,其他模块没有受到影响,系统检测到的信息有限,推理机搜寻不到对应的推理规则,进而无法得到推理结果。
5.2 试验验证
为了保证测试安全,试验在无人车测试台架上进行,如图9所示。
图9 无人车电源故障检测专家系统台架测试
无人车在测试台架上进行无人驾驶场景模拟测试,在车辆正常运行的情况下断开组合导航模块供电,观察无人车电源检测系统推理过程和推理结果,如图10所示。
由图10可知,电源检测系统获取故障信息后通过专家系统有效地匹配出相应的故障规则并找出规则关系,确定了导出规则和归纳规则,利用这些规则确定了故障类型并进行了故障定位,该故障诊断专家系统达到了设计要求。
图10 无人车电源故障检测专家系统台架测试结果
随着运行时间和运行场景的增加,该专家系统可以不断地对知识库和规则库进行完善,系统性能将进一步提升。
6 结束语
针对无人车电源系统复杂的拓扑结构,本文运用改进的DFS算法和动态树生成算法进行车辆电源故障检测专家系统的设计,并采用面向对象的设计方法,使得专家系统具备故障诊断和定位能力。改进的DFS推理机在进行推理的同时,对假设的事实和所有规则之间的启发式关系进行反向归纳,可以大幅提高推理效率。面向对象的设计方法赋予系统模块化的特征,也使得知识库和规则库的更新和扩充更加方便。简单高效的人机接口可以对故障进行实时监测,同时具有故障查询和知识库管理的功能。通过不断学习和完善,该系统可以更加精确地判断故障类型和精准地定位故障位置,减少检测人员的工作量,提高车载电源系统的故障检测效率。