如何从MATLAB/Simulink入手,系统地学习自动驾驶?
做自动驾驶的工具有不少,我只取一瓢——MATLAB/Simulink。今天主要来聊两部分,1、如何精准获取MATLAB/Simulink关于自动驾驶方面的学习资料;2、从MATLAB/Simulink可以学习到哪些自动驾驶知识本文整理自我的一个回答,如果您之前看过那个回答,可以略过。
特别声明,以下有部分图片引自MATLAB/Simulink的帮助文档以及MathWorks公开课或演讲(尤其感谢MathWorks中国公司员工的在线公开课视频),如果MathWorks公司认为不妥,可联系我删除。另外,以下内容主要是基于MATLAB R2020a和R2019b,低版本可能略有出入。
1、如何精准获取MATLAB/Simulink关于自动驾驶方面的学习资料
MathWorks官网是个宝,有事没事上去逛逛兴许就能学到东西。MATLAB用户很多很多,但我相信会去逛MathWorks官网的人并不多。官网有很多好东西,只是上面的内容实在太多了,在不熟悉官网架构的情况下要找到自己想要的东西有时候挺费劲的,所以我会把有用的栏目都用浏览器收藏了,下回再翻就很方便了。
①强烈推荐MathWorks官网的Videos and Webinars视频。
Videos and Webinars链接如下。打开这个链接可能是要登录自己的MathWorks账号的,我记得即便没有买过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)的新特性,看过视频之后能对自动驾驶工具箱有个大概的了解。
以上仅仅是部分内容,大家可以按兴趣去搜索查找。
②直接查看相关工具箱的帮助文档和参考示例。
与自动驾驶相关的工具箱如下,点击即可跳转到官网说明:
**学习类
Statistics and Machine Learning ToolboxDeep Learning ToolboxReinforcement Learning Toolbox
感知类
Image Acquisition ToolboxImage Processing ToolboxComputer Vision ToolboxVision HDL ToolboxAutomated Driving ToolboxSensor Fusion and Tracking Toolbox
规划控制类
Automated Driving ToolboxNavigation ToolboxStateflowFuzzy Logic ToolboxRobust Control ToolboxModel Predictive Control Toolbox
车辆类
Powertrain BlocksetVehicle Dynamics BlocksetSimscap
其他
ROS ToolboxVehicle Network ToolboxMATLAB CoderSimulink CoderEmbedded CoderHDL CoderGPU CoderSimulink Real-Time
不仅有各种工具箱,还有各种app,与自动驾驶相关的主要有
Classification LearnerDeep Network DesignerGround Truth LabelerCamera CalibratorDriving Scenario Designer
这些app还是挺有用和有趣的,MathWorks的工具几乎已经覆盖了自动驾驶开发测试的各个环节,有做数据标注的Ground Truth Labeler我忍了,居然还有专门做相机标定的app——Camera Calibrator,只能道一句:是我在又下输了……
工具箱和app都有详尽的帮助文档,帮助文档中也会有参考示例。比如不同版本自动驾驶工具箱的这些demo:
放几个链接:
③借助MATLAB Answers解决问题
MATLAB/Simulink使用过程中遇到了解决不了的问题,可以上官网的MATLAB Answers去搜索问题关键词,很可能就能找到答案。MATLAB Answers是用户提问以及解决问题的版块。
有一回我在做Simulink和Unreal Engine的自动驾驶仿真时,遇到了一个bug,怎么都解决不了。后来上MATLAB Answers找到了原因,竟然是Windows更新导致的,这谁能想得到……
2、从MATLAB/Simulink可以学习到哪些自动驾驶知识
简化而言,自动驾驶开发测试涉及以下环节。
涉及感知、规划、控制等算法,以及对算法的测试。
如果按V型开发流程,又涉及以下。
我这边先按感知、规划、控制、仿真测试以及对应的MATLAB工具箱/app来说明,同时部分糅合V型开发流程。
2.1、感知
自动驾驶涉及的传感器主要有摄像头、激光雷达、毫米波雷达、超声波雷达、IMU等等,这边主要介绍前两者相关内容,当然后三者的应用MATLAB也能覆盖。
2.1.1摄像头与MATLAB/Simulink
涉及工具箱:
Statistics and Machine Learning ToolboxDeep Learning ToolboxReinforcement Learning ToolboxImage Acquisition ToolboxImage Processing ToolboxComputer Vision ToolboxVision HDL ToolboxAutomated Driving ToolboxSensor Fusion and Tracking ToolboxMATLAB CoderHDL CoderGPU Coder
涉及app:
Classification LearnerDeep Network DesignerGround Truth LabelerCamera 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 LearnerDeep Network Designer
小迈步的第一课第二课有介绍如何用Deep Network Designer来设计网络。
Deep Network Designer
MATLAB提供了直接导入Caffe和Tensorflow-Keras模型的接口。同时支持通过ONNX导入其他框架的模型。
MathWorks公众号上有一些相关内容,比如
关于用MATLAB来做深度学习, @崔星星 兄台颇有研究,回答多有涉及,可以点击此处移步去拜读。
如果你想用Simulink去做图像处理,可以关注下这两个工具箱。
Image Processing ToolboxComputer Vision Toolbox
Image Processing Toolbox可以执行图像分割,图像增强,降噪,几何变换,图像配准和3D图像处理等。 Computer Vision Toolbox提供了用于设计和测试计算机视觉,3D视觉和视频处理系统的算法,功能和应用。您可以执行对象检测和跟踪以及特征检测,提取和匹配。对于3D视觉,该工具箱支持单,立体和鱼眼镜头相机校准;立体视觉 3D重建;以及激光雷达和3D点云处理。计算机视觉应用程序可自动执行地面真相标记和摄像机校准工作流程。您可以使用深度学习和机器学习算法(例如YOLO v2,Faster R-CNN和ACF)训练自定义对象检测器。对于语义分割,您可以使用深度学习算法,例如SegNet,U-Net和DeepLab。预先训练的模型可让您检测人脸,行人和其他常见物体。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 CoderSimulink CoderEmbedded CoderHDL CoderGPU Coder
对于前三个Coder,做传统汽车控制器的同仁们应该都有所了解,基于模型设计(Model Based Design,MBD)会涉及。另外两个Coder,HDL Coder和GPU Coder分别用以将MATLAB/Simulink的代码、模型生成FPGA的代码(VHDL或Verilog)和CUDA代码。
小迈步第二课主要涉及了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 ProcessingAutomated Driving Toolbox > Perception with Computer Vision and LidarNavigation Toolbox > SLAM
MATLAB目前支持导入PCAP、PLY和PCD等格式的点云文件,提供了激光雷达点云分簇、配准、融合等函数,可用于目标检测、构建高精地图等。
R2020a的Ground Truth Labeler支持和激光雷达点云标注,也支持将标记的激光雷达数据用作深度学习模型的训练数据。
提供了一些exmples。
这边放个用激光雷达做车辆检测的exmple视频:
Track Vehicles Using Lidar
https://www.zhihu.com/video/1234581802674642944
2.1.3传感器融合
Automated Driving ToolboxSensor Fusion and Tracking Toolbox
Automated Driving Toolbox和Sensor Fusion and Tracking Toolbox提供了相关的模块和函数。
来看看基于摄像头和毫米波雷达传感器融合的ACC:
http://pic.zhimg.com/v2-362666b93e80b9ea41f9e438a691331f_r.jpg
Adaptive Cruise Control
https://www.zhihu.com/video/1234582313720979456
关于这部分的内容,MathWorks EXPO关于自动驾驶的演讲视频中涉及较多。
2.2、规划控制
Automated Driving ToolboxNavigation ToolboxStateflowFuzzy Logic ToolboxRobust Control ToolboxModel Predictive Control Toolbox
Automated Driving Toolbox>Planning and Control
Simulink从MATLAB R2017a开始推出了Automated Driving Toolbox,提供了Longitudinal Controller Stanley、Lateral Controller Stanley等模块,还提供了RRT*等路径规划算法。
来看一个Automated Parking Valet的demo。
Automated Parking Valet
https://www.zhihu.com/video/1234582589831958528
控制方面可以了解一下MPC工具箱。
2.3、仿真测试
算法或者ECU开发完毕后,需要形成闭环来测试。为了构成闭环,还需要车辆模型、驾驶场景和传感器模型。
2.3.1车辆模型
Powertrain BlocksetVehicle Dynamics BlocksetSimscap
2.3.1.1车辆动力总成
参考Powertrain Blockset。
工具箱还提供了动力总成参考模型,如下图,有燃油车、纯电车、混动车(P0/ P1/ P2/ P3/ P4 )。
参考模型是类似这样的:
另外,也可以用Simscape来搭建动力总成模型。
官网Videos and Webinars以后不少关于PT工具箱的。
2.3.1.2车辆动力学模型
参考Vehicle Dynamics Blockset。提供了3自由度、7自由度和14自由度车辆动力学参考模型。
MathWorks将车辆动力学模型和动力总成模型结合,又提供了几个完整车辆的参考应用模型如下图,包括:双移线模型、正弦扫频转向模型、慢增量转向模型等。
官网Videos and Webinar有不少关于VD工具箱的视频。
除此之外,如果你习惯用代码写车辆动力学模型,也可以直接把代码封装在s-function中。
2.3.2驾驶场景和传感器模型
市面上大多数的场景软件都提供了MATLAB/Simulink的接口,这些软件在这咱们就不着重提了。这里介绍下MathWorks自己开发的场景构建工具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有这些特点:
1、使用拖放操作创建道路和交通参与者,快速构建场景2、使用低保真度的视觉和雷达传感器模型,直接输出检测到的目标列表3、支持将场景导出成MATLAB Function,再通过修改MATLAB Function实现批量化生成场景4、支持将场景和传感器导出成Simulink模块5、支持导入OpenDrive路网文件,支持基于记录的实车数据构建场景
放一个Driving Scenario Designer操作视频
https://www.zhihu.com/video/1234585691021172736
再放一个用Driving Scenario Designer构建的场景来做车道跟随的demo。
https://www.zhihu.com/video/1234585775150235648
想要了解更多的话,可以看下这篇文章:
更详细的细节可看帮助文档
2.3.2.2Unreal Engine
MathWorks结合游戏引擎Unreal Engine构建驾驶场景,并提供了与Unreal Engine场景交互的摄像头、激光雷达、毫米波雷达等传感器模型,去覆盖Perception-in-loop的应用。
Unreal Engine(虚幻引擎,简称Unreal),由Epic开发,是世界知名的游戏引擎之一,占有全球商用游戏引擎很高的市场份额。Unreal开发的游戏,代表作有《战争机器》系列,《质量效应》系列,《绝地求生》……
用户在Unreal中构建场景,MathWorks提供了场景中的传感器模型。
这些传感器能输出图像RGB数据、激光雷达点云数据等等。
每个传感器都提供了相关的参考示例,放一个用Unreal构建的场景来做高速公路车道跟随的参考示例。
https://www.zhihu.com/video/1234586191455682560
如果想了解更多,可以参考:
如果想学习Unreal怎么搭建场景,基础操作可以参考如下,很棒的教学视频。
如果要学习怎么将自己搭建的Unreal场景与MATLAB/Simulink联合仿真,可以参考:
以上!
如果对自动驾驶、无人驾驶感兴趣,还可以看看
公众号——【自动驾驶仿真】
太棒了,楼主每篇文章我都会收藏然后细读。不知道这套模拟系统可不可以做车载SAR,一个是雷达装在侧面对两侧进行SAR成像,还有一个装在正前方对前方SAR成像。如果能做,关键是整套系统如何设计呢?可以在这个系统里直接放上道路,人,车等,并拉上雷达直接接收回波信号嘛,另外unreal系统能不能做这个事情?因为更真实 谢谢。目前MATLAB提供的Unreal场景传感器还不能合成毫米波雷达回波信号,这种传感器模型还是比较复杂的,不清楚MathWorks有没有开发计划。 感谢大佬 是的,每个目标都要设置RCS才能精确模拟回波信号。unreal太真了,如果每个目标的rcs都精确建模工作量太大。那么我用这个简单的立方体系统可以做sar测试不,比如路边我弄几个行人设置每个人rcs是0db,轿车和卡车分别再设置一个rcs,类似这样的 您觉得ros和matlab谁会在自动驾驶领域得到广泛应用,还是说各有千秋? 小迈步系列课程棒棒的 unreal中对象的rcs是在Simulation 3D Probabilistic Radar Configuration模块中设置的;driving scenario designer的rcs可以在每个actor的属性中设置的。我目前看到的,这两个软件的雷达模型输出结果都是object list。 客气咯 两者都被广泛应用,各有千秋。