城市自动驾驶决策系统安全分析与策略设计
2021-01-08陈君毅刘力豪周堂瑞邢星宇
陈君毅,刘力豪,周堂瑞,邢星宇
(同济大学汽车学院,上海201804)
安全是汽车的基本要求,自动驾驶系统的出现赋予了汽车安全性新的内涵。其中因外部环境因素、功能局限与人为误用导致的安全问题属于预期功能安全的研究范畴[1]。决策系统是自动驾驶汽车的“大脑”,其功能为根据环境及自车信息,决策获得安全舒适的驾驶行为,指导自动驾驶汽车的运动,对于乘员人身安全有着至关重要的影响,其安全性值得深入分析。
决策系统是一个典型的软件密集型系统,相比传统的汽车电子电气系统它承担更高等级的驾驶任务,具备更加复杂的逻辑。传统安全分析方法,例如基于事件链或流行病学模型的分析方法认为事故的根本原因在于系统中单个或多个组件的故障,难以覆盖系统功能局限与环境扰动带来的危险;且在分析逻辑复杂的软件密集型系统时效率有限[2],难以应用在自动驾驶决策系统的安全分析上。
囿于传统安全分析方法的局限,近年来部分学者将以STPA方法为代表的现代安全分析方法引入自动驾驶系统的安全性研究中。Mahajan等[3]将STPA方法应用于车道辅助保持系统(lane keeping assistance,LKA),得到LKA系统的安全要求;Abdulkhaleq等[4]对一个使用有限状态机的汽车自适应巡航系统(adaptive cruise control,ACC)进行了STPA分析,得到ACC系统的安全要求;Bagschik等[5]在德国高速公路无人驾驶保护车(仅具备跟车行驶功能)上应用STPA方法,得到了该车的危险事件;笔者在前期研究中提出了一种基于STPA的符合ISO 26262的安全分析方法,并应用于一辆SAE L3级的自动驾驶清扫车上[6],导出了该车的功能安全要求。
上述研究使用STPA方法对自动驾驶系统的安全性进行分析,但仍有两个关键问题未被解决。一是研究仅进行安全分析,止于导出危险事件或者提出安全要求,缺乏对分析结果的进一步应用,也未验证分析结果的合理性和有效性;二是分析多按照功能展开且多数仅针对较低等级自动驾驶功能,缺少对同时具备巡航、换道、泊车等多种功能的高级自动驾驶决策系统的研究。在更高等级自动驾驶系统中,系统复杂性的提升给分析带来了新的挑战。
针对上述问题,本文提出一种涵盖安全分析、策略设计以及试验验证三个环节的安全性开发方法,并在一个LV4城市自动驾驶决策系统的原型阶段进行了应用。
1 自动驾驶决策系统安全性开发方法
现有安全标准[1,7]要求在自动驾驶系统开发过程中开展安全分析。对于高等级自动驾驶系统,由于运行场景和内部逻辑的复杂化,采用整体分析的视角将导致难以利用系统内部结构有效信息。而典型架构的自动驾驶系统的感知认知、决策规划和控制执行模块解耦度高,且根据各模块的不同特点适合采取不同的分析方式。基于Leveson[8-9]提出的STPA方法,结合高等级自动驾驶决策系统的特点,本文提出一种面向自动驾驶决策系统的安全性开发方法,如图1所示。
该方法以系统本身的功能作为分析起点,结合分析对象的具体程序构建控制结构图和过程模型;并基于分析结果增加了策略设计以及试验验证步骤,形成自动驾驶决策系统安全性开发的迭代闭环。方法共包含8个步骤:
(1)建立系统控制结构。根据系统功能定义建立整车的控制结构,从决策系统的原型程序中提取过程模型;
(2)确定安全关键控制行为(control action,CA)。在整车控制结构中确定与事故直接相关的控制指令;
(3)识别不安全控制行为(unsafe control action,UCA)。考察各安全关键控制行为的错误模式,识别系统的不安全控制行为;
图1 本文所提出的安全性开发方法Fig.1 Proposed safety development method
(4)分析不安全控制行为原因。原因可以逐级往前推理,对决策规划系统而言,可以推理到感知结果;
(5)识别潜在危险事件;
(6)试验验证危险事件;
(7)设计安全策略(safety strategy,SS)。针对经验证有效的危险事件,通过改进原系统或者限制使用场景的方式,使安全性约束(safety constraint,SC)重新得到保证;
(8)试验验证安全策略。
以上8个步骤最终所得的有效安全策略在系统中经过实现,为一轮完整的安全迭代过程。在系统经过修改后,可进行重新分析和回归测试,通过多次迭代,使得整体系统风险降低至可接受水平。
2 自动驾驶决策系统安全分析
所提出的安全性开发方法在一个L4级城市自动驾驶决策系统[10]的原型阶段进行了应用。该决策系统基于有限状态机构建,并在MATLAB/Simulink中完成了原型实现,涵盖4个子功能:①沿全局路径的循迹,包括无前车的定速巡航和有前车的跟车巡航;②主动换道,在巡航通行效率过低时会考虑进行主动变道;③路口通行,通过交通信号灯控制的路口;④自主泊车,在路边停车位进行垂直车位泊车或者平行车位泊车。
2.1 建立系统控制结构
根据上述系统功能定义确定整车控制结构,如图2所示。城市自动驾驶系统可建立包含5个层次的控制结构,分别为:感知层、决策层、控制层、执行层和环境层。环境层元素的信息通过传感器被感知层获取,经过处理获得决策层所需的输入;决策层综合环境和自车信息,决策出车辆下一时刻应该采取的动作,即期望速度和期望位置;控制层接收决策层的输出,将其转化为底层控制指令供车辆执行机构使用;执行层是整车的物理实体,直接与环境层交互。
图2 整车控制结构图Fig.2 Control structure of autonomous vehicles
本文城市自动驾驶决策系统使用状态机(finite state automata,FSA)构建,从其Simulink程序中提取核心状态机模型,反映系统在决策过程中的控制逻辑;并结合功能定义构建决策系统的过程模型,如图3所示。
2.2 确定安全关键控制行为
图3 决策系统状态机过程模型Fig.3 FSA-based process model of the decisionmaking system
从整车控制结构图中确定安全关键控制行为,即直接与事故相关的控制信号或指令。依据是否直接与现实世界交互这一条件,控制结构图中的5个层级可以分为物理层和逻辑层。物理层包括执行层和环境层,位于控制结构图的底部;逻辑层包括感知层、决策层和控制层,位于控制结构图的上游。事故(人身安全、财产损失)发生在物理层中,因此逻辑层对物理层施加的控制行为,是自动驾驶决策系统对现实世界造成影响的途径。如果逻辑层对物理层施加了错误的控制行为,则可能导致事故发生。这一路径上传递的控制行为即安全关键控制行为。对自动驾驶决策系统而言,它包括了期望速度(A1)和期望位置(A2)两个控制行为,记为集合A。
2.3 识别不安全控制行为
通过考察安全关键控制行为的错误模式,识别不安全控制行为。在STPA通用分类方法[9]的基础上提出了以下8种错误模式,用M表示它们的集合:
(1)M1需要提供控制信号,但未提供;
(2)M2不需要提供控制信号,但提供;
(3)M3提供了正确的控制信号,但时机过早;
(4)M4提供了正确的控制信号,但时机过晚;
(5)M5提供的控制信号持续时间过长;
(6)M6提供的控制信号持续时间过短;
(7)M7提供的控制信号数值过大;
(8)M8提供的控制信号数值过小;
值得注意的是,这些错误模式并非所有情况下都会导致危险。例如,在跟车时即使提供较小的期望速度,也不会导致自车与目标车发生碰撞,只是导致行驶效率变低。所以需要对不同运行情况作分别分析。对城市自动驾驶决策系统而言,可以用功能状态指代这些不同的运行情况。从状态机过程模型中可提取出以下9个功能状态,分别为:定速巡航(S1),跟车巡航(S2),换道(S3),换道后保持(S4),交通信号灯处理(S5),路口中决策(S6),寻找车位(S7),平行泊车(S8)和垂直泊车(S9)。用S表示功能状态的集合。
作集合A、M和S的笛卡尔积,可得到潜在不安全控制行为集,记为Up,即
STPA方法要求分析人员依据经验对潜在不安全控制行为进行筛选,排除在特定情况下不成立的选项。筛选过程可表示为式(2),其中f(·)代表了筛选规则,F表示用于过滤的布尔矩阵,最终结果记为U。这样,识别不安全控制行为的问题转化成构建过滤矩阵的问题。
以自主泊车功能(S7、S8、S9)为例,说明不安全控制行为识别的过程。寻找车位时(S7),车辆保持匀速沿道路前进,通过超声波雷达扫描库位深度,判断泊车是否可行并辨别库位类型,决策系统应该输出恒定为2 m·s-1的速度和0位置(与全局路径偏移为0);寻位成功后,自车根据库位类型选择垂直(S8)或平行方式(S9)泊入库内,决策系统输出2 m·s-1的速度以及轨迹规划器决定的位置。根据上述分析,建立过滤矩阵如表1所示,矩阵元素取值为1或0,分别表示该位置的潜在不安全控制行为是否应纳入考虑。例如,(A1,M1,S7)寻找车位时,需要提供期望速度但未提供,会导致车辆停在原地,任务无法完成,但不会导致事故发生,所以过滤矩阵中对应位置的值为0,该潜在不安全控制行为不被考虑。
表1 自主泊车功能的不安全控制行为Tab.1 UCAs of the auto-parking function
对于完整系统,共分析获得70个不安全控制行为。各功能状态的不安全控制行为数目如表2所示。
表2 各功能状态的不安全控制行为数目Tab.2 UCA Numbers of each function state
2.4 分析不安全控制行为原因
考察控制结构中决策层的信息流,可知其最终输出结果取决于三个方面:决策系统自身、感知层输入的环境信息和感知层输入的定位导航信息。因此不安全控制行为的原因可被归纳为以下三个类别,记为CR(category of reason):
(1)CR1决策系统未获得正确的环境信息:感知层未提供给决策层正确的环境信息;或者提供了正确的信息,但传输途径出现问题。结果表现为决策系统不能正确获取周围障碍物与交通参与者的信息;
(2)CR2决策系统未获得正确的车辆状态:感知层未提供给决策层正确的车辆状态信息;或者提供了正确的信息,但传输途径出现问题。结果表现为决策系统不能正确获取自车的位置与速度信息;
(3)CR3决策系统自身存在安全缺陷,包括:CR3.1状态转移条件设置出错或判断出错,结果表现为决策系统转移到了与实际任务不符合的状态;CR3.2转移条件过于敏感引起状态震荡,表现为决策系统在两个或多个状态之间反复切换,不能正常输出控制指令;CR3.3处于正确的状态,但计算出了错误的结果。由决策系统参数设置有误或算法设计缺陷造成;CR3.4设计时缺少必须状态,导致决策系统不具备处理相关危险的能力;CR3.5决策系统计算得到了正确的输出,但输出通道上存在干扰、时延等问题,导致最终输出的期望速度和期望位置信号与计算结果不一致。
结合所得无人驾驶决策系统自主泊车功能的不安全控制行为,最终分析得到了10个原因,它们各自所属的类别,以及和不安全控制行为之间的关系如表3所示。
表3 自主泊车功能的不安全控制行为原因Tab.3 Reasons of UCAs of the auto-parking function
2.5 识别潜在危险事件
根据分析获得的不安全控制行为及其原因构建潜在危险事件。将事故定义为车辆与行人、车辆或者障碍物发生碰撞,造成人身安全或财产损失,系统危险为导致事故发生的宏观车辆行为,由不安全控制行为引发。危险事件被定义为因为不安全控制行为原因R,造成系统危险H,与环境中元素发生事故D,可以使用如(Ri,Hj,Dk)的有序元组进行形式化描述。对该城市自动驾驶决策系统可推导出以下系统危险,并提出对应的安全性约束C,如表4所示。表中还展示了事故、系统危险、不安全控制行为以及不安全控制行为原因之间的追溯关系,根据定义即可构建得到系统的危险事件。
表4 自主泊车功能事故、系统危险、安全性约束Tab.4 Accidents,hazards,and safety constraints of the auto-parking function
2.6 试验验证危险事件
以危险事件(R9,H8,D3)为例,说明危险事件的验证步骤。危险事件为因决策系统缺少紧急制动状态,导致泊车过程中车辆未避让闯入库位的行人,发生碰撞。使用PreScan联合MATLAB/Simulink的仿真平台进行了验证,试验场景如图4所示。自车为黑色车,将泊入中间平行库位,在车辆开始泊车后,有一行人走入库位中。
图4 自主泊车工况典型危险试验场景Fig.4 Testing Scenario of the auto-parking function
安全性分析指出,由于自车在完成库位检测开始倒车入库后,其行为被确定,不再受外界环境影响,也不具备紧急制动机制。如果此时有行人进入车位,自车不会避让。尽管此时车速较低,但仍然可能发生碰撞。通过仿真环境对安全分析结果进行验证,试验结果表明,自车最终会与行人发生碰撞,碰撞过程如图5所示。
3 安全策略设计及验证
3.1 设计安全策略
对经过验证的危险事件,可以针对性设计安全策略,以使安全性约束重新得到保障。安全策略的设计可从正向和反向两个方面进行。正向为提升系统本身的能力,修复其错误,使系统在原本的潜在危险场景下不发生事故;反向为限制系统的运行场景,通过要求、标准或法规禁止系统在原本的潜在危险场景下运行,达到避免事故的目标。从正向和反向两个角度考虑,本文对分析得到的危险事件提出了以下的安全策略,如表5所示。
图5 自主泊车工况典型危险事件下的事故过程Fig.5 Process of the accident during auto-parking
本文以安全策略SS8在泊车规划模块中增加紧急制动状态为例进行说明。该安全策略的作用为,在车辆泊车过程中,实时检测库位中是否存在闯入的行人或车辆等动态物体,如果存在且碰撞检测标志为真,则转移到紧急制动状态,输出0值期望速度,以避免碰撞发生。搭载安全策略后的泊车状态机程序如图6所示,其中浅色区域内即为添加的紧急制动状态。当碰撞检测标志“CrashCheck”为真时,保存工作现场并从泊车状态转移到紧急制动状态,输出0期望速度;当“CrashCheck”为假时,退出紧急制动状态,恢复工作现场,继续完成泊车。
3.2 试验验证安全策略
在与2.6节中相同的危险场景下,对实现了上述安全策略的系统进行了验证试验。自车安全完成泊车任务,图7展示了试验过程中自车的泊车过程。在搭载安全策略前后的试验中,还记录了自车和行人的运动学信息,包括位置、速度、航向角等。
表5 自主泊车功能的安全策略Tab.5 Safety Strategy of the auto-parking function
图6 添加紧急制动状态后的泊车状态机程序Fig.6 FSA of the auto-parking function with AEB state
图8展示了泊车过程中自车速度以及自车与行人相对距离的变化。在34.1 s时搭载安全策略前后的自车均完成了第一次泊车规划,速度降低至0。未搭载安全策略的车辆随即重新加速执行第二次泊车规划,而未注意避让后方闯入库位的行人,导致最终在36.4 s时发生碰撞(相对距离为0);搭载安全策略后的车辆检测到行人,在34 s~38 s间保持速度为0、安全距离大于2 m,等待行人通过。
以上测试结果表明,搭载安全策略后车辆及时避让,避免了与行人发生碰撞,提出的安全策略有效避免了事故发生。
图7 实现安全策略后的自主泊车全过程Fig.7 Process of auto-parking with the safety strategy implemented
图8 搭载安全策略前后泊车过程中的自车速度和相对距离Fig.8 Speed and relative distance during autoparking
4 总结与展望
针对自动驾驶决策系统的安全性问题,提出了一种基于STPA的安全性开发方法。该方法涵盖安全分析、策略设计和测试验证三个环节,形成完整的安全性开发迭代闭环。所提出的方法在一个城市自动驾驶决策系统的原型开发阶段中进行了实践。针对决策系统的特点,使用状态机构建过程模型,建立了包含了4个功能模块、9个功能状态的控制结构,分析获得了8个错误模式下的70个不安全控制行为。针对其中3个泊车相关的功能状态,分析得到了10个不安全控制行为原因和8个系统危险,提出了9个安全策略。以在泊车规划模块中增加紧急制动状态这一安全策略为例,进行了系统改进,通过模型在环仿真的方式对实现安全策略前后的系统进行了对照试验。试验结果表明,分析得到的危险事件确实发生,设计的安全策略提高了泊车过程的安全性。
此外,该研究也存在一定的局限性,将在后续的研究中完善:①安全分析过程中不安全控制行为的筛选依赖分析人员的工程经验或领域知识,后续将进一步研究知识与客观指标相结合的筛选方法;②分析过程中使用自然语言,不同分析人员得出的分析结果难以达到完全一致,后续将研究使用计算机技术和形式化语言进行分析的方法;③安全分析在定性的层面进行,后续将根据定性安全分析的结果进一步研究定量安全分析方法。
作者贡献声明:
陈君毅:研究命题的提出与构思,论文修订
刘力豪:安全分析,策略设计和仿真试验,论文撰写
周堂瑞:安全分析,论文修订
邢星宇:策略设计,数据整理,论文修订