张立立张高原马伯骄鲍玉斌
(东北大学计算机科学与工程学院 国家级计算机实验教学示范中心,辽宁 沈阳 110819)
汽车的普及为我们的生活带来了便捷性与舒适性,同时也造成了交通流量大幅增长,以至于交通拥堵、驾驶事故频发。研究表明,如果有效的安全机制被部署在汽车之中,驾驶者的驾驶行为处于被监督状态,就可以将事故概率最小化甚至预防其发生。在国外的研究中,Oliver N 等人[1]实验得出一个在汽车行驶过程中的实时数据获得系统和一个模拟识别驾驶员操作的机器学习架构,对驾驶员的行为进行预测。You C W 等人[2]在SafeCar 应用中创造性地使用手机的前、后置摄像头,在监控驾驶员面部表情的同时采集路面状况,以此来探测危险驾驶情况以及驾驶员的疲劳驾驶行为。Lee Boon-Giin 等人[3]研发了一款应用程序,通过融合Android 智能终端上的多种传感器数据,来识别驾驶员的疲劳驾驶行为。Johnson D 等人[4]在研究中应用动态时间规整算法(DTW),通过对智能设备三轴加速计、陀螺仪、GPS 模块、磁力计等全部内置传感器提供的数据进行分析,来识别和判定行驶事件。Wang Yan等人[5]在研究中应用加速计和陀螺仪等传感器,通过捕捉向心加速度的变化来检测车辆的转向操作。Chaovalit P 等人[6]在文章中创造性地使用符号集近似算法(SAX),使得系统可以更容易地获取具有广泛价值的数据并且降低计算的复杂度。在国内的相关研究中,张希波[7]调研了驾驶人在疲劳状态下的方向盘操作特征,从方向盘修正频度和幅度两方面展开研究,建立模型以实时检测驾驶员疲劳状态。吴超仲[8]则是通过传感器提取驾驶员的驾驶操作数据以及生理数据,识别驾驶员的驾驶状态。封宇华等人[9]利用MEMS 惯性传感器和汽车OBD 系统设计了一种汽车行驶数据监测系统。马春梅等人[10]设计了基于卡尔曼滤波的算法对手机传感器误差进行修正。
本文的主要任务是在不使用摄像机和图像处理方法的情况下,对汽车行驶姿态进行感知识别,利用智能设备内置传感器测量的数据,达到可以准确区分汽车转向操作的效果。这种方法可以在避免由于照明、天气和路面状况等外界条件带来影像失真的同时,减少图像处理所带来的大额计算成本和误差。
为了识别汽车的转向操作驾驶事件,检测转向过程中的有效凸点数量,本文通过分析大量在道路测试过程中采集的数据,为有效凸点定义了4 个参数,它们分别是δl,δh,TBUMP,TDELAY。δl代表一个有效凸点范围内角速度绝对值的最小值阈值限制,它决定了一个有效凸点发生的开始点和结束点;δh代表一个有效凸点过程中角速度绝对值所能达到的最大值的最低阈值限制,它通过检测一个凸点过程中的角速度绝对值的最大值是否达到此阈值限制,从而判定该凸点是否是有效凸点;TBUMP代表一个有效凸点从开始到结束的持续时间;TDELAY表示当检测到两个时间间隔较短的连续凸点时,前一个凸点结束到后一个凸点开始的最大等待时间。在本文中,约定一个有效凸点需要满足三个条件:
(1)一个凸点范围内的角速度绝对值需要大于δl;
(2)一个凸点过程中的角速度绝对值的最大值需要大于δh;
(3)一个凸点的持续时间需要大于TBUMP;
只有同时满足以上3 个条件,才可以判定此时出现的凸点为有效凸点。
通过分析长时间的道路测试收集的转向角速度数据,结合驾驶员的驾驶习惯以及智能手机的灵敏度,发现当δl=0.03,δh=0.05,TBUMP=1,TDELAY=2 s时,识别效果将会达到一个很好的平衡,使算法对于有效凸点的检测保持一个很高的准确率。图1 显示了两个连续的方向相同的有效凸点形态。由于图中凸点的角速度幅值较小,原始角速度不利于观察有效凸点形态,这里应用滑动平均滤波器[11]进行滤波,得到较为平滑的角速度曲线。
图1 两个连续的、方向相同的有效凸点
对凸点检测算法进行改进,通过对汽车行驶过程中航向角改变值以及发生的水平位移值的计算,进一步识别出左转、右转、调头、变道以及在弯曲的道路上行驶等转向驾驶事件。
如图2 所示,本文在凸点检测算法的基础上,对转向驾驶事件进行了更细致的区分。在检测到一个有效凸点或者两个连续的方向相同的有效凸点基础上,根据计算得到的转向过程中汽车航向角改变值,认为当60°≤θfinal≤135°时,汽车发生了左转;当-135°≤θfinal≤60°时,汽车发生了右转;当|θfinal|>135°时,汽车进行了调头转向操作。其中θfinal=为汽车的航向角在时刻0 到时刻NTS之间的改变量。Yn表示采样周期结束时刻的角速度瞬时值。TS是预定义的应用程序采样周期的参数,本文中设定TS=0.05 s。
图2 转向驾驶事件识别算法框图
本文采用滑动平均滤波算法对陀螺仪数据进行滤波处理,主要基于以下两方面原因:
(1)控制积分误差[12]。滑动平均算法可以滤除陀螺仪的偏移量,从而控制角度计算过程中产生的积分误差。
(2)减弱随机噪声。滑动平均算法可以减小驾驶过程中这些随机噪声对陀螺仪返回数值的影响,提高凸点检测算法的准确度。
在本文中,凸点检测算法设定传感器数据采样时间间隔为50 ms,通过多次真实驾驶测试,认为当滑动窗口K=15,得到的滤波后角速度数据既可以显示原始数据的形态,又可以修正积分误差和随机噪声带来的不准确性。滑动窗口K=15 的滑动平均滤波算法对陀螺仪数据作用效果如图3 所示。
图3 左转事件中滤波前后角速度
本文是通过调用智能手机内部的GPS 模块,获得汽车行驶过程中实时的对地速度。但是GPS 的速度输出频率较低,本文中设置的是每1 000 ms 获取一次速度。本文中另一个与速度测量相关的数值,是根据惯性测量模块读取的加速度数据,此线性加速度传感器具有较高的输出速率,但其中也包含了大量的随机噪声。
如果使用含有大量噪声的加速度积分计算速度,误差较大。此外,如果汽车处在匀速运动状态,传感器将不会测到加速度,此时根据加速度的积分运算是十分不准确的。
因此,本文利用GPS 模块和线性加速度传感器的各自测量特性,通过使用卡尔曼滤波器来融合二者的数据[13],以得到较为准确的速度估值。
本文应用卡尔曼滤波器设计估计速度模型:
式中:v(k/k-1)是利用k-1 时刻最优速度取值预测的k时刻的速度;v(k-1/k-1)是k-1 时刻最优的速度取值;a(k)是k时刻系统测量到的加速度值;TS是程序设置对线性加速度传感器的采样周期。
式中:P(k/k-1)是v(k/k-1)对应的方差,P(k-1/k-1)是v(k-1/k-1)对应的方差;Q是系统测量到加速度值包含噪声的方差。
式中:g(k)为卡尔曼增益;R是GPS 模块测量速度包含噪声的方差。
式中:S(k)是GPS 模块对汽车行驶速度的测量值。
图4 为使用卡尔曼滤波器模型得到的速度估值,其中本文通过OBD 端口拿到汽车行驶过程中的地面实况速度,并将其与卡尔曼滤波器的估值结果进行比较,对比可知通过卡尔曼滤波算法可以得到较为准确的估计速度。
图4 卡尔曼滤波器估算速度
对本文设计的应用程序进行测试评估,验证转向驾驶事件识别算法的可靠程度以及航向角改变值和水平位移值的计算准确度。
应用程序测试阶段历时一个月,先后在校园内和学校周边累积进行了将近20 h 的真实车辆道路测试,每次测试之后分析采集到的汽车驾驶状态数据,评估数据计算和处理结果,并在此基础之上不断对凸点检测算法和汽车转向驾驶事件识别算法进行优化,最终达到比较满意的使用效果。智能设备使用的是三星GALAXY Note II,Android 操作系统版本号为Android 4.1。测试路线共历时1 h,一共18.95 km。测试时间大概是晚上21:00,并伴随着小雨。
选取道路测试过程中的6 次变道驾驶事件、6 次调头驾驶事件,记录应用程序收集到的航向角改变值和水平位移,并与地面实际状况下的航向角改变值和水平位移作比较,评估应用程序表现。
实验测试了汽车行驶在弯曲道路上时,水平位移和航向角改变值的测量值,以及根据从OBD 端口获取的汽车对地真实运动速度计算实际状况下的水平位移值。本文预期汽车行驶在弯曲道路上时,航向角的改变值大概为180°。
图5,6 所示的错误率表示了变道和调头两种驾驶事件中,航向角变化值和水平位移的测得值和实际值之间的绝对偏差,在测试所包含的情况中,应用程序所得的测量值具有很低的错误率,所以本文对于汽车驾驶事件中航向角改变值和水平位移值的计算方法是比较准确的。这两个值所表现出来的高精度意味着转向驾驶事件识别算法可以准确区分汽车的左转、右转、调头、变道以及行驶在弯曲的道路上等转向操作。
图5 程序计算变道、调头和行驶在弯曲道路过程中水平位移的错误率
图6 程序计算变道、调头和行驶在弯曲道路过程中航向角变化值的错误率
本文结合当今世界技术热点,在广泛阅读国内外有关汽车驾驶事件识别的文献基础之上,设计出一个应用在智能手机上的新型车辆转向操作感知程序,它利用智能手机内置的惯性测量单元(IMU 产品)来检测车辆的各种转向驾驶事件,并分析了大量真实道路测试数据结果。然而本文设计的应用程序仍然存在缺陷与不足,需要进行进一步的研究和改进。例如,目前应用程序只支持在手机保持直立状态或者围绕X 轴发生俯仰的情况下使用,后期将进一步对智能设备的坐标系进行研究,努力实现在不规定智能设备的摆放姿态情况下,也能对汽车的驾驶事件进行准确识别。