/ 导读 /
想要进入自动驾驶这个领域,便首先去调查了下这个领域的岗位,希冀能从中找出自己最感兴趣且匹配度也比较高的方向。废话不多说,见下。
下图为自动驾驶方向的所有岗位,总量的来说,方向可以分为三大类:
算法
仿真
测试
以下针对上述所有方向,展开进行介绍。
自动驾驶算法类方向
首先解释一下这个方向是干什么的,SLAM英文全名叫simultaneous localization and mapping,中文名叫同步定位与建图。可以看一下下面的百度百科的解释。
“即时定位与地图构建,或并发建图与定位。问题可以描述为:将一个机器人放入未知环境中的未知位置,是否有办法让机器人一边移动一边逐步描绘出此环境完全的地图,所谓完全的地图(a consistent map)是指不受障碍行进到房间可进入的每个角落。”
SLAM算法属于【感知—规划—控制】中的感知类算法。该算法主要用于自动驾驶车辆的根据点云数据对车辆周围环境的地图构建。而其中的点云数据是由两种传感器来进行采集的,即激光雷达和摄像头,所以SLAM算法其实又分了两大方向:视觉SLAM算法(VSLAM)和激光SLAM算法(Lidar SLAM)。
所以又细分了下面的两个岗位。
关于激光SLAM的效果,可以看下面的视频,激光SLAM的传感器即为激光雷达,视频中花花绿绿的就是激光雷达的点云数据了,然后对周围环境进行地图构建:
激光SLAM所需要学习的知识:
操作系统:Linux
编程:使用 c、c++、matlab 一种或多种语言;
理论:需要学习很多滤波算法,如:ESKF、EKF、UKF 等。同时需要学习 G2O、ceres 等用来优化非线性误差函数的 c++框架。
关于视觉SLAM的效果,可以看下面的视频。视觉SLAM中的传感器即为摄像头,摄像头如果使用深度相机,可以直接获取障碍物的距离,生成点云数据。当然也有用单目、双目、鱼眼摄像机的视觉SLAM ,这些摄像头需要用其他的方法才能间接地获取周围障碍物的距离。
视觉SLAM所需要学习的知识:
操作系统:Linux
编程:c、c++
理论:学习常用的 vSLAM 算法,如 ORB-SLAM、SVO、DSO、MonoSLAM,VINS 以及 RGB-D 等;ROS 机器人操作系统;还需要学习很多滤波算法,如:ESKF、EKF、UKF 等。同时需要学习 G2O、ceres 等用来优化非线性误差函数的 c++框架。
目前激光 SLAM 是比较成熟的定位导航方案,但其传感器价格昂贵。汽车是一个大量生产的东西,如果成本降不下来,其也会有很大的阻力。目前特斯拉等公司已经放弃了激光雷达的方案,采用纯视觉的自动驾驶方案。
在实际的自动驾驶车辆上,SLAM 其实是需要多个传感器进行融合的,取长补短,比如GPS、IMU(惯性导航)等传感器融合的方案,所以自动驾驶算法方向又出现了下面的一个新的岗位。
看一下该方向的行业要求:
掌握摄像头、毫米波雷达、激光雷达、惯性导航等相关数据解析融合算法;熟悉感知融合算法发展趋势,有神经网络等人工智能开发背景者优先。
很明显,数据融合要求更高,既包括前面激光SLAM和视觉SLAM,同时还需要掌握其他传感器的用法,所以这个方向难度不小,所涉及的知识非常多。
自动驾驶的决策是指如何根据感知模块传递的信息,如何决策汽车的行为达到驾驶的目标。例如,汽车加速、减速、左转、右转、换道、超车都是决策模块的输出。同时,决策还需要考虑到汽车的安全性和舒适性,需要保证尽快到达目标地点,更需要在旁边的车辆恶意干扰的情况下保证乘客的安全。
决策算法需要学习的知识:
操作系统:Linux
编程:c/c++/python
理论:学习常用的决策算法,如决策状态机、决策树、马尔可夫决策过程等;如果往深里学的话,还需要学习深度学习,学习深度学习框架等。
其实决策和规划是经常要一起做的,我们继续往下看,看看规划方向的知识要求。
规划包括路径规划和速度规划,一般都是做路径规划的比较多,即自动驾驶路径规划工程师。
规划算法中,自动驾驶车辆首先通过路径规划确定车辆可行驶的路径,然后选择该路径确定可行驶的速度,路径规划如下。
路径规划算法需要学习的知识:
操作系统:Linux
编程:c/c++/python
理论:学习常见路径规划算法,例如 A、D、RRT 等;如果往深里学的话;学习轨迹预测算法,如 MDP、POMDP、Came Theory 等;学习机器人操作系统(ROS);学习深度学习和强化学习技术也是加分项,例如 RNN、LSTM、Deep Q-Learning 等。
前面提到决策和规划其实要经常一起做的,所以经常会出现两者结合的方向。
看一下该方向的行业要求:
在上述熟悉如MDP、POMDP、Game Theory等轨迹预测算法;熟悉常见路径规划算法,例如A*、D*、RRT等;具备Linux环境下的C++开发;熟悉ROS开发环境;参加过机器人领域相关研发及竞赛;熟练掌握CarSim、CarMaker等汽车仿真软件使用方法;有较强数学理论基础和背景。
控制算法方向偏向于传统方向,一般是对车辆横纵向动力学建模,然后开发控制算法,实现车辆运动控制等。
控制算法需要学习的知识:
操作系统:Windows
编程:C/C++、Matlab/Simulink
理论:学习自动控制理论基础;学习车辆动力学模型;学习 CarSim 等仿真软件;学习 ACC、AEB、APA、LKA、LCC 等辅助驾驶功能开发的是加分项。
实际的工作中,有的时候规划和控制其实不是强制分开的,而是相互结合,所以也会见到这样的方向:自动驾驶控制规划算法工程师。
自动驾驶感知部分是自动驾驶目前最有挑战的部分,其目前的岗位包括:机器学习算法工程师、计算机视觉算法工程师和自然语言处理算法工程师。(这三个方向也属于人工智能的三大方向。)
在自动驾驶车辆中,主要包括:车道线检测、车辆等障碍物检测、可行驶区域检测、红绿灯等交通信息检测、车内语音识别等等,前面讲的SLAM算法其实也可以属于感知部分。
1.7.1、机器学习算法工程师
该方向主要负责车辆行驶过程中产生的数据在工程上的应用,偏向于数据分析方向,如车辆行驶里程的影响分析、大数据分析建模等等。
机器学习算法需要学习的知识:
操作系统:Windows、Linux
编程:Python(主要) 、C/C++、
理论:学习机器学习的基础理论算法,如 LR、GBDT、SVM、DNN 等等;学习 scikit-learn 等传统机器学习框架的模型训练;熟悉 PyTorch、TensorFlow 等深度学习框架(偏神经网络部分)等等。
1.7.2、计算机视觉算法工程师
该方向主要基于摄像头传感器,主要包括:车道线检测、车辆等障碍物检测、可行驶区域检测、红绿灯等交通信息检测等等。如下所示。
视觉算法需要学习的知识:
操作系统:Linux
编程:C/C++,Python,opencv
理论:需要机器学习的基本算法 ( 降维、分类、回归等 );需要学习深度学习,深度学习框架;学习计算机视觉和图像处理的常用方法 ( 物体检测、跟踪、分割、分类识别等 ) 。
1.7.3、自然语言处理算法工程师
该方向主要负责车载场景下的语音识别,语音交互设计等等。最广泛的应用目前还在手机端,相信“小艾,小艾,播放一首音乐。”这类对话,你一定不陌生。
语音算法需要学习的知识:
操作系统:Linux
编程:C/C++,Python,opencv
理论:需要机器学习的基本算法 ( 降维、分类、回归等 );需要学习深度学习,深度学习框架;学习计算机视觉和图像处理的常用方法 ( 物体检测、跟踪、分割、分类识别等 ) 。
该方向需要参与自动驾驶相关仿真系统的搭建,包括车辆动力学相关仿真,各类虚拟传感器模型和虚拟场景的建模与仿真,根据测试案例搭建测试场景,执行自动驾驶算法仿真测试等等。
仿真方向需要学习的知识:
操作系统:Linux
编程:MATLAB/simulink、Python/C++
理论知识:熟练操作一种常用车辆动力学或无人车相关仿真软件,比如 Perscan、Carsim、Carmaker 等。熟悉机器人操作系统 ROS 等。有的仿真岗位纯属于做仿真,但有的岗位需要做仿真环境的开发,这样的岗位对编程要求会更高一些。
该方向主要负责自动驾驶车辆的相关测试工作,测试自动驾驶系统功能各项指标的性能,评估其边界条件和失效模式。根据研发人员对数据的需求,制作采集文档,完成数据采集等操作。其中包括软件、硬件等测试,也需要熟悉如Linux编程测试环境等等。
自动驾驶汽车测试类型及测试内容是什么?
自动驾驶汽车的开发满足V字开发模型,在V字开发模型中,涉及的测试方法主要包括软件在环(SIL,即software-in-loop)、硬件在环(HIL,即hardware-in-loop)、车辆在环(VIL,即vehicle-in-loop),再到最后的整车场地、道路测试等方法,涵盖了从零部件到系统再到整车的全链条验证。
在测试内容方面,主要包括传感器、执行器、算法、人机界面测试以及整车功能等内容。