
自动驾驶相关的软件工具有不少,作为汽车工程师,我们最熟悉的可能是MATLAB/Simulink。如何从MATLAB/Simulink入手,系统地学习自动驾驶?
本文来源:自动驾驶仿真
自动驾驶相关的软件工具有不少,作为汽车工程师,我们最熟悉的可能是MATLAB/Simulink。如何从MATLAB/Simulink入手,系统地学习自动驾驶?
今天我们主要来介绍两部分内容:1、如何精准获取MATLAB/Simulink关于自动驾驶方面的学习资料;2、从MATLAB/Simulink可以学习到哪些自动驾驶知识。
特别声明,以下有部分图片引自MATLAB/Simulink的帮助文档以及MathWorks公开课(尤其感谢MathWorks中国公司员工的公开课视频),如果MathWorks公司认为存在侵权,可联系删除。另外,以下内容主要是基于MATLAB R2020a和R2019b,低版本可能略有出入。
01.如何精准获取MATLAB/Simulink关于自动驾驶方面的学习资料
MathWorks官网是个宝藏,有事没事上去逛逛兴许就能学到东西。MATLAB用户很多,但我相信会去逛MathWorks官网的人并不多。官网有不少好东西,在不熟悉官网架构的情况下要找到自己想要的东西有时候挺费劲的,所以我会把有用的栏目都用浏览器收藏了,下回再翻就很方便了。
1.1强烈推荐MathWorks官网的Videos and Webinars
Videos and Webinars提供了一些很有价值的学习视频,可以帮助用户快速地了解相关工具箱。

Videos and Webinars在MathWorks官网的位置
MATLAB/Simulink工具箱很多,与其相关的视频也就更多了,有中文的、英文的、日语的、汉语的还有俄语的……有图像处理的、有自动驾驶的、有新能源的、还有功能安全的……只要在搜索框中输入自己感兴趣的关键词,就能找到相关的学习视频。比如对于自动驾驶,我墙裂推荐的“小迈步”系列。

小迈步系列视频
小迈步的第一课和第二课,就有介绍怎么用MATLAB去设计、训练神经网络,并将网络模型用MATLAB Coder和GPU Coder生成代码,并部署到CPU/GPU中。
如果你搜索“自动驾驶”或者将Videos and Webinars的范围缩小至Automate Driving Toolbox(在搜索页面左侧选中这个工具箱),就可以找到直接跟自动驾驶相关的视频。

自动驾驶相关视频
比如上图框起来的视频,也是墙裂推荐的,是MathWorks中国工程师在MATLAB EXPO CHINA 2019大会上介绍MATLAB R2019a的自动驾驶工具箱(Automated Driving Toolbox)的新特性,看过视频之后能对自动驾驶工具箱有个大概的了解。以上仅仅是部分内容,大家可以按兴趣去搜索查找。
1.2直接查看相关工具箱的帮助文档和参考示例
与自动驾驶相关的工具箱如下:
学习类
感知类
Image Acquisition Toolbox
Image Processing Toolbox
Computer Vision Toolbox
Vision HDL Toolbox
Automated Driving Toolbox
Sensor Fusion and Tracking Toolbox
规划控制类
车辆类
其他
ROS Toolbox
Vehicle Network Toolbox
MATLAB Coder
Simulink Coder
Embedded Coder
HDL Coder
GPU Coder
Simulink Real-Time
不仅有各种工具箱,
还有各种app,与自动驾驶相关的主要有
这些app还是挺有用和有趣的,MathWorks的工具几乎已经覆盖了自动驾驶开发测试的各个环节,有做数据标注的Ground Truth Labeler,有专门做相机标定的app——Camera Calibrator…… 工具箱和app都有详尽的帮助文档,帮助文档中也会有参考示例。比如不同版本自动驾驶工具箱的这些demo:

MATLAB提供的自动驾驶demo
1.3借助MATLAB Answers解决问题 MATLAB/Simulink使用过程中遇到了解决不了的问题,可以上官网的MATLAB Answers去搜索问题关键词,很可能就能找到答案。MATLAB Answers是用户提问以及解决问题的版块。 有一回我在做Simulink和Unreal Engine的自动驾驶仿真时,遇到了一个bug,怎么都解决不了。后来上MATLAB Answers找到了原因,竟然是Windows更新导致的,这种问题真的很难自己debug。
02.从MATLAB/Simulink可以学习到哪些自动驾驶知识 简化而言,自动驾驶开发测试涉及以下环节。涉及感知、规划、控制等算法,以及对算法的测试。

自动驾驶算法开发测试 如果按V型开发流程,又涉及以下。先按感知、规划、控制、仿真测试以及对应的MATLAB工具箱/app来说明,同时部分糅合V型开发流程。

