自动驾驶定位与感知研究方向调研
本文参考以下资料:
【深蓝学院】自动驾驶算法岗的招聘现状与未来 https://www.zhihu.com/zvideo/1425502087878328320
自主无人系统的定位与感知是让机器人走向智能化的重要一环,并且已经在移动机器人、自动驾驶等场景下有了许多落地的应用。
移动机器人主要应用为:扫地机;送餐服务机器人;AGV;物流搬运机器人等室内场景。
自动驾驶主要面向大型室外场景,具体可分为:定位、高精地图、感知、决策规划、控制 几个子模块。
二者的技术栈大部分相通,本身来说,自动驾驶也是属于机器人的一个范畴。现在,随着各种应用落地,它们的相同之处在于都具有自主移动和感知环境的能力,但是因为它们的场景不一样,实现的功能也不一样,自动驾驶主要基于道路等开放场景,而机器人主要以室内的封闭场景为主,因此软件和底盘在内的硬件都会有一定差异。另一个是由于环境不同,所需要协同的对象也不同,自动驾驶时车辆需要与道路标志、红绿灯等进行协同,而服务机器人需要在室内场景与电梯进行交互等。
下面针对定位与感知两个方向进行调研分析:
一、定位(SLAM)
1.激光SLAM
常规场景下的纯Lidar的SLAM问题已十分成熟,许多优秀的开源SLAM算法大大促进了相关产品的落地应用。例如2D激光SLAM算法Cartographer、Gmapping等;3D激光SLAM,LOAM曾经屠榜KITTI Odemetry排行榜。基于LOAM的改进算法也层出不穷,把激光雷达与惯导、视觉融合,其中比较有代表性的有Tixiao Shan 大神的 LeGO-LOAM、LIO-SAM、LVI-SAM。
量产自动驾驶出于传感器的成本的考虑,往往会选择以相机为主的方案,例如Tesla就是纯视觉方案(马斯克名言:“傻子才用激光雷达。”)。近些年来随着激光雷达成本的降低(固态激光雷达价格越来越便宜),量产自动驾驶也开始采用激光雷达的方案。港大Fu Zhang老师团队利用Livox固态激光雷达,做出了FAST-LIO、R2LIVE等优秀的工作。
对于许多开源算法,他的实现可能与论文写的不一致,比如经典的LOAM算法,作者曾经开源过代码,但后来又取消了开源,港科大自己重写了简化版本A-LOAM,把源码中一些手动实现的运算用Ceres等库重新实现了一遍,非常适合新手入门。在后来的其他人的工作里,LOAM都被“吊打”,但LOAM仍然牢牢霸占KITTI排行榜的前两位,这是因为LOAM的作者针对KITTI数据集做了很多工程上的Trick和优化,具体怎么实现的我们不得而知,在他曾经开源过的代码中也没有体现。这也说明了一个问题,借用曾书格老师的话说:“作为算法工程师,真正让你脱颖而出的不是你掌握了多少算法,而是你怎么将他更好地实现。因为这些优秀的算法,原理大家都学过,大家都是搞算法的,你知道的别人也都知道,但怎么来用,最终能实现达到什么样的效果才是体现功力的地方。有可能那些实用的方法看起来很low,没有一点理论的优美性,但它可能会让你的效果有一个很大的提升。同样一个算法,但不同的人实现出来的效果可能就会差很多很多,你需要加很多trick,需要运用到一些技巧。Ji Zhang的LOAM就是一个例子,他开源的代码跑出来效果一般,但他优化后放到KITTI上的就是比其他人都要强。“
2.视觉SLAM
- ORB SLAM 1/2/3
- VINS mono/Fusion
- OKVIS
Q: 入门视觉SLAM,需要了解哪些框架?
A:主要看做哪个方向,用到哪些传感器。单目卷帘快门相机,参考ORB-SLAM 2/3框架;单目全局快门相机,不要求闭环和地图重用,参考DSO框架;单目/双目 + 惯导,参考ORB-SLAM3、VINS-Fusion框架;RGB-D相机,主要用于稠密重建,可参考Elastic fusion、InfiniTAM框架
3.未来研究趋势
- 语义SLAM
- Learning-based SLAM
- 激光 + 视觉的融合
4.工业界的发展
对于L4级别的自动驾驶,目前国内大多数公司的定位方案都是 多传感器融合定位 + 高精地图,多传感器一般指 Lidar + IMU + GNSS + Camera 的融合,高精地图相对于传统地图有着更多维度的数据,比如道路形状、坡度、曲率、航向、横坡角等,自动驾驶汽车将自身的环境感知和定位结果与高精地图进行对比,从而得到车辆在高精地图中更加精确的位置和姿态。
不过特斯拉依然坚持纯视觉的方案,特斯拉的目标一直都是L5级别的自动驾驶,人类司机可以只用眼睛进行感知,他们希望机器也能通过相机做到这样,而不额外增添许多昂贵的传感器。当然特斯拉对纯视觉方案的信心来源于强大的技术实力:软硬件自研+全球顶尖的算力+大规模数据集,更多关于特斯拉的自动驾驶方案可参考【Tesla AI Day-2021年,特斯拉 AI day会议完整版】。与特斯拉的纯视觉方案相比,激光雷达+高精地图的方案 更像是一种能够更快看到成果,使L4级别产品尽快落地的保守策略。尽管L5级别的自动驾驶可能在近五年内都没有希望实现,但好消息是许多公司的L4自动驾驶产品已经接近落地了。目前国内许多公司的做法是,选取一片城区道路,建立高精地图,不断在这段道路上对感知等算法进行优化,不断针对Corner Case进行改进,甚至过拟合。于是我们可以看到许多自动驾驶公司的视频展示里效果已经很好,号称可以做到“xx公里全程无人接管”,但我觉得这样硬优化出来的感知算法的泛化性还是要打一个大大的问号。依我浅薄之见,这种基于高精地图的技术路线只能实现局部地区的自动驾驶,对于真正意义上L5级别的自动驾驶,还是要等技术研究层面上的进一步突破。
5.技术栈
扎实的理论基础:
- SLAM基础知识:前端里程计匹配方法ICP、NDT…
各种传感器基本特性:IMU传感器特性;GNSS基本原理
数理基础:线性代数、概率论、李群李代数、非线性优化、图优化
状态估计方法:卡尔曼滤波,EKF…
扎实的代码能力:
C++
ROS
PCL、Eigen、Ceres、Sophus、G2O
数据结构与算法
Leecode
Git
二、感知
自动驾驶的感知主要有以下几个方向:
- 图像/点云 语义分割
- 2D/3D 目标检测,车道线检测
- 单目/双目 深度估计
- 视觉和Lidar融合感知(前融合、后融合)
(未完待续…)
三、其他
1.自动驾驶公司
- 百度Apollo:起步早,Apollo开发平台可以学习一下
- 大疆车载
- 小鹏汽车
小马智行
AutoX:国内规模最大的RoboTaxi公司
momenta
华为车bu
元戎启行
文远知行:RoboTaxi
- 斯年智驾:港口无人货运
2.对在校生的建议
如果以后想走偏学术的路线话,尽量做一些比较前沿的研究领域,比如SLAM和深度学习结合,比较容易发文章;对于传统的SLAM算法来说进展就比较缓慢了,需要大量的实践才能出一个比较好的结果,比如ORB系列经历了好几年才到第三代,其他的像VINS系列也是比较好的,其他的优秀的传统SLAM开源算法就越来越少了。跟深度学习相关的SLAM算法近年来工作比较多,因为它可以解决一些小问题,建议选择一个方向然后做精做深。
对于以后打算去工业界发展的话,那么与其追求最新的论文,不如多跑跑代码,多写写代码,多做一些实际项目,毕竟找工作的话更看重的是:代码能力、工程实践能力、解决问题能力、项目经验。最后建议以开源优秀代码为基础,站在巨人的肩膀上,学习资料也多一些,能交流的人也多一些,进步也更快。
前期多调研,寻找自己的感兴趣方向,不建议一上来就看英文的最新的论文,可以上知网上查查方向相关的学位论文,读个一二十篇就能对这个领域了解个大概,看看自己感不感兴趣。另外可以去招聘网站上看看相关岗位的需求,要求掌握哪些算法,作为学习的目标。
别一味跟风学热门技术。要从自身情况出发,选择那些社会人才需求长期持续的领域,而这个领域自己又比较有兴趣,或者己经打下了不错的基础,然后就在此领域深耕,从理论到实践,全方位系统地深入地学习,专注于培养和提升这个领域的职业技能。不反对跟风学热门技术,但反对盲目跟风,认真慎重地选,选定之后,就需要在这个技术上投入足够多的时间和精力,这时,就要有定力,别在随意更换了。
3.企业看重的能力
- 代码能力强
- 基础扎实
- 有良好的学习习惯,具有被培养的潜力
- 思维方式以及面试中的交流沟通意识
- 做事细致且深入,简历可以体现出他每件事都是踏踏实实用心做的
- 不喜欢不求甚解的,忌讳华而不实。