李秋晨,孙鹏飞
(北京新能源汽车技术创新中心有限公司,北京 100176)
迄今为止,自主驾驶对现代交通系统具有重要意义。自动驾驶汽车自主处理具体驾驶任务,将驾驶员从繁重的工作中解放出来。诸如美国、日本等许多国家正在进行自动驾驶汽车的相关研发工作[1]。谷歌公司发布了一款自动驾驶汽车,并进行了超过161万英里的路上测试。特斯拉在量产汽车上安装了可供客户使用的自动驾驶系统[2-3]。
然而,现有的自动驾驶系统仍然面临着长期的挑战。谷歌的自动驾驶汽车在十字路口右转时与公共汽车相撞,近10名特斯拉用户在各种事故中丧生。研究表明,遵守交通规则的驾驶方法应引起高度重视[4]。
汽车换道条件受驾驶员的经验、车辆性能和周围车辆的影响。超车步骤可分为换道动机、决策和实施三个部分。
状态流是有限自动机理论的实施实例,所以状态流模拟了一个事件驱动的模型。当某个条件从一个状态变为另一个状态时,状态转换就发生了。有两种类型的事件驱动模型。一种是真值表,另一种由状态之间的中间状态表示。用户还可以使用状态流构建一些基于流的无状态系统,这些系统没有事件驱动[5]。
本文首先考虑将超车交通规则转换为状态流中的逻辑,并给出了流程图。其次,利用公式判断超车动机。然后利用双目摄像头检测车辆与障碍物的距离。接下来,GPS设备提供位置信息进行地图数据库搜索,以确认道路的超车许可和限速。最后完成超车实验,采集人类驾驶员的数据。
我们在日本进行了实验,车辆在左侧行驶。换道动机描述如下:车辆速度逼近道路最高限速,如果当前车道出现障碍物,驾驶员将在当前车速并保持与其他车辆的安全距离的前提下进行车辆换道[6]。
在以往的研究中,由于城市道路比较复杂,超车主要是在高速公路上实施[7]。自动驾驶系统在目标车道安全和车辆障碍物相对速度两条规则约束下,根据车载传感器数据分析换道的可能性。而人类驾驶员根据驾驶经验对车辆的实时状态和周围障碍物作出判断,以此决定是否换道[8]。在车辆换道过程中,影响驾驶员决策的主要因素是当前车道的状态、周围车辆的距离和相邻车道上的车速。当前车减速或停车时,驾驶员应使用转向灯并注意右侧。如果与右侧车辆的距离足够,可以进行超车。《维也纳道路交通公约》对超车规则作了详细地规定。如果右侧有障碍物,驾驶员应制动并与前车保持安全距离。然后等车并观察右侧,直到右前方和右后方可支持通过。禁止的行为如下:
(1)车辆跟车并开始超车动作;
(2)前车示警需要超车;
(3)超车影响对面车辆或时间不足。
双目检测的方法是通过处理两幅图像间的视差计算车辆与障碍物之间的距离。人眼可以根据两眼聚焦在同一物体上的差异感知物体的距离,双目摄像头的原理与人眼相似。目标距离由视差决定,视差对应于物体和眼睛之间的距离。
图1 双目摄像头输出图像
图1 中双目摄像头用于测量与前车的距离。双目摄像头标定完成后,使用OpenCV库中的三维测量函数输出图像深度图。同时,检测图像中的车辆和其他障碍物。我们通过设置感兴趣区域减少噪声和干扰并获取对应车辆。超车动机由深度图像和检测图像中提取出的目标距离和速度进行判断。同时,使用后置双目摄像头获取与右后方车辆的距离。
人类驾驶技术的发展方向是检测、决策和实施。在实践中,影响驾驶员行为的因素很多,如周围车辆、自车性能、道路状况等。驾驶风格和驾驶经验也会影响决策。由于道路状况复杂,开发超车决策方法有重要意义[9]。
我们使用公式来判断超车动机。测试车辆为丰田COMS电动汽车,通过CAN总线采集车速、制动传感器、转向角等数据,双目摄像头提供距离数据。结合以上信息和人类驾驶员数据,运用公式对超车动机进行分析判断。我们使用马可·里戈利公式[10],Vc代表自车速度,Vl代表前车速度。Drel表示与前车的距离。Drec代表驾驶员的反应距离,K是安全参数。
当Dthres>0时,车辆不可超车。当Dthres≤0时,车辆可实施超车。
图2 超车过程示意图
本文将安全驾驶放在首位,选择合适的方法和逻辑实现超车。如图3所示,首先检测前车减速。如果没有交通堵塞,则使用公式(1)计算Dthres,如果Dthres>0,则进行超车。然后利用Matlab连接的地图数据库对超车许可证进行检查。根据GPS定位信息在地图数据库中查找道路超车许可和道路限速。再次,使用双目摄像头检测与右侧车辆的距离。根据人类驾驶员的经验数据计算超车时间是否足够。如果时间不够,停止超车并再次检查距离和时间。通过上述步骤保证汽车自动驾驶的安全性。
在双向双车道超车时需要使用对向车道,属于危险和复杂的场景。双目摄像头检测自车与对面车辆的距离,双向双车道变道试验提供时间数据,自动驾驶系统计算并决定是否足以实现超车并发送到超车状态流。
图3 超车逻辑流程图
图5 车辆识别图像示意图
图6 有障碍物超车
在MATLAB Simulink Stateflow中,流程图部分适用于交通规则逻辑的设计和控制。通过对事件判断的方法,自动驾驶系统可以根据来自传感器的数据和条件来决定自车行为。Stateflow可以与Simulink连接。若全部条件满足,自动驾驶系统将输出超车结果。
图4 状态流中的逻辑
在Matlab Stateflow中,输入为“动机”、“限速”、“禁止超车”、“倒车”、“双向双车道”和“对向车辆”。通过判断我们可以得出是否超车的结果。
如图5所示,双目摄像头使用像素块匹配识别车辆。CAN总线将速度、转向等数据发送到Simulink。在实验中,被控制车辆停下来直到障碍物消失,然后实施超车。
自动驾驶有助于将人类驾驶员从繁重的驾驶工作中解放出来,安全性是自动驾驶中最重要的部分,交通规则是安全自动驾驶的保证。超车是自动驾驶中需要引起关注的重要问题,本文提出的关于超车的交通规则控制方法把安全放在首位。