目录

写在前面

选你所爱,兴趣是最好的老师。

爱你所选,专注是最好的朋友。

抓住重点——强化对核心知识的掌握

架构剖析——用闭环思维来贯穿始终

总结


写在前面

情不知所起,一往而深。

你,在冥冥中,选择了无人车辆领域。

你,某一刻后,突然感觉知识很有趣,工作很有意思。

你,此后偶尔,身体会疲惫,但精神不会懈怠,知识和技能以螺旋线方式迭代。

你,每时每刻,幸福感充盈,细节变得有意义,仿佛每天都在打磨一件艺术品。

你知道,无人车辆是一个综合性极强的领域,可以作为载体,承载和联系多种跨学科的专业知识和项目成果。行者无疆,学海无涯。你时常想起这句话,更认为,“行者”也可以是一辆车啊。天地有多广,“行者”探索的范围就有多大,而创造这些“行者”的人就需要具备足够的知识和经验,以应对探索过程中遇到的有趣问题。

你清楚,知识获取和经验积累只能秉承长期主义,厚积而薄发。若想在学习中夯实基础知识和精通要点知识,只能做好高质量笔记,并及时复习;若想在工作中积累有价值的项目经验和从点滴灵感中筛选出创新,只能有规律有目标地进行工作总结,并及时复盘。知识需要复习,工作需要复盘,两个“复”动作,使你的状态呈现螺旋上升之势——俯视时(短期来看)有闭环,侧视(长期来看)有提升。

你,是谁?可以是我,也可以是所有和你一样对无人车辆有这浓厚兴趣的人。

这样很好,你给自己加油!并打算先从提纲挈领的软件架构开始,以便分门别类地进行积累,于是,就愉快地出发了。

选你所爱,兴趣是最好的老师。

你发现,一切都异常神奇。几乎所有男孩都对车子无免疫力,甚至,对所有带轮子或可移动的物体,都没有免疫力。生活中,稍微留意,你总能见到,小男孩拉着爷爷奶奶围着挖土机转,念念有词,喜不自胜;若机器能开动起来,第一次见的孩子会躲到爷爷身后,露出半个头,又喜又怕。孩子们回到家后,又会拿出心爱的变形金刚汽车人玩具,边把玩,边口中念念有词,再配上bgm。也许,这与男人崇尚运动和追求力量美的原始基因有很大关系。

如你所见,当今世纪是科技飞速发展的时代,各式各样的机器人逐渐走进我们的生活,代替人从事机械而重复的劳作,也扩大了人的影响范围。社会整体效率越来越高,技术发展越来越快,产品迭代越来越频繁,进而,改变了你我的生活。曾经只能在科幻电影里出现的智能产品,如今不仅毫不违和地成为日用品,即便是老人和孩子也不会感觉陌生。对的,当然也包括你我此时浮现在脑海里的无人汽车。

你觉得,非常有幸,长大后成为了一个理工男,能从事运动控制和车辆工程的工作。既能延续儿时对形形色色车的迷恋和喜欢,也能亲自参与各式各样车辆的研发与制作。每每在新产品落地的那一刻,仿佛看见一个个新奇的散发着荷尔蒙的机器尤物,它们自带高光,美轮美奂。工作内容是自己喜欢的,那么,工作便如同游戏一般,每天遇到新问题,仿佛游戏中打怪升级,其乐无穷。

你明白,这不用惊讶,因为按照机器人的广义定义,智能移动车辆也属于机器人的范畴。只是通常来讲,移动车辆不太可能具备人的外形。而且你相信,持续地受人工智能AI加持,科幻电影里的变形金刚汽车人变成现实,也只是时间问题。但是,在现阶段,未来的“汽车人”还是处于相当初级的阶段。按照工作场景,分为两大分支,园区内和园区外,用大白话来讲,前者只能在园区活动,而后者可以开到马路上。

你问自己,如何选择?其实,这不是个问题,每一方向都非常引人入胜,不会让人失望。

爱你所选,专注是最好的朋友。

这两大分支,无论选哪一个方向继续前行,我们都会被前浪牵引,被后浪强推,不费力气,便可领略科技更迭的速度感。没错,信息爆炸,汹涌而来。如同处于早高峰的上海地铁,你可以双脚离地,好似离地飞行,也能被裹挟着拥簇着向前。面对信息的洪流,与其无脑地随着技术热点随波逐流,被学术界百花齐放的模型、工具、方法和成果展示炫花了眼,倒不如主动地做出筛选,寻找信息背后的共通点。用一种很潮的表达方式——深度掌握业内的第一性原理。按照这个思路,很快,你会发现,根本不需要特意选择。因为场景虽然有所不同,但基础的技术框架和底层逻辑是完全一样的。深度理解这些内容,才是行业从业者需要每天练习的基本功,才算抓住了树干,而学术界百花齐放的模型、工具、方法和成果展示,只是生发出来的枝叶。如此一来,树干与枝叶,何为重点,而你的时间又该放在哪里,一目了然。

