本文经自动驾驶之心公众号授权转载,转载请联系出处。
1.背景
近日分享如何高新转型到自动驾驶领域时,几位朋友不约而同的问到了我同一个问题:“L2~L4自动驾驶的岗位都有哪些?对应着具体的什么 工作内容?需要哪方面的技能?”今天就针对这个大家都很想了解的话题做个分享。
首先介绍下自动驾驶的系统框图(简化版)让大家对自动驾驶有个全局的概念
- 接下来,我们分为两大类进行介绍:算法工程师和非算法类工程师。
- 算法工程师
- 激光SLAM算法工程师
- 视觉SLAM算法工程师
- 多传感器融合算法工程师
- 机器学习算法工程师
- 计算机视觉算法工程师
- 自然语言处理算法工程师
- 决策算法工程师
- 规划算法工程师
- 控制算法工程师
- 非算法类工程师
- 软件平台开发工程师
- 系统工程师
- 功能安全工程师
- 标定工程师
- 仿真环境工程师
- 测试工程师
- 数据工程师
- UI开发工程师
- 下面详细介绍每个岗位的工作职责和需要学习的内容
2.算法工程师
2.1.激光SLAM算法工程师
- 岗位介绍:
- 采集激光传感器数据,根据点云数据对自动驾驶车辆的周围环境进行地图构建。
- 负责实现基于激光传感器的SLAM算法设计和开发,能够覆盖各种复杂场景的高精度地图更新和制作。
- 技能要求:
- 使用c、c++编程;
- 需要有滤波算法知识:ESKF、EKF、UKF等;
- 同时需要学习G2O、ceres等用来优化非线性误差函数的c++框架。
- 熟悉开源SLAM框架,如GLoam、kimera、VINS等优先;
2.2.视觉SLAM算法工程师
- 岗位介绍:
- 以VSLAM为基础,研发机器人自主导航定位算法,包括基于激光雷达、陀螺仪、里程计、视觉等多信息融合,构建机器人运动模型
- 技能要求:
- 学习常用的VSLAM算法,如ORB-SLAM、SVO、DSO、MonoSLAM,VINS以及RGB-D等;
- ROS机器人操作系统;
- 需要有滤波算法知识:ESKF、EKF、UKF等;
- 同时需要学习G2O、ceres等用来优化非线性误差函数的c++框架。
2.3.多传感器融合算法工程师
- 岗位介绍:
- 将相机、激光雷达、毫米波雷达等多传感器的信息处理和融合,提高自 主驾驶车的环境感知能力;
- 负责基于多源信息融合的目标检测、跟踪、识别与定位;
- 负责基于多源信息融合的环境特征抽取,为地图构建提供支持;为基于基于多源信息融合的导航定位提供支持。
- 技能要求:
- 掌握camera、毫米波雷达、激光雷达、惯性导航等相关数据解析融合算法;
- 计算机信息科学、电子工程或数学相关专业本科及以上学历,具备扎实的计算机理论基础
- 精度相机模型、多视觉几何、Bundle Adjustment 原理,有SfM、几何测距等项目经验
- 精通C/C++,熟悉Matlab,良好的面向对象编程思想和编码习惯
- 熟悉IMU、GPS、DR等惯导定位算法框架
- 熟悉IMU、GPS、车身系统原理、硬件特性、标定算法
2.4.机器学习算法工程师
- 岗位介绍:
- 该方向主要负责车辆行驶过程中产生的数据在工程上的应用,偏向于数据分析方向,如车辆行驶里程的影响分析、大数据分析建模等等。
- 技能要求:
- Python,C/C++
- 学习机器学习的基础理论算法,如 LR、GBDT、SVM、DNN等等;
- 学习scikit-learn 等传统机器学习框架的模型训练;
- 熟悉 PyTorch、TensorFlow等深度学习框架(偏神经网络部分)等等。
2.5.计算机视觉算法工程师
- 岗位介绍:
- 该方向主要基于摄像头传感器,主要包括:车道线检测、车辆等障碍物检测、可行驶区域检测、红绿灯等交通信息检测等等。
- 技能要求:
- C/C++,Python,OpenCV;
- 需要机器学习的基本算法 ( 降维、分类、回归等 );
- 需要学习深度学习,深度学习框架;
- 学习计算机视觉和图像处理的常用方法 ( 物体检测、跟踪、分割、分类识别等 ) 。
2.6.自然语言处理算法工程师
- 岗位介绍:
- 该方向主要负责车载场景下的语音识别,语音交互设计等等
- 技能要求:
- 学习机器学习算法、深度学习算法(RNN);
- 自然语言处理基本任务(分词、词性标注、句法分析、关键字抽取)
- 需要使用机器学习方法聚类、分类、回归、排序等模型解决文本业务问题;
- 熟悉 PyTorch、TensorFlow等深度学习框架(偏RNN部分)等等。
2.7.决策算法工程师
- 岗位介绍:
- 自动驾驶的决策是将感知模块传递的信息,转化成车辆的行为,达到驾驶的目标。例如,汽车加速、减速、左转、右转、换道、超车都是决策模块的输出。决策需要考虑到汽车的安全性和舒适性,保证乘客的安全的情况下,尽快到达目标地点。
- 技能要求:
- c/c++/python,熟悉ROS系统;
- 学习常用的决策算法,如决策状态机、决策树、马尔可夫决策过程,POMDP等;
- 如果往深里学的话,需要熟悉机器学习算法(RNN、LSTM、RL),掌握至少一种深度学习框架(比如gym或者universe等深度强化学习平台);
- 熟悉车辆运动学和动力学模型。
2.8.规划算法工程师
- 岗位介绍:
- 规划包括路径规划和速度规划
- 规划算法中,自动驾驶车辆首先通过路径规划确定车辆可行驶的路径,然后选择该路径确定可行驶的速度。
- 技能要求:
- c/c++/python,ROS机器人操作系统;(有些公司是用Matlab/simulink开发的)
- 学习常见路径规划算法,例如A、D、RRT等;
- 学习一些曲线的表示方法,如:五次曲线、回旋线、三次样条曲线、B样条曲线等;
- 如果往深里学的话;学习轨迹预测算法,如MDP、POMDP、Came Theory等;
- 学习深度学习和强化学习技术也是加分项,例如RNN、LSTM、Deep Q-Learning等;
- 有数学理论基础和背景,熟悉车辆运动学和动力学模型。
2.9.控制算法工程师
- 岗位介绍:
- 一般是对车辆横纵向动力学建模,然后开发控制算法,实现车辆运动控制等;
- 这个岗位跟车辆打交道较多,对于传统车厂转型到自动驾驶领域的伙伴来说,是个很好的切入机会。
- 技能要求:
- C/C++、Matlab/Simulink
- 学习自动控制理论基础,学习现代控制理论;
- 学习PID、LQR、MPC算法;
- 学习车辆运动学、动力学模型,对汽车的底盘有一定了解;
- 学习CarSim等仿真软件;
- 学习ACC、AEB、APA、LKA、LCC等辅助驾驶功能开发的是加分项;
- 拥有实车调试经验也是加分项。
3.非算法类工程师
3.1.软件平台开发工程师
- 岗位介绍:
- 设计和实现自动驾驶软件平台,包括内核修改/扩展、驱动程序实现/增强、中间件实现/增强、系统集成、性能/功耗优化、压力/稳定性/符合性测试;
- 负责搭建系统架构、编写底层驱动程序;
- 负责视觉相关算法在嵌入式处理器(GPU、DSP、ARM等平台)上的代码实现及性能优化、测试和维护;
- 协助算法工程师完成算法在嵌入平台上的移植、集成、测试和优化。
- 技能要求:
- C/C++编程技巧、Python;
- 具有嵌入式操作系统和实时操作系统的内核或驱动开发经验,熟悉QNX、ROS;
- 熟悉软件调试和debug工具;
- 了解车辆ADAS ECU和传感器,如雷达、摄像头、超声波和激光雷达;
- 熟悉通用诊断服务(UDS)、控制器局域网(CAN);
- 熟悉通信协议(CAN、UDS、DoIP、SOME/IP、DDS、MQTT、REST等)是加分项。
3.2.系统工程师
- 岗位介绍:
- 负责客户需求对接,以及与内部开发人员的需求释放;
- 负责无人驾驶软件系统框架构建 ;
- 负责模块化、可验证的系统软件架构设计和实时性能优化;
- 与硬件、算法和测试团队合作,集成并优化自动驾驶系统。
- 技能要求:
- 拥有扎实的计算机基础理论知识(如:自动控制、模式识别、机器学习、计算机视觉、点云处理);
- 具有嵌入式操作系统和实时操作系统的内核或驱动开发经验;
- 具备很好的沟通表达能力和团队合作意识
3.3.功能安全工程师
- 岗位介绍:
- 在产品全生命周期内对产品的功能安全进行支持
- 负责无人/自动驾驶系统产品的功能安全系统设计,并对现有流程提出改进意见;
- 负责无人/自动驾驶系统的危险分析(HARA, FMEAs, FMEDA, FTA);
- 负责无人/自动驾驶系统的安全目标定义;
- 负责无人/自动驾驶系统的安全需求定义;
- 技能要求:
- 精通ISO26262并有自动驾驶或者ADAS系统功能安全项目实施经验;(在传统车厂做功能安全想要转行的也可以考虑);
- 了解FMEA,FMEDA,FMEA-MSR,FTA等相应的方法;
3.4标定工程师
- 岗位介绍:
- 负责自动驾驶多传感器标定,包括GPS、IMU、LiDAR、Camera、Radar 和 USS 等;
- 设计实现传感器内参外参标定算法,搭建多传感器标定系统;
- 负责对标定参数进行相关车辆测试,给出测试报告。
- 技能要求:
- C++编程, 熟悉 Linux及ROS系统;
- 有传感器标定工作经历,熟悉视觉或激光 SLAM 算法;
3.5仿真环境工程师
- 岗位介绍:
- 该方向需要参与自动驾驶相关仿真系统的搭建,包括车辆动力学相关仿真,各类虚拟传感器模型和虚拟场景的建模与仿真,根据测试案例搭建测试场景,执行自动驾驶算法仿真测试等等;
- 负责搭建无人驾驶模拟系统,对汽车、传感器、环境进行软件模拟。模拟结果将与真实数据一同用于预测汽车在真实场景中的行为;
- 配合驾驶决策、路径规划、仿真算法等模块,实现自动驾驶闭环仿真,并可视化相关调试信息。
- 技能要求:
- MATLAB/simulink、Python/C++
- 熟练操作一种常用车辆动力学或无人车相关仿真软件,比如Perscan、Carsim、Carmaker等;
- 熟悉机器人操作系统ROS等;
- 有的仿真岗位纯属于做仿真,但有的岗位需要做仿真环境的开发,这样的岗位对编程要求会更高一些。
3.6测试工程师
- 岗位介绍:
- 该方向主要负责自动驾驶车辆的相关测试工作,测试自动驾驶系统功能各项指标的性能,评估其边界条件和失效模式;
- 负责自动化测试(SIL、HIL)的设计实现及智能驾驶产品的相关验证;
- 负责根据系统或产品的功能需求制定测试用例和测试计划;
- 负责制定完整的系统或产品的测试计划并实施,最后撰写测试报告;
- 收集和测试系统的边界样例,对智能驾驶系统的安全性进行评估,对技术提出合理的反馈。
- 技能要求:
- 熟悉Ubuntu/Linux操作系统,会写python脚本
- 熟悉CAN总线;
- 熟悉测试用例的编写方法和技巧;
- 熟悉图像识别算法,熟悉深度学习,掌握spark等大数据相关工具者加分;
- 熟悉激光雷达,毫米波雷达,超声波探头和摄像头的应用是加分项。
3.7大数据开发工程师
- 岗位介绍:
- 数据包括后台数据架构和前台呈现。一辆自动驾驶车每天都要生成1个T的数据量。数据该怎样快速清洗、提炼、总结,比如怎样迅速找出一次路测中最重要的几次介入(disengagements)。从而更高效的帮助工程师测试。
- 负责自动驾驶大数据平台系统的设计、开发和优化;
- 负责自动驾驶数据标注与处理流程的可视化工具开发,自动化标注平台的设计与研发。
- 技能要求:
- 具备扎实的数据结构及算法功底;
- 精通Java/Python/C++等至少一门高级编程语言;
- 熟悉Linux开发环境;
- 有基于SQL或No-SQL数据库的应用程序的设计、开发经验;
- 熟悉REST服务及Web标准,熟悉一种主流前端开发框架,如React/AngularJS,能独立构建前端应用者加分;
- 熟悉自动驾驶及相关的Lidar、Camera等传感器数据者加分。
3.8UI开发工程师
- 岗位介绍:
- 每个公司都需要搭建内部工具,用于验证整车开发。也需要给远程控制中心做各种交互页面,通过一个UI远程控制自动驾驶车。同时也包括车厢内为乘客准备的UI。喜欢设计或者擅长前端的朋友可以考虑。
- 技能要求:
- 具有优秀的审美和丰富的视觉表现力;
- 精通色彩、图形、信息和GUI设计原则及方法。
4.结尾
最后,国家政策正在大力推广新能源智能化汽车,希望越来越多的伙伴一起加入到自动驾驶行业。
原文链接:https://mp.weixin.qq.com/s/d41a5VYtJ4lvMP3GO6In_g