Apollo(阿波罗)是百度今年发布的汽车自动驾驶系统,它是不是可以无人驾驶?安全性又如何保证?下面我们就来看看自动驾驶指的是什么,以及它是如何实现的.
先来看看什么是自动驾驶,2014年,SAE International(国际汽车工程师协会)制订了一套自动驾驶汽车分级标准,其对自动化的描述分为5个等级。
从辅助驾驶到全自动驾驶,都属于自动驾驶,只是级别不同,现在有很多车已经配置了定速巡航,自动泊车,这是从L1走向L2阶段;而L3是说人可以不进行主动驾驶,但需要时刻保持注意力;据说Google的Waymo自动驾驶系统已达到L4水平,它能在特定地理区域和条件下,完成整个动态驾驶任务.大家离L5还都有一段很长的路要走.百度的目标是2019年量产L3的汽车.
同样是自动,但是程度不同,具体要看:设计运行范围(operational design domain,简称ODD),它包括地理位置、道路类型、速度范围、天气、时间、国家和地方性交通法律法规等等.
下面来看看自动驾驶的汽车和普通汽车有什么不同,如图所示,自动驾驶汽车一般都包含:视频系统(摄像头), 传感器(雷达,激光雷达,GPS…), 它们用于建立场景和捕捉前后左右的距离,速度, 判断自已位置,同时车辆内部通过CAN总线监测车辆本身的情况, 并控制速度, 转向, 制动等等.当然还需要软件算法.
软件收集硬件传来的视频和传感器数据, 进行数据处理并做出决策.其中包括: 感知当前的状态(车辆, 行人, 交通标志,动态,静态), 预测之后的状态, 以及做下一步的规划(整体线路,当前决策), 这有点像下棋.
出于安全性的考虑,大多数时候汽车不能上街测试,因此自动驾驶的开发过程中一般都使用虚拟系统,虚拟车辆在虚拟街道上运行的时候,还可以模拟其它车辆,行人,以及各种出错和违规的状态,模拟可能遇到的多种情况,以及车辆间的交互,它创建了增强学习的条件.使算法更快速地成长起来.
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界面了.
源码主要是c++实现的,也有少量python,git下载几百兆,其实代码不太多,主要是地图和数据了大量空间,主要程序在apollo/modules目录中,我们把它分成以下几部分(具体说明见各目录下的modules):
自动驾驶系统先通过起点终点规划出整体路径(routing);然后在行驶过程中感知(perception)当前环境(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车.
我觉得这里面算法技术含量最高的是感知perception和规划planning,具体请见代码.
点开Apollo网站的开发者界面 http://apollo.auto/opendata_cn.html 选择"立即进入",即可看到给开发者提供的数据和测试资源. 确实有点超乎我的想像,尤其是仿真平台,有了它,没有车的情况下,也能做很多工作.而且文档也挺全的.(上传测试好像需要上传docker的img,看起来比较大,这个我也没仔细研究,也可能是看错了)
自动驾驶发展到今天,离不开整体智能领域的发展,比如图像识别,各种高精度的传感器,地图数据,算法的进步都是自动驾驶的基础,并且仍在不断进步.而该领域的技术,之后也会被迁移到其它领域,比如机器人的三维场景定位,行为判断等等.
目前虽然离完全脱离人类操作还有一段距离,但自动驾驶中的各种技术越来越多地在新型汽车上得到应用,这个领域还是挺值得学习和期待的.
技术文章定时推送
请关注公众号:算法学习分享