从易得性角度考虑,你选择将基本功的练习聚焦到园区内的低速无人领域。正如即便你选择学的是屠龙绝技,也不需要每天真的去屠龙,也许更多的时间你在磨刀,你在砍小怪兽练习升级,你升级后又去砍大怪兽。很快,你会发现,选择这种易得的领域练手,花不花钱都可以很开心。若不想花钱,直接在仿真环境里搭建车辆模型和运动场景,体验也不差;若想花点钱在家中常备,也可选择自己攒,或直接网上买,费用大概和买个新手机相当。当然,和买手机类似,你可能会有高配和低配的纠结,但是,当你需要解决的是有无问题时,选哪个真的不重要。

想到这里,你顺便捋了捋工业界的主流车型。常见的有使用遥控器操作的遥控车(只受控于遥控器)、有基于磁钉、色带、二维码导航的巡线车(沿着预设在工作环境中的磁钉、磁条、色带和二维码自动运行),也有目前处于上升通道的SLAM自主导航车(基于SLAM/VSLAM技术进行定位和建图)。他们被亲切地取了一个个洋气的英文名,从早期的AGV(自导引车)到时下流行的AMR(自主移动机器人)。不管如何命名,他们本质上依旧属于低速无人驾驶的技术范畴。

如同人类在认识和理解世界的过程中,一定是从简单到复杂,由局部到更大的局部,存在着不断完善和不停迭代。从遥控车到巡线车再到自主导航车,车辆设计在不断完善,功能在不停增强。你告诫自己,不需要将他们理解成为一个个新的事物,而应当看做同一事物的不同发展阶段。如同一副徐徐展开的卷轴,随着时间的推移,会越来越完整。

你意识到,无人车辆领域是一个快速发展的大领域,每一细分市场都随着时间推移而逐渐丰富。因此,选择一个你喜欢的领域固然重要,而选择之后的持续热爱才是“有所得”的必要条件,这份热爱需要你持续的投入和充分的专注。积水成渊,集腋成裘,与时间成为朋友,让专注成为伙伴,路在脚下。

抓住重点——强化对核心知识的掌握

面对如此多的车型分类和专业术语,你必然会感觉有些眼花缭乱。这时,就该强调一下系统化思维了。系统化思维是碎片化学习的粘合剂,能将点滴经验和知识浇铸成一座具有生命力的艺术之山。具有系统化思维的人才能真正看破事物本质。当聚焦在无人驾驶领域,剥离无人车辆的物理结构和美学外形,从单体控制与集群调度的角度去思考,会发现,即便是需要囊括五花八门的车辆运动模型,也可以整合成统一形式的无人驾驶系统控制框架。

心流流到这里,稍有经验的你肯定会想到常见的ROS,想到百度Apollo。但这里要指出的是,ROS基于广义上机器人系统,是一套通用工具,常用于快速验证算法和常规商业场景;而百度Apollo系统是为了帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。不可否认,有了这些工具,就可以借鉴这两者及类似系统的思想和方法,但你应当提醒自己注意,小心掉入沾沾自喜的狭隘心态里,把“对工具的熟练掌握”当做“对核心技术的深刻理解”,成为了“调参侠”而不知。

当然,无论是软件操作或是算法实现层面,都有各自待解决的问题和优化的方向。所谓文无第一,武无第二,从技术角度而言,并不是说软件操作和软件实现相比算法层面的技术性逊色一些,而是说,算法背后的逻辑思路和数学推导更加抽象,可以不受限的选择任何一种语言在很多种平台上实现,即便是同一种语言也可以用很多中实现方式。但是,任何一种操作软件的流行或黯淡,受到天时地利人和的多重影响。受限于你的专业知识与项目经验的局限,不同工作环境下,你很有可能会选择完全不同的上层软件,甚至是一些小众的编程语言。因此,从更本质的角度去思考和选择的话,也许无人驾驶背后的算法原理和逻辑思路更像是基本功。

