百度自动驾驶系统Apollo源码分析

 Apollo(阿波罗)是百度今年发布的汽车自动驾驶系统,它是不是可以无人驾驶?安全性又如何保证?下面我们就来看看自动驾驶指的是什么,以及它是如何实现的.

自动驾驶评级

 先来看看什么是自动驾驶,2014年,SAE International(国际汽车工程师协会)制订了一套自动驾驶汽车分级标准,其对自动化的描述分为5个等级。


自动驾驶评级

 从辅助驾驶到全自动驾驶,都属于自动驾驶,只是级别不同,现在有很多车已经配置了定速巡航,自动泊车,这是从L1走向L2阶段;而L3是说人可以不进行主动驾驶,但需要时刻保持注意力;据说Google的Waymo自动驾驶系统已达到L4水平,它能在特定地理区域和条件下,完成整个动态驾驶任务.大家离L5还都有一段很长的路要走.百度的目标是2019年量产L3的汽车.
 同样是自动,但是程度不同,具体要看:设计运行范围(operational design domain,简称ODD),它包括地理位置、道路类型、速度范围、天气、时间、国家和地方性交通法律法规等等.

硬件

 下面来看看自动驾驶的汽车和普通汽车有什么不同,如图所示,自动驾驶汽车一般都包含:视频系统(摄像头), 传感器(雷达,激光雷达,GPS…), 它们用于建立场景和捕捉前后左右的距离,速度, 判断自已位置,同时车辆内部通过CAN总线监测车辆本身的情况, 并控制速度, 转向, 制动等等.当然还需要软件算法.


硬件

软件

 软件收集硬件传来的视频和传感器数据, 进行数据处理并做出决策.其中包括: 感知当前的状态(车辆, 行人, 交通标志,动态,静态), 预测之后的状态, 以及做下一步的规划(整体线路,当前决策), 这有点像下棋.
 出于安全性的考虑,大多数时候汽车不能上街测试,因此自动驾驶的开发过程中一般都使用虚拟系统,虚拟车辆在虚拟街道上运行的时候,还可以模拟其它车辆,行人,以及各种出错和违规的状态,模拟可能遇到的多种情况,以及车辆间的交互,它创建了增强学习的条件.使算法更快速地成长起来.


模拟环境

安装Apollo系统

 Apollo是个开源的软件系统,可从git上下载源码,下面来看看具体的下载编译方法.

$ git clone https://github.com/ApolloAuto/apollo

下载后,apollo目录下有安装说明README_cn.md,按此说明安装即可

$ cd docker/scripts/
$ ./install_docker.sh 

此时如果报错找不到docker-engine,可用命令$ wget -qO- https://get.docker.com/ | sh手动安装docker,您可以把Docker理解成轻量的虚拟机,虚拟出单独的环境.运行一些特殊的程序,并把它和机器上其它程序隔离开.

$ sudo ./dev_start.sh

此处会下载docker的镜像文件,16G数据下载到/var/lib/docker目录下,建议根分区留足空间,或者将该目录软链接到其它分区,做链接时需要暂时把docker服务停掉 $service docker stop/start

$ sudo ./dev_into.sh

此时就进入了docker,可以编译了

$ bash apollo.sh build

编译时请耐心等待,我的机器速度还可以,编了两个多小时,编译过程中在$HOME/.cache/.bazel中产生大约5G数据.

$ bash scripts/hmi.sh

启动人机交互界面,此时在浏览器中打开http://localhost:8887,即可看到apollo界面了.

用户界面

Apollo源码分析

 源码主要是c++实现的,也有少量python,git下载几百兆,其实代码不太多,主要是地图和数据了大量空间,主要程序在apollo/modules目录中,我们把它分成以下几部分(具体说明见各目录下的modules):

  1. 感知:感知当前位置,速度,障碍物等等
    Apollo/modules/perception
  2. 预测:对场景下一步的变化做出预测
    Apollo/modules/prediction
  3. 规划:
    (1) 全局路径规划:通过起点终点计算行驶路径
    Apollo/modules/routing
    (2) 规划当前轨道:通过感知,预测,路径规划等信息计算轨道
    Apollo/modules/planning
    (3) 规划转换成命令:将轨道转换成控制汽车的命令(加速,制动,转向等)
    Apollo/modules/control
  4. 其它
    (1) 输入输出
    i. Apollo/modules/drivers 设备驱动
    ii. Apollo/modules/localization 位置信息
    iii. Apollo/modules/monitor 监控模块
    iv. Apollo/modules/canbus 与汽车硬件交互
    v. Apollo/modules/map 地图数据
    vi. Apollo/modules/third_party_perception 三方感知器支持
    (2) 交互
    i. Apollo/modules/dreamview 可视化模块
    ii. Apollo/modules/hmi 把汽车当前状态显示给用户
    (3) 工具
    i. Apollo/modules/calibration 标注工具
    ii. Apollo/modules/common 支持其它模块的公共工具
    iii. Apollo/modules/data 数据工具
    iv. Apollo/modules/tools 一些Python工具
    (4) 其它
    i. Apollo/modules/elo 高精度定位系统,无源码,但有文档
    ii. Apollo/modules/e2e 收集传感器数据给PX2,ROS

 自动驾驶系统先通过起点终点规划出整体路径(routing);然后在行驶过程中感知(perception)当前环境(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车.
 我觉得这里面算法技术含量最高的是感知perception和规划planning,具体请见代码.

Apollo开发者支持

 点开Apollo网站的开发者界面 http://apollo.auto/opendata_cn.html 选择"立即进入",即可看到给开发者提供的数据和测试资源. 确实有点超乎我的想像,尤其是仿真平台,有了它,没有车的情况下,也能做很多工作.而且文档也挺全的.(上传测试好像需要上传docker的img,看起来比较大,这个我也没仔细研究,也可能是看错了)

总结

 自动驾驶发展到今天,离不开整体智能领域的发展,比如图像识别,各种高精度的传感器,地图数据,算法的进步都是自动驾驶的基础,并且仍在不断进步.而该领域的技术,之后也会被迁移到其它领域,比如机器人的三维场景定位,行为判断等等.
 目前虽然离完全脱离人类操作还有一段距离,但自动驾驶中的各种技术越来越多地在新型汽车上得到应用,这个领域还是挺值得学习和期待的.

参考

  1. 你怎么看待百度自动驾驶Apollo 1.5版本?
    https://www.zhihu.com/question/65638509/answer/236251671
  2. Apollo自动驾驶框架试玩
    http://www.cnblogs.com/hackcat/archive/2017/07/06/7126042.html
  3. 全网唯一完整译文 | Waymo无人车报告:通往自动驾驶之路
    https://www.leiphone.com/news/201710/JknkYopJ14gVMSyK.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容