V流程
2.1感知 自动驾驶的传感器主要有摄像头、激光雷达、毫米波雷达、超声波雷达、IMU等等,这边主要介绍前两者相关内容。
2.1.1 摄像头与MATLAB/Simulink
涉及工具箱:
Statistics and Machine Learning Toolbox
Deep Learning Toolbox
Reinforcement Learning Toolbox
Image Acquisition Toolbox
Image Processing Toolbox
Computer Vision Toolbox
Vision HDL Toolbox
Automated Driving Toolbox
Sensor Fusion and Tracking Toolbox
MATLAB Coder
HDL Coder
GPU Coder
涉及app:
Classification Learner
Deep Network Designer
Ground Truth Labeler
Camera Calibrator
整个链条大致如下。

1、采集图像 采集图像的同时,有一个很重要的工作就是做相机标定。
何谓相机标定: 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。
MathWorks提供了相机标定的工具——Camera Calibrator。 
Camera Calibrator
2、标注图像 MathWorks提供了数据标注工具——Ground Truth Labeler。 
Ground Truth Labeler 之前的版本中,Ground Truth Labeler只能标注图像数据,从2020a开始支持同时标注代表同一场景的多个信号,比如对图像和激光雷达点云同时标注。可以加载来自单个来源(例如rosbag)的信号集合。
也支持将标记的激光雷达数据用作深度学习模型的训练数据。 Ground Truth Labeler可以手动标注,也可以根据内置的自动标注算法或者自定义的标注算法来进行自动标注。
3、设计和训练网络
Classification Learner
Deep Network Designer
小迈步的第一课第二课有介绍如何用Deep Network Designer来设计网络。

Deep Network Designer MATLAB提供了直接导入Caffe和Tensorflow-Keras模型的接口。

同时支持通过ONNX导入其他框架的模型。

ONNX 如果你想用Simulink去做图像处理,可以关注下这两个工具箱。
Image Processing Toolbox
Computer Vision Toolbox

Computer Vision Toolbox
4、自动生成代码及部署到硬件 MATLAB的厉害之处不仅在于提供了覆盖各个领域的工具箱,你可以快速方便地实现模型在环测试Model-in-lop(MIL),而且有各种代码生成工具,帮助实现快速控制原型Rapid Control Prototype(RCP)、软件在环测试Software-in-lop(SIL)、硬件在环测试Hardware-in-lop(HIL),还可以部署到硬件(CPU、GPU、FPGA)。 这些代码生成工具有:
MATLAB Coder
Simulink Coder
Embedded Coder
HDL Coder
GPU Coder
对于前三个Coder,做传统汽车控制器的同仁们应该都有所了解,基于模型设计(Model Based Design,MBD)会涉及。另外两个Coder,HDL Coder和GPU Coder分别用以将MATLAB/Simulink的代码、模型生成FPGA的代码(VHDL或Verilog)和CUDA代码。 小迈步第二课主要介绍了MATLAB Coder和GPU Coder的应用。

自动生成代码,部署深度学习模型

MATLAB Coder和GPU Coder 小迈步第四课主要介绍了HDL Coder的应用。

我平常用HDL Coder比较多,因为只会Simulink,不会写VHDL或Verilog……HDL Coder最大的优势就是——用简便的Simulink建模方式代替了晦涩的硬件描述语言编程方式,使得FPGA算法开发回归到了汽车工程师熟悉的Simulink建模。 用户按照传统的Simulink建模方式搭建图像处理和计算机视觉算法,调用MATLAB的HDL Coder将Simuink模型生成VHDL或Verilog代码,然后部署到FPGA板卡上,整个流程可以无需编写代码。
使用HDL Coder进行FPGA图像处理算法开发,可以使用Vision HDL Toolbox。 
Vision HDL Toolbox 对于这块内容,墙裂推荐一个视频——MathWorks HDL Coder产品负责人赵志宏经理的演讲《从MATLAB到FPGA: 视频和图像处理》。喜欢他那种如数家珍、游刃有余的状态,职业生涯中能打造出如此出色的产品,真是值得骄傲。 不仅做基于FPGA的图像处理可以用HDL Coder,做电机电网电力电子以及其他高频应用的控制或仿真都可以用到HDL Coder。
2.1.2激光雷达与MATLAB/Simulink
Computer Vision Toolbox > Lidar and Point Cloud Processing
Automated Driving Toolbox > Perception with Computer Vision and Lidar
Navigation Toolbox > SLAM
MATLAB目前支持导入PCAP、PLY和PCD等格式的点云文件,提供了激光雷达点云分簇、配准、融合等函数,可用于目标检测、构建高精地图等。

R2020a的Ground Truth Labeler支持和激光雷达点云标注,也支持将标记的激光雷达数据用作深度学习模型的训练数据。MATLAB提供了一些exmples。