你进一步地问,无人驾驶的相关算法不计其数,那究竟什么才是整个技术框架里的树干,哪些又是枝干和树叶?带着这些问题,也避免重复造轮子,你选择先参考业内成熟的框架。你打算多接触业内的无人驾驶软件产品,无论开源或是商业产品,只要有机会就多了解,有条件就仔细问。经过一番对比,你觉得百度Apollo的架构相对完整,和自己的理解比较接近,那就试着从百度Apollo框架切入,剖析出形式更一般的无人驾驶框架,其意义如同获取未知世界的导航地图一样重要。

架构剖析——用闭环思维来贯穿始终

当我写下这些文字时,Apollo最新版是7.0,相比6.0主要变动在云端服务平台。此外,开源软件平台里,感知和预测模块里虽有更新,也只是增加了深度学习的新模型。值得注意的是,7.0与6.0比较而言,模块数量没有改变。这说明一个问题,到6.0版本时,Apollo的软件架构基本定型,可以认为能够覆盖住无人驾驶的大部分场景,解决绝大部分问题。所以,我们结合英文版的6.0软件架构,以中英文对照的方式继续进一步思考。

首先是最上层的云服务平台,关键词是服务,体现形式是云,主要目的是为了使整套软件更好用,妥妥的“软装修”,所以,姑且归纳为软件层;接着是开源软件平台,除去RTOS·、pollo Cyber RT、V2X适配器(V2X adaptor)和HMI(人机交互)这些软件类的系统或工具实现,剩下的是一个个功能模块(对应Apollo V7.0架构图中红框内容),对应着丰富的算法,是我们需要关注的重点;再接着是,硬件开发平台(Hardware Dev Platform)主要是通讯接口的实现,便于这些硬件在RTOS和Apollo Cyber RT系统中进一步使用,每一类硬件都会有工程化的标准解决方案可以参考,因此,学习的重点在于硬件(大部分是传感器)原理的理解和总线协议的熟练掌握,之后便可轻松应对同类的所有产品;最后是车辆参考平台,百度Apollo侧重解决汽车行业的问题,对应的驱动形式是阿克曼底盘或是四驱模型,我们将拓展并延伸至更丰富的底盘形式(对应Apollo V7.0架构图中绿框内容)。

随后,你在网上看到一张关于百度Apollo的软件架构图,切合了对无人驾驶技术架构的理解。为了便于后续知识积累更加系统化,也为了将算法类知识和软件类知识稍作区别,你将Monitor(监控系统,监控车辆中所有的软硬件)和HMI(人机交互,帮助使用者与系统之间进行信息交互)剔除,并认为Guardian(监控模块,监控检测故障并进行干预)属于一种安全模块,侧重于软件工程实现,可在control模块和CANbus模块里分布式考虑和实现。同时,为支持多种形式的运动底盘,将CANbus模块升级为更一般的Chassis底盘控制模块。更特别的,在上图基础上,增加了Routing路由模块,以实现全局范围内的路径规划。考虑到,在特殊的场景里,比如底下车库或工厂内部等,需要车辆自行建图,因此将原来的HD map高清地图换成了更一般的mapping建图模块。因此,无人驾驶的技术框架归纳为如下形式。

有一种观点认为,Apollo 无人驾驶平台是以高精地图和定位模块作为核心,其他的模块都是以这两个模块为基础。这种理解其实很自然。你也发现,在重新整理后的软件架构里,Mapping和Localization与绝大多数模块(除了Control控制模块和Chassis底盘模块)相关,而无人驾驶的核心算法集中在自主导航部分,由感知、预测、规划和控制四个子模块组成。在百度Apollo的每次版本更新中,这4个板块必有更新,perception尤为突出。因此,将高清地图和定位模块作为核心的理解是可以接受的,但是从系统性和控制论的角度来看,总觉得结构不够清晰,或者说,这张图只是理清了各个模块之间的信息交换关系,但并没有体现模块与模块之间的系统结构关系。基于这样的思路,结合控制论中对稳定系统闭环结构的基本要求,有了下面这张图。

当然,这种结构可用作理解无人驾驶的技术架构。更特别的是,通过不同版本之间的自由组合,可以清晰地理解无人驾驶车辆的技术演变史。为了让整个系统结构更简洁,将架构图中功能相近的模块进行整合,形成5个组合板块(其实,也对应着无人驾驶系统开发公司的5种技术岗)。

首先,本质上讲,无人驾驶问题的控制对象是以底盘所代表的车辆,改变的是车辆位姿,对应的是图中1号板块,解决的是正向和逆向运动学问题。如果车辆控制信息来自遥控器、手操器或者是直接驾驶,就形成了一个最简单的开环系统,由人来完成车辆的启停和控制。这对应着车辆控制的原始阶段。

