- 斯坦福的 hybrid a*udacity 的 jmt 算法 找找 carnd path planning 课程强烈建议先把 apollo 的路径速度规划学一遍 了解什么是 frenet 坐标系 掌握好 dp 搜索、piecewise 及五次多项式优化算法 这一代算法管它叫时空分离
- 把状态机、决策系统看多一点 学习时空联合算法 要学习一下时和空联合在一起的规划算法 耗时大但是能更好地处理动态障碍物 推荐学习spatio temporal hybrid a*搜索 mpc优化 cfs 凸空间切割(最推荐李升波老师的 Enable faster and smoother spatio-temporal trajectory planning)
- 要仔细想想 xy 和 sl 相比各自优缺点是什么 当然 也不排斥 slt 的规划算法
- 掌握 AI 决策规划 这里面分有监督学习和强化学习 有监督比较好学 随便找个深度学习课程就可以上手 但是对于强化学习 个人理解首先要熟练掌握笛卡尔坐标系时空联合规划算法 然后学习强化学习的理论 利用 parl 进行代码实战 最后刷一些论文 目前李升波老师课题组的强化IDC 已经上车运行 可以说是走在AI最前沿
- 把 apollo 整个代码拉下来好好盘(这里指的是当问到 C++ 以及算法原理都能根据 apollo 引经据典去说)
- C++ 背点常见的八股文 如果不知道背什么那就看看 apollo 里面 C++ 用了什么就背什么 问起来的时候引经据典
- leetcode 刷点就行 其实听着那些人跟你说刷题无外乎就是背题 一个个显得有多牛逼 除了acmer 大家都是背题哥 这都是时间问题 dfs 和 bfs 多做点 比如 lc 200 好多公司都懒得变一下就是原题就出来了
- 算法是最不重要的 什么hybrid A*、lattice、 EM 搞量产这些大概也不会全部被用到 甚至能用都是阉割版的 能把整个流程和原理搞明白就行了 遇到那种让你推线性黎卡提方程一步一步算的多少沾点nt了 看着算法工程师 去了都是调车 问算法是因为校招实在没啥可问的不然都去问项目了
- 开发能力很重要 如何在面试中展现出你写过代码这个比较重要 比如在笔试的时候主动把题拉到你自己的 vscode 里面进行配环境编译 再运行 这样面试官会很看重这一点 找人来是工作的 不是背题的!
- 搞一些项目往简历上写 简历就是你的开卷考试题目 没做也能写 但是问到就得会
- 国内最好混两篇文章 同样是为了简历
- 同样地 找实习 别去那种什么 hr 跟你说能学到东西的地方 直接谁家牌子大去谁家
- 做到以上几点你(在技术上)已经比很多面试官都强了 他们包括我在内都是因为早毕业两年成了老逼 其实好多东西真的还未必比你强 核心竞争力是因为他们了解业务而你还是学生 百分之80的公司都受用 学校的课随便意思意思就行了 早点为了面试准备比什么都有用 我之前很喜欢钻研技术 可惜等你到社会上之后才会发现“学得到东西往往不是最重要的” ——————2023 0722 分割线—————— 一觉醒来发现竟然大家有这么多人认同还是蛮欣慰的,其实我说的这些也只是一些“阳面”上的东西,核心在于帮助学生能尽量不那么学生思维地去考虑事情(摆脱就别想了,经历都没到),事实上看到现在就业市场的神仙打架,经济下行的情况下真的很心疼那些单纯的毕业生小白们,如果有必要之后可以再讲讲怎么笔试面试,职场上怎么对付各种老油条(话术>技术),这都是学校不曾教你但是不会就要被社会毒打的技能。我不认为自己比大家能力强,也只是赶在21年自动驾驶的热潮末期入场,算下来2年不到我已经换了三次工作,央企,互联网大厂,外企都经历过了,希望这些经历能帮助到大家,也算为大家在寒气中提供一些希望吧。
- 规划算法相关: Steven M. LaValle的《Planning Algorithms,有官方的html版,可以在线看 Sebastian Thrun的《概率机器人》后几章 介绍了MDP相关 Sebastian Thrun还有《Principles of Robot motion》
- 碰撞检测:《realtime collision detection》 决策:《algorithms for decision making》
- C++: 《effective c++》 《算法》
- 还有可以多看一些数学书
- 从实际工作需要方面讲:若只是小硕,工作后从事落地项目于自己发展更加有益,自动驾驶系统智能算法的主流编程语言还是C++/C。从面试方面讲:大部分自动驾驶公司对硕士候选人有上机测试这一环节(有些公司甚至对博士也有这一环节),大概率会是C++编程题,需要提前刷一些题,但是我否认刷题能提升编程能力。编程能力甚至都不能光从学习中得到,它是通过实践得到的。快速的提升某一编程语言能力的直接又高效的方式是——深耕于基于该编程语言的一个完整实车(或小型实验车)项目。
- 大部分自动驾驶公司不会在最终的产品中直接用ROS,都有自己的中间件。应届生能把ROS这一套运用的很熟练就可以了。它包含了中间件功能层的大部分特点。剩下的底层的实现只是影响中间件的性能,例如数据传输的实时性与稳定性等。对于智能驾驶算法岗,如果能把几个有一定用户量的机器人/自动驾驶操作系统之间的区别及背后的简单机制掌握是加分项。
- 规划控制不分家,特别是楼主关注的局部路径规划与底层控制更是如此。它们背后的数学理论是相同的——都建模成一个优化问题,有解空间、约束、目标优化(成本)函数。但是,两者在机器人/自动驾驶系统中的任务背景是不同的,为了逐步形成一种专业的知识背景,不建议入门时就把规划与控制放在一起学。当你对规划与控制都有一个清晰的认识时,把两个模块同时考虑有助于提出更加有效的驾驶行为产生方法。另外,大致介绍一下,规划与控制软、硬结合的两种方式(希望对楼主的研究思路有所帮助):1)软结合:规划主动的考虑控制模型的反馈,例如轨迹规划模型主动的考虑自车的轨迹跟踪误差,然后根据跟踪误差来自适应调整轨迹规划中的曲率-速度约束函数;2)硬结合:轨迹规划与轨迹跟踪控制耦合,例如用于轨迹跟踪的模型预测控制(MPC),本身就是一个标准的优化问题形式,在约束与成本函数中加入障碍物的信息,使之同时具备轨迹规划与跟踪的能力。 最后推荐一下本人的两个专栏,《无人驾驶技术系统》与《自动驾驶规划与控制入门》。
- 首先作为自动驾驶从业人员一定要学习自动驾驶平台,如开源的百度apollo,apollo具有大量的开源资料和仿真平台,为无车的大家提供了一个很好的学习平台,通过apollo可以了解自动驾驶软件架构和各模块代码。
- 基础工具:熟练使用linux,ros,rviz,docker,cmake,git,gdb等工具,工欲善其事,必先利其器。
- 代码能力提升:熟练掌握C++,可以通过练习leetcode代码提升能力,掌握C++数据结构。
- 规划算法学习:A*,hybird a star,RRT,Dijkstra,多项式,贝塞尔,b样条,RS曲线,dubins曲线,圆弧曲线,螺旋曲线等。
- 控制算法学习:MPC,LQR,模糊控制,PID等
- 计算几何:向量,标量,矩阵,坐标转换,碰撞检测,曲线,直线相交,点到线距离等。
- 数值优化:梯度下降,QP,序列二次规划等8.决策理论:POMDP,MDP,状态机,决策树,贝叶斯理论等。
- 博弈论:纳什均衡等
- 车辆动力学和运动学模型。
- 策略迭代的学习方法:Qlearning等方法。
- 熟悉交通规则和驾驶能力
- 还有一些仿真工具,如百度,carla,sumo等
- 基础学习
- (1)基础知识主要学习c++,对脚本语言如python也要了解一些。c++:基本语法、三大特性:封装继承多态、泛型编程、stl、内存管理以及c++11新标准等。推荐:b站上侯捷老师的课程。此外我还看了黑马程序员(时间充裕入门可以看、很基础)推荐书籍: c++ Primer/STL源码解析/Effective c++/深度解析c++对象模型等。数据结构算法:如堆、栈、链表、队列、树、图、时间空间复杂度计算,排序算法(快排、归并)、KMP算法等。其次要学会分析代码的时间复杂度和空间复杂度。推荐书籍: 大话数据结构设计模式:单例模式(手写单例代码、如何保证只有一个对象等)、工厂模式、模板等。推荐:李建忠老师的设计模式课数学基础:可以看一些概率论、计算机几何、非线性优化的书籍,夯实基础。
- (2)高频面经题面试前一个月重点复习高频的面试题,代码随想录以及一些网站都有整理。一般虚函数、智能指针、指针和引用的区别和c++11标准是经常考察的。我也整理了一些资料,需要可以私聊。关于算法的面经题集中在项目中涉及的算法原理、改进思路
- (3)刷题路线必刷:代码随想录力扣:hoot100、剑指offer之后可以针对不足进行专题训练,如路径问题、dfs算法、二叉树等。自动驾驶公司面试喜欢考察dfs\bfs、二叉树最大、最小路径问题以及一些岛屿和图的题目,可重点准备。每次刷题要先思考,写出来。没思路、看答案,尽量理解不同题解,最后在白板写出,记住解题思路和核心步骤。最后及时复习,一般都要二刷或者三刷。考前重点复习经典题型、薄弱环节、限时作答。注意:很多面试笔试都是ACM 模式,非力扣得核心代码模式,考前要学会自己写输入输出,以及一些需要建立链表、二叉树等。ACM处理输入输出大全。此外,自动驾驶算法应用中常常涉及一些处理几何的问题,一些自动驾驶公司面试也会重点考察几何题。遇到过:判断直线相交、点和三角形关系、三点求曲率、折线等分...。后期有时间会专门整理相关算法和代码。
- 算法学习规划算法:
- 基于搜索、采样、优化和曲线拟合的路径规划算法,推荐我整理的一些路径规划算法博文,重点准备基于优化的规划算法(Em planer)、Lattice planer、时空联合的优化算法等),在写写代码。推荐:深蓝学院移动机器人课程,深入讲解了规划算法。
- 控制算法:
- 具备基础的控制理论基础(可控、可观)、主要是一些横纵向控制算法。经典的包括PID算法、LQR算法、MPC算法。还有一些轨迹预测的算法stanly也推荐看看。推荐:B站Apollo课程、Apollo开源代码。
- 预测算法:可以看看常用的预测网络densetnt、vetornet、lanegcn等。还有一些传统的预测方法。
- 决策算法:有限状态机、决策树、数据驱动和一些策略学习的方法(强化学习DQN等)传统的预测规划控制算法实践推荐看Apollo项目,自己运行尝试实现不同城市交通场景的自动驾驶仿真(交通灯检测、行人过马路、超车、停车、无保护左转等场景),这部分我们也在做专栏学习,包括环境搭建、算法原理和代码解析,适合缺乏实习经验的同学或者增添简历项目的同学学习。Apollo项目是来自产业界的,推荐学习。
- 提高优势1、大厂实习关注一些大厂官网,一般研二寒假就要准备,实习面试更注重基础,因此重点提高基础,实习的几率还是很大的。最好问下是否可以转正。这样秋招可以先人一步。如果大厂比较困难,一些独角兽车厂也是不错的选择。在实习时争取有产出,在面试会有很大的优势。 2、高水平论文在研一发篇会议或者争取发篇自动驾驶相关的sci,会有很多加分。一般9、10月开题确定好,利用好研二,争取发篇sci。即便在投,有审稿意见不错的话,也是很有优势的。面试更注重你论文的创新思路,解决什么样的技术,是否上实车或者距离落地还有哪些不足等值得注意的是,面试前最好阅读一些自动驾驶的前沿论文,了解前沿技术的趋势。3、比赛项目项目经历:这部分主要是实验室参加的一些自然基金的纵向项目和企业的一些横向项目。如果实验室项目相对较少,可以实践一些开源项目,想一些改进的点融合进去,允许的情况下,可以把改进代码开源也是能力的证明。面试时按照STAR法则讲解:背景是什么?我们的任务?做了哪些工作?获得什么样的结果?面试官对项目感兴趣,也会主要问项目做了什么事?用了哪些方法?用这种方法的优势?有什么改进?延申问一些问题。经常会问到自动驾驶在特定场景下,算法设计的思路?比赛:kaggle、天池和飞桨上面经常发布一些比赛,大家可以关注。此外一些人工智能大赛、百度Apollo举办的比赛也是不错的比赛,此外国家智能网联车经常发布一些自动驾驶的比赛。总之,关注学校或者官网发布的一些比赛,参加比赛还是能很好地提高自己的算法代码能力,也可以丰富简历。计算机类:参加ACM等编程大赛在一些开源平台开源项目代码,写在简历上都是代码能力的证明。
- 第一章 轨迹及路径的几何表述轨迹及路径
- 第二章 样条曲线及插值拉格朗日插值牛顿插值,差商切触插值样条曲线和分段样条拟合(1)样条曲线和分段样条拟合(2):CSAPS原理推导第三章 欧式空间几何运算及分析学基础(更新中)空间,线性映射和线性空间线性代数的几何意义空间及坐标系的描述
- 第四章 概率学基础(未开)条件概率与贝叶斯模型基本拓扑概念 图论微分方程规划算法篇
- 第五章 状态空间(未开)
- 第六章 离散空间的规划规划(未开)
- 第七章 连续空间的规划带约束的运动规划(未开)基于采样的运动规划(未开)
- 第八章 碰撞检测(未开)描述模型常用几何体的重叠计算多目标碰撞的计算和优化实时动态目标的碰撞检测决策算法篇
- 第九章 不确定性规划(未开)
- 第十章 博弈论基础(更新中)基础概念静态博弈动态博弈
- 理论:学习常用的决策算法,如决策状态机、决策树、马尔可夫决策过程,POMDP等;如果往深里学的话,还需要学习深度学习,学习深度学习框架等。
- 5.规划算法学习:A*,hybird a star,RRT,Dijkstra,多项式,贝塞尔,b样条,RS曲线,圆弧曲线等。6.控制算法学习:MPC,LQR,模糊控制,PID等7.计算几何:向量,标量,矩阵,坐标转换,碰撞检测,曲线,直线相交,点到线距离等。8.数值优化:QP等9.决策理论:POMDP,MDP,状态机,决策树等。10.一些策略迭代的学习方法:qlearning等方法。 这么多东西当然是学习不完的,建议从上到下学习,只有真正在一个平台上将规控算法跑起来才能入门,建议从apollo入手。