MATLAB提供的激光雷达相关example
2.1.3传感器融合
Automated Driving Toolbox和Sensor Fusion and Tracking Toolbox提供了相关的模块和函数。

来看看基于摄像头和毫米波雷达传感器融合的ACC:

ACC示例模型 基于摄像头和毫米波雷达传感器融合的ACC视频
2.2规划控制

Automated Driving Toolbox>Planning and Control Simulink从MATLAB R2017a开始推出了Automated Driving Toolbox,提供了Longitudinal Controller Stanley、Lateral Controller Stanley等模块,还提供了RRT*等路径规划算法。

规划相关demo 控制方面可以了解一下MPC工具箱。
2.3仿真测试 算法或者ECU开发完毕后,需要形成闭环来测试。为了构成闭环,还需要车辆模型、驾驶场景和传感器模型。

仿真测试框架
2.3.1车辆模型
2.3.1.1车辆动力总成 参考Powertrain Blockset。

动力总成工具箱

动力总成模块

轮系模块

转向系模块

悬架模块

车身模块

行驶场景模块 工具箱还提供了动力总成参考模型,如下图,有燃油车、纯电车、混动车(P0/ P1/ P2/ P3/ P4 )。

参考模型汇总 参考模型是类似这样的:

参考模型示例

P2混动模型 另外,也可以用Simscape来搭建动力总成模型。官网Videos and Webinars也有不少关于PT工具箱的。
2.3.1.2车辆动力学模型 参考Vehicle Dynamics Blockset,提供了3自由度、7自由度和14自由度车辆动力学参考模型。

3自由度、7自由度和14自由度车辆动力学模型 MathWorks将车辆动力学模型和动力总成模型结合,又提供了几个完整车辆的参考应用模型如下图,包括:双移线模型、正弦扫频转向模型、慢增量转向模型等。

参考模型示例 官网Videos and Webinar有不少关于VD工具箱的视频。

官网学习视频 除此之外,如果你习惯用代码写车辆动力学模型,也可以直接把代码封装在s-function中。
2.3.2驾驶场景和传感器模型 市面上大多数的场景软件都提供了MATLAB/Simulink的接口,这些软件在这咱们就不着重提了。这里介绍下MathWorks自己开发的场景构建工具Driving Scenario Designer以及与它合作紧密的另一个软件Unreal Engine。这两个软件各有特点,针对不同的需求。

Driving Scenario Designer和Unreal Engine 总的来说,Driving Scenario Designer使用拖放操作创建道路和交通参与者,可快速构建场景,用作Control-in-loop应用的测试和验证,但无法提供逼真的场景和传感器数据。 Unreal Engine能提供高保真度的场景和传感器模型,能够合成逼真的图像和激光雷达点云数据等等,适用于Perception-in-loop的应用。
2.3.2.1Driving Scenario Designer 
Driving Scenario Designer
Driving Scenario Designer有这些特点:
1、使用拖放操作创建道路和交通参与者,快速构建场景
2、使用低保真度的视觉和雷达传感器模型,直接输出检测到的目标列表
3、支持将场景导出成MATLAB Function,再通过修改MATLAB Function实现批量化生成场景
4、支持将场景和传感器导出成Simulink模块
5、支持导入OpenDrive路网文件,支持基于记录的实车数据构建场景
放一个Driving Scenario Designer操作视频 Driving Scenario Designer操作视频
2.3.2.2Unreal Engine MathWorks结合游戏引擎Unreal Engine构建驾驶场景,并提供了与Unreal Engine场景交互的摄像头、激光雷达、毫米波雷达等传感器模型,去覆盖Perception-in-loop的应用。

Unreal Engine与Simulink交互 Unreal Engine(虚幻引擎,简称Unreal),由Epic开发,是世界知名的游戏引擎之一,占有全球商用游戏引擎很高的市场份额。Unreal开发的游戏,代表作有《战争机器》系列,《质量效应》系列,《绝地求生》…… 用户在Unreal中构建场景,MathWorks提供了场景中的传感器模型。

自动驾驶工具箱中与Unreal Engine交互的传感器模型 这些传感器能输出图像RGB数据、激光雷达点云数据等等。

传感器输出的数据类型 每个传感器都提供了相关的参考示例,放一个用Unreal构建的场景来做高速公路车道跟随的参考示例。 高速公路车道跟随 以上是我对从MATLAB/Simulink入手学习自动驾驶的一点经验,希望对感兴趣的朋友有所帮助。
【欢迎大家提供行业新闻热点,商业合作请联系:18562613430】
推荐阅读
▼

免责声明:
凡本公众号注明“来源:XXX(非智车科技)”的作品,均转载自其它媒体,转载目的在于传递和分享更多信息,并不代表本平台赞同其观点和对其真实性负责,版权归原作者所有,如有侵权请联系我们删除。