接着,2号板块解决的问题简称规控问题。在早期,无人驾驶的车道线巡线,园区内基于磁条或色带的自动导航,可以认为是定轨迹的规控问题。当后续第4板块的地图与实时定位技术纳入系统后,定轨迹问题就升级为了变轨迹的规控问题,也就是说,不用完全依靠环境中预设的轨迹,可以根据需求在多种可能的轨迹中寻优并进行控制。所以,这里的Planning规划指的是局部规划,属于轨迹优化、轨迹规划的范畴,有别与5号板块的全局规划。

在3号板块里,早期的Perception感知比较单纯,仅仅是检测一定范围内障碍物的有无,属于静态的检测,起到安全保护的作用;随着神经网络的盛行,可感知的信息越来越丰富,与控制相关的有车道线和红绿灯以及导引标志等,与安全有关的有障碍物检测和360度环视等;而Prediction预测是静态感知的升级,增加运动环境中被检测对象的运动状态信息,进一步提升系统的安全性。同样,当第4板块的地图与实时定位信息加入系统后,从3号板块的检测范围进一步扩大和灵活,基于这些信息,第5板块的Routing路由模块可以灵活规划全局路径。

4号板块的出现,对2号和3号板块的所有模块都有促进作用,作用体现在提高系统的灵活性。需要特别指出的是,SLAM技术能覆盖建图和定位的双重功能,但并不代表必须同时使用两种功能,多数情况下提到SLAM是为了构建一幅高精地图HD map,以便于在局部环境中达到更高的定位精度。

最后,5号板块解决的是全局路径规划问题,与2号板块里的Planning局部路径规划有所区别,多在调度系统中进行实现。

至此,有必要对整个系统中的所有子模块做一下简单定义:

Chassis —— 底盘模块,将整车控制命令分解为轮组控制,并反馈车辆状态信息。

Control——控制模块,通过产生加减速和转向等整车控制命令来执行计划的时空轨迹。

Planning——规划模块,规划车辆要采取的局部时空轨迹。

Perception——感知模块,识别车辆周围的环境,典型有障碍物检测和交通灯检测。

Prediction——预测模块,预测障碍物未来的运动轨迹。

Mapping——建图模块,实时构建或更新局部地图。

Localization——定位模块,利用各种信息源(如 GPS、LiDAR 和 IMU)估计车辆位姿。

Routing——路由模块,确定车辆到达目的地的全局路径。

总结

兴趣是天生有的,专注需后天培养,而重点是苦练核心技能。

基于现有的知识和经验,为了更好地理解系统的组成,也为了便于后续知识和经验的积累,你重新整理无人驾驶系统的架构,大致会分成以下5大技术板块进行展开:

  1. Chassis —— 底盘控制。
  2. Planning&Control——规划与控制。
  3. Perception——感知与预测。
  4. SLAM——同步建图与定位。
  5. Routing——全局规划。

可以想见,每个板块都会有很多的技术分支,若不分区别地学习会划掉大量时间而收获有限。你需要深入后,追根溯源找到每个分支里的源头活水,对核心知识进行逐一掌握和融会贯通。

下次聊的内容还没定,但你想,5个板块都值得好好探究,进一寸都有一寸的欢喜。

好了,下次再聊。

无人车之美——论无人车辆系统的软件架构相关推荐

  1. 无人车之美——软件架构篇

    --刻意练习,不停地刻意练习! 接上一篇. 无人车之美--技术要点速览本文以自身经历回顾进入无人车领域的心路历程和心流变化,并在无人车软件架构的基础上,罗列各个板块所必须掌握的基础知识或技能,希望对无 ...

  2. 无人车制胜关键:Apollo决策系统全面剖析

    2019年3月26日,AI前线社群邀请到了百度美研资深软件工程师 Yifei Jiang ,带来 <Apollo 决策技术分享(决策系统的设计和无人驾驶的实现)> 的内容分享. 大家好!感 ...

  3. 苹果挖角Waymo无人车系统主管,奇女子一枚,曾把车开上火星

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 终于,苹果无人车又有重要进展. 但不是车相关,而是人加盟. 美媒The Information消息,苹果刚刚从Waymo无人车挖来了负责车 ...

  4. 无人驾驶汽车系统入门(十八)——使用pure pursuit实现无人车轨迹追踪

    无人驾驶汽车系统入门(十八)--使用pure pursuit实现无人车轨迹追踪 对于无人车辆来说,在规划好路径以后(这个路径我们通常称为全局路径),全局路径由一系列路径点构成,这些路径点只要包含空间位 ...

  5. 第一篇综述-无人车系统架构(三)

    第一篇综述-无人车简介(一) 第一篇综述-无人车简介(二) 目录 硬件架构 软件架构 前面简述了无人车的定义及分级.发展历程.社会影响及所面临的技术挑战.本章将讲述无人车的系统架构,包括硬件架构和软件 ...

  6. 基于apm、pix无人坦克、无人车自动控制与自动驾驶教程

    基于apm.pix无人坦克.无人车自动控制与自动驾驶教程 ** 目前玩无人机的玩家较多,但是无人车.无人机坦克的玩家少之又少,本人经过一段时间的琢磨,实现了无人车与无人坦克自动控制,自动驾驶,总控制系 ...

  7. 王炸!Waymo正式官宣无人车出行平台,瑟瑟发抖的不止Uber

    唐旭 发自 凹非寺  量子位 报道 | 公众号 QbitAI 任何一点喘息机会,谷歌都不打算给Uber. 就在上周,Waymo和Uber间的无人车大案以迅雷不及掩耳盗铃之势闪电完结(链接).Uber以 ...

  8. MATLAB Simulink开发ROS无人车与机器人应用 详细教程

    引言:MATLAB在机器人中的应用 现在大多数机器人开发者都会选择ROS,在ROS整个框架下"调包"极其容易.很多ROS开发者热衷于"调包"来实现功能,却难以在 ...

  9. 5G物联网网关智能物流无人车互联互通

    随着5G物联网高速发展,AGV无人物流车.无人配送车.无人售货车等智能产品应运而生,其科技设计.智能化管控.数字化运营大大提升工作效率,降低人工成本,减小劳动强度,5G物联网网关组网下的智能物流无人车 ...

  10. AI一分钟 | 美国国会传唤扎克伯格:来,就5000万用户数据泄露案作证;菜鸟无人车路测视频曝光

    整理 | 明明 出品 | AI 科技大本营(公众号 ID:rgznai100) 一分钟AI 微软推出新一代语音交互技术,可预测人类即将说的内容 创业公司 Affectiva 发布情感AI软件,可用于汽 ...

最新文章

  1. Isight 命令行运行任务
  2. 应用语言学 计算机语言学,应用语言学的名词解释
  3. JBoss EAP6/AS7/WildFly: How to Use Properties Files Outside Your Archive--reference
  4. python代码块注释快捷键_pycharm默认注释与快捷键功能
  5. 【学习Koa】原生koa2 静态资源服务器例子
  6. linux 设备 major 253,redhat5.5测试环境中使用udev配置raw设备
  7. 排序专题之C++中的sort函数调用
  8. mysql yum 升级_CentOS 7中升级MySQL 5.7.23的坑与解决方法
  9. DisplayLink 安装错误
  10. LINUX下载ant源码并编译
  11. 达人评测 i510400f和i511400f区别 i5 11400f和i5 10400f对比
  12. python实现txt合并
  13. 【Codecs系列】HEVC标准(十二):参考帧管理RPS技术
  14. 成长,没你想象的那么迫切!
  15. 这几年我看过的书,力荐书单(含技术和非技术)
  16. js实现点击隐藏图片
  17. 百度网盘限速的2个解决小办法
  18. c++类与对象(多文件编程!)(编写一个有关股票的程序,其中有两个类:一个是深圳类shen_stock,另一个是上海类shang_stock。)
  19. 会计基础(一):记账基础 - 复式记账法
  20. 2020,我用Python写春联

热门文章

  1. cesium 旋转图片
  2. 14 ABSOLUTE评估肿瘤纯度
  3. python报时功能_Python(PyS60)做的简单语音整点报时的实现
  4. SAP APO IPPE 基础数据(汽车行业)
  5. 谷歌搜索引擎API使用
  6. android手机锁屏密码忘记,安卓手机锁屏密码忘了怎么办 解决锁屏密码六种方法介绍...
  7. 认知诊断理论的前世今生
  8. 纳韦斯托克斯方程的推导_一个方程的故事——纳维-斯托克斯方程(Navier-Stokes Equations)...
  9. 汉语词频统计工具java_中文分词词频统计工具_python 结巴_Java开源中文分词类库分类列表...
  10. 向量乘向量的转置的平方_MIT线性代数笔记1.5(转置,置换,向量空间)