自动驾驶是目前比较热门的话题,包含的技术领域五花八门,例如:雷达、摄像头、汽车电控、激光雷达、物体识别、高精度地图、导航技术等等。让我们一起来聊一聊 MathWorks 这几年的自动驾驶之路,分享最新的技术投入和应用亮点。
◆ ◆ ◆ ◆
MathWorks 对自动驾驶技术的投入可以总结为以下几个阶段:
2015:SCANIA AEB 系统
2015 年,瑞典著名的重卡生产商 SCANIA 发布了用 MATLAB/Simulink 设计的 AEB(自动紧急刹车)系统,看动画:
在这个案例中,SCANIA 利用 MATLAB/Simulink 做了两件大事:
一是设计了数据融合(Sensor Fusion)系统。AEB 把摄像头和雷达采集的数据进行整合,同时使用车辆前部安装的雷达和摄像头来扫描前方区域的物体。系统利用每个传感器的独特优势获取更精确的环境模型。
雷达的优势在于确定物体的距离、相对速度,但在确定物体的形状或横向位置方面较弱。摄像头主要优势在于辨识物体类别,主要缺点在于在黑暗环境下难以工作,以及对速度估计不准确。SCANIA 构建了一个传感器融合系统,可将两个传感器中的数据进行匹配合并。传感器融合系统一旦在主道上发现物体,会将该物体的位置和预计路径传递给 AEB,AEB 将确定何时警告驾驶员或采取制动措施。
二是设计了整个回放测试系统。SCANIA 的车队在超过 150 万公里的驾驶里程中,所记录的实际交通数据超过了 80TB。这 150 万公里的实测数据,为每次更新发布的新功能提供了海量测试场景和数据。
为了进一步提高仿真运行速度,研发团队编写了 MATLAB 脚本,在服务器集群进行多核并行计算和仿真,最多同时可以运行300个仿真实例。通过这一方法,将仿真 150 万公里交通数据的时间减少到 12 小时。在仿真中发现值得关注的新场景时,会在 Simulink 中重新运行仿真并进行深度分析。
2016:传感器融合示例
坦率地讲,SCANIA 的这个案例激发了 MathWorks 的开发灵感。2016 年在波士顿的年度大会上,来自美国底特律的应用工程师展示了他用 MATLAB 脚本开发的一个前车碰撞预警(FCW)的演示案例。这个演示案例就是后来 ADST(自动驾驶工具箱)的原型。这个原型中包含的 2 个关键点:可视化、数据融合,都成了 ADST 的产品亮点。
还有一家公司——德国大陆集团(Continental)——用 MATLAB 也是炉火纯青。MATLAB 既然是好工具,我就用工具来代替大量人工重复劳动。2014 年,Continental 在研发一款自动驾驶摄像头的时候,使用 MATLAB 来自动化标注物体和道路标志,这些自动化的方法显著地提高了摄像头的机器学习效率。这一灵感也最终由 MathWorks 工程师实现在 ADST 的功能中:GroundTruthLabelling (真值标定)。
R2017a:ADST - 自动驾驶系统工具箱
2017 年 3 月,MathWorks 在 MATLAB R2017a 发布了 ADST(自动驾驶系统工具箱),包括 3 个核心功能点:
· 可视化
· 数据融合
· 真值标定
行业技术专家强调:可视化是数据分析的第一步。
大家先一起看看汽车雷达和摄像头的数据长什么样。以雷达为例:下面两个数据表格显示了在什么时间戳,有多少个识别物体,物体的方位、速度等数据信息。
让我们看一段 MATLAB 处理数据并实现可视化的动画:
通过 MATLAB 自带的 API 和函数,用户可以比较容易地将雷达和摄像头的传感器数据,进行人眼可视化。上图左边是原始的摄像头画面,右边蓝色的三角代表摄像头识别的目标,红颜色代表雷达识别的目标。通过可视化,人眼可以看到雷达和摄像头的信号有一定的偏差,那么自然就会问另外一个问题,车载电子设备到底以哪个为准呢?这就自然引入 ADST 的另外一个功能 – Sensor Fusion(传感器融合)。
理解传感器融合有几个关键词:多目标追踪(Multi-ObjectTracking),卡尔曼滤波器(KalmanFilter)和代价矩阵(CostMatrix)。
上图简单介绍了一个传感器融合的过程——从传感器的捕获(detection)到最终被确认为追踪物体(track):
1. 物体被传感器(视觉、雷达等)捕获,形成 detection
2. Track manager 先为该detection分配一个 track
3. Tracking filter 通过卡尔曼滤波器不断估计 detection 的 track
4. Track manger 通过代价矩阵将 detection 分配更新到 track
5. 目标 detection 消失后,track 被删除
MATLAB 自带的多目标追踪,可以追踪最多 120 个运动中的目标。每个目标的最终的 track 可能既不是雷达的位置,也不是视觉的位置,而是最终 track 算出来的位置。下图展示了代价矩阵的示意图,将 detection 分配到 track 的过程用到了 HungarianAssignment Algorithm。
MATLAB 自带了前向碰撞告警(FCW)例子可以帮助用户理解传感器融合的使用。
上图为 FCW 的数据融合处理流程,基本的逻辑是将雷达杂波信号滤除后,进行多目标的追踪和更新,在识别到最关键目标(Most ImportantObject)后,根据前向距离进行刹车告警。
让我们看看该样例的运行动画:
蓝色三角形的视觉识别目标和红色圆形的雷达识别目标,在消除了雷达杂波(大部分为只有红色圆型的目标,以及在其他车道的目标)后,通过数据融合形成目标追踪。看到的灰色方框即为运动物体的追踪。
上图左边的视频录像是一个实际路况的采集视频,样例还提供了相应的视觉和雷达的object list。有人会问:在数据融合设计早期的时候,我只有一个 idea,还没有具体的 object list ,那如何才能验证我的算法呢?MATLAB 还提供了另外一个 Sensor Fusion 的样例,看动图:
这个样例和上面有实际环境的样例有几点不同:
1. 车辆和道路都是可以像搭积木一样,通过 MATLAB 脚本快速搭建测试场景
2. 在这个模拟环境中可以模拟雷达(radarDetectionGenerator)和视觉(visionDetectionGenerator)的传感器。
好处不言而喻:快速验证idea。
随着自动驾驶工具箱发布的,还有一个广受欢迎的功能——真值标定(ground truth labelling)。
首先给出定义:在机器学习中 ground truth 表示有监督学习的训练集的分类准确性,用于证明或者推翻某个假设。很多视觉识别算法是用的机器学习。机器学习的认知基础就是真值。真值标定的功能有两点:
1. 采用大量真值来训练机器学习算法
2. 利用真值来检验现有的识别算法
真值标定的输入一般是视频文件。真值标定既可以手动一帧一帧地标定,也可以半自动化标定后再手工修正,最终可以将结果保存成真值数据库。让我们看一段半自动标定的动画:
最终标定出来的真值数据如下图所示:就像电影的字幕类似,几分几秒,在画面的什么方位,是什么物体:
ADST 在发布后,受到汽车电控工程师和自动驾驶研发人员的广泛使用。MathWorks 工程师在和他们交流后发现,他们有一个共同的兴趣点:ADST 的功能大部分集中于前端(可视化、真值标定、传感器融合),有没有将前端的识别和融合结果和后端的汽车电控结合起来的案例?其实这也反映了市场热点从 ADAS(高级驾驶辅助系统)向 AD(自动驾驶)过渡。ADAS 侧重于告警,而 AD 侧重于控制。
R2017b:闭环控制示例
随着 MATLABR2017b 的发布,MathWorks 推出了一个自适应巡航(ACC)的案例,包括:
· Simulink 模型:包含传感器融合、传感器模型、可视化、控制器模型、车辆模型、模拟道路场景和环境模型
· 控制器引入了两种参考设计:PID 和 MPC(Model PredictiveControl)
· 代码自动生成
让我们看一下运行的动画:由于紫车车辆强行并线到蓝色车辆(被控车辆),在 ACC 的作用下蓝色车辆的速度下降直到紫色车辆离开本车道。
这里用到的速度控制是经典的 PID 控制。众所周知,PID 的好处是简单、易懂、占用资源少,但是在自动驾驶的复杂环境下,想要对车辆进行精准控制,可以考虑更加复杂的先进控制方法,比如 MPC(ModelPredictive Control)。从另外一个角度来看,MPC 过去没有流行的原因之一就是受限于硬件资源和成本。目前,在自动驾驶技术和需求的推动下,汽车控制器必须变得越来越强大,使得 MPC 变得可能。下图给出了在 ACC 的环境下,使用 PID 和 MPC 的对比:MPC 比 PID 控制的更加精准、快速。
有了 ACC 这个例子,用户可以在 MATLAB/Simulink 统一平台下做如下事情:传感器融合、传感器模型、可视化、控制器设计和代码生成、车辆模型、模拟道路场景和环境模型。但在实践中发现,用户对模拟道路场景和环境模型要求其实很高:
1. MATLAB 虽然可以创建道路场景,但是必须用脚本编程,比较麻烦。
2. 更希望看到虚拟现实场景。
R2018a:unreal 集成
2018 年 3 月,针对第一点,MATLAB R2018a 推出了 Driving Scenario Designer的 App,直接可以画道路、车辆和简单传感器模型:
针对第二点需求,MATLAB R2018a 推出的 Vehicle Dynamics Blockset 可以和 unreal 游戏引擎集成,并自带了一个免费版的 unreal。当然 Vehicle Dynamics Blockset 主要功能是提供了车辆横向动力学的模块,免费版 unreal 只是用于 3D 显示。相信对于自动驾驶控制器设计人员,在设计例如 ACC(自适应巡航),LKA(自动车道保持)等自动驾驶功能时候,Vehicle DynamicsBlockset 一定能发挥强大的作用。
◆ ◆ ◆ ◆
让我们再回头看看 MATLAB 的自动驾驶之路:从用户案例中的启发,到推出自动驾驶工具箱;通过和用户的沟通逐步加入的车辆控制部分和 unreal 集成。
当然,自动驾驶永远在路上,MATLAB/Simulink 也在激光雷达点云处理、驾驶路径规划和跟随等方面持续推出更多的功能和应用案例,例如:
实时车辆数据融合和显示。通过和用户的深入交流,技术专家了解到用户的兴趣点多集中于:车辆上安装了摄像头和雷达后,在实时运行的同时,如何实现数据融合并显示结果?
MathWorks 工程师通过 AutomatedDriving System Toolbox、Vehicle NetworkToolbox、Instrument Control Toolbox、MATLAB Coder、Embedded Coder 等工具箱,已经实现在车辆上做实时驾驶的数据融合和数据显示:
你对自动驾驶感兴趣吗?
专注高性能图形工作站定制
详询:微信/QQ596349281