Bootstrap

智能驾驶系统工程师学习路线

智能驾驶系统工程师学习路线

1 通信与硬件

  1. Can总线。给一个dbc/arxml通信矩阵文件,打开它,可以讲清楚其中每个参数都是什么意思、是起什么作用的、什么情况下需要改它的配置(比如:波特率、采样点、BRS、Container PDU/Signal Group打包、网络管理报文格式、诊断报文格式)。会用Canoe软件,会自己写Capl脚本做一些简单的测试。

  2. 以太网。熟悉以太网的七层结构,对于IP/TCP/UDP这三个通用协议以及SomeIP/DoIP这两个车载协议,要知道里面的每个参数都是什么作用(比如:IP地址、端口号、服务ID),会用Wireshark或Canoe等工具进行以太网抓包解包。

  3. 其它通信总线协议,比如Lin/Flexray/SPI/UART/I2C/GMSL/PSI5,要做到:当别人提起这个名词时,你可以反应出"它是一种通信协议",并可以说出它的常用场景和带宽数量级。

  4. 了解常见的通信加密与安全性校验方法,比如CRC/RC校验、MD5/SHA校验、RSA加密、SecOC安全性通信等,粗略了解其数学原理与使用场景,知道哪些问题可能是因为通信校验没过引起的。

  5. 单片机与计算机原理。了解Flash/ROM/RAM是什么,定时器/中断/GPIO是什么,汇编语言/指令集/硬件加速是什么,可以简单讲出C语言是怎么转换成01二进制码在CPU中顺序执行的。自测方法:找一本单片机或微机原理的书,翻开目录,对每章每节标题中出现的术语,都可以用一两句自己的话来描述它是个什么东西、是干什么用的。

  6. 芯片。知道主流的车载芯片厂商有哪几家以及他们的热门产品有哪些(英飞凌/TI/NXP/地平线等),芯片的参数如何看(DMIPS/TOPS),如果是Arm架构芯片,还要知道A核/M核/R核都是什么东西。

附赠自动驾驶最全的学习资料和量产经验:链接

2 传感器

  1. 相机。相机的投影原理,相机标定需要标哪些参数(焦距/畸变),ISP是什么,ISP会影响哪些东西。

  2. 雷达。常见的三种雷达(超声波、毫米波、激光)的优缺点、通信方式、数据格式、数据带宽,了解主流的雷达产品供应商及他们的产品类别。

  3. 定位。这一块名词太多了,IMU、GPS、GNSS、RTK、WGS、ENU、NMEA、RTCM、PPS、GGA等等,都需要简单了解。

  4. 多传感器联合标定的目的(位姿、坐标系、欧拉角的概念),多传感器时间同步的目的与方法(主要就是PTP这个东西)。

3 整车

  1. 智驾系统与整车其它ECU交互的数据有哪些,其物理意义、单位、数量级分别是什么(给动力系统的扭矩请求、给制动系统的减速度请求与建压保压请求、给转向系统的角度或扭矩请求、给车门车灯挡位的状态请求等)。

  2. 整车网络架构,电源模式,Autosar标准中的Can网络管理(休眠唤醒),高压上下电流程。

  3. UDS诊断(能看懂诊断报文,知道一个DID/DTC中包含哪些信息),了解软件刷新流程与OTA/FOTA/SOTA流程。

  4. 整车开发V模型、FuSa/SOTIF/ASIL、故障降级,基本概念都要懂。

4 软件原理

  1. 操作系统进程与线程、优先级、实时操作系统的概念。

  2. Linux操作系统的常用命令行,文件结构。知道Linux系统根目录下哪些文件夹是系统自带不能改的,哪些是需要开发的。了解systemd,top与perf都是干什么的,了解shell基本语法,可以写或改运维脚本。

  3. MCU方面,了解autosar cp的基本架构与常见的模块,比如dcm、dem、pdur、com、canif、rte等,知道这些模块是用来干什么的。

  4. SOC方面,认真学习一款中间件,比如ROS2,深入了解node/msg/topic的概念,了解进程间通信是怎么做的(socket/共享内存),会自己写代码实现两个node间的通信,会去查看、分析node间交互的数据。(这个取决于公司的基建,不一定是ROS2,也可能是AutosarAP、CyberRT或自研中间件,但中间件的基本方法论都是相通的)。

  5. 深度学习方面,了解CUDA/TensorRT/OpenCV这些库都是干什么的。

  6. 规控方面,会简单使用Matlab,能看懂Simulink模型。

  7. 了解CI/CD和敏捷开发的概念、执行方法,会用公司的代码管理平台(Git或SVN)。

5 数学与算法原理

  1. 感知融合方面,CNN、Transformer这两个经典架构要了解,知道在数学层面这些模块是怎么计算的,知道一些经典网络(ResNet/UNet/BevFormer)的结构。

  2. 规划方面,Lattice和A*算法的基本原理。

  3. 控制方面,PID、LQR、MPC三大件。原理要清楚,公式要能看懂。

  4. 地图定位方面,EHP、EHR的基本概念,卡尔曼滤波,SLAM的基本概念。

6 C++

  1. C语言的基础知识,比较容易忽略的是define和union这两个点,车载开发中挺常用的。

  2. 熟悉跨文件的函数声明与实现,能够快速的在巨大的工程里找到自己想看的函数,理清逻辑链路。

  3. 熟悉自己公司所使用的构建工具链,可能是cmake、bazel或conan,了解工程编译特别是交叉编译的流程,能够在巨大的代码目录下迅速找到入口地址(main函数)。

  4. 熟悉常见的stl容器,比如std::vector、std::map、std::deque,知道要如何定义、初始化、修改、插入、查找,知道在什么情况下要用什么样的容器。

  5. 智能指针与简单的模板。能看懂就行,别在这方面上钻牛角尖。

  6. 函数指针、lambda表达式、std::function与std::bind。"回调函数"这个概念非常常用,一定要理解。

  7. 会简单的分析C++报错信息,其实最主要的就两点,一个是出现"undefined symbol"的时候要瞬间想到可能是环境没配对,找不到库文件,另一个就是出现"core dump"直接软件不合格,打回去让开发重搞。

  8. 认识到"C++是学不完的",如果做系统,那就不要浪费太多的精力去钻研C++高级语法。手上常备一本C++工具书,随用随查就行。

7 其它小技能

  1. 强烈建议学一手python,可以在linux下写个脚本跑个小测试,也可以用pandas处理个数据,出报表。

  2. 笔记:公司有onenote的话比较推荐onenote,没有的话可以试试vscode+markdown,个人感觉很方便。

  3. 万能编辑器:vscode。免安装版,解压即用,从capl到markdown都能给整个语法高亮,txt都能自适应自动补全。

  4. 画图:drawio。有了它基本可以舍弃visio了。

;