0%
Apollo自动驾驶架构介绍

- 底层车辆平台执行Apollo无人驾驶平台生成的车辆控制指令。为了能够运行Apollo生成的指令,车辆必须是线控的,例如可以接受一定的指令,比如换挡、加减速、转向,完成对应的操作。
- 在Apollo 3.0之前,我们称之为车辆参考平台,即推荐的可运行Apollo的几种车。在3.0之后,我们发布了Apollo对车辆条件的需求,比如需要哪些线控功能,对应的操作耗时是多少等。只要把车改装成具备对应条件之后就可以运行Apollo,现在称为开放车辆认证平台。
- 传感器层主要是集成各种传感器对汽车周围环境进行感知,包括GPS、IMU、相机、激光雷达、毫米波雷达、超声波雷达等。无人驾驶系统对算力的要求非常高,所以在Apollo上安装了一台高性能工控机(IPC)机。
- Blackbox是百度开放的一个商业化硬件,它记录一些内部数据,例如关键时刻的执行操作,类似于飞机上的黑匣子
- 核心软件层又可以细分为三层:
- 最下面的是RTOS实时操作系统,在Apollo中,我们使用打补丁的方式来实现实时的效果。
- 中间层是Runtime Framework。这一层,我们用的是ROS,主要是为上层的模块提供数据层支持。
- 最上面一层是Apollo各个功能模块实现部分,包括地图引擎、定位、感知、规划、监管、控制、端到端以及HMI。
- 云服务层提供了高精地图服务、模拟仿真、Data Platform、安全和更新、DuerOS等。
- 在中国,个人并不具备制定高精地图的资质和能力,因为政府要求这些数据不能在网络上传播。因此,Apollo直接将制作好的高精地图以云服务的方式对外开放。
Apollo平台的快速入门
- Docker
- Docker是一种容器的技术,它在是Linux内核的基础上做了一些轻量级和隔离机制的优化,让环境更小,部署起来更快。利用Docker可以使整个工程的安装更加简单。
- Docker镜像通常是一个配置好的运行环境,包括依赖的第三方库等,使得用户不需要对环境编译做过多复杂的操作。
- 例如,在Release版本中,Apollo各个模块是一个已经编译好的二进制文件,可以直接运行;如果是开发版本,通常已经加载了所需的第三方库,用户只需要执行对应的编译指令。
- 硬件接入
- 要完成自己硬件的集成,需要遵循以下三步:
- 第一需要原始的 UDP(User Data Packet,用户数据包)。
- 第二是做一个ROS Driver方法,把驱动编译到Apollo里面。
- 第三是把数据发布出来。下面举两个例子讲述具体如何操作。
- 第一个例子:如何使用一个新型号的Camera
- 最下层是相机硬件;
- 往上一层是一个标准的底层驱动,即Video for Linux driver;
- 再上一层是一个ROS Driver,最上层是Apollo可以接收到的内容。
- 第二个例子:激光雷达
- 硬件通常以基于内核Socket的方式把数据传输给PC,PC端做一些数据处理之后发布对应的消息类型。
- 对于激光雷达来而言,发布的是Pointcloud消息类型,该消息将被最上层的Apollo感知模块接收。
- 编译
- 编译安装Apollo的步骤大概分为三个阶段:
- 第一阶段是在Ubuntu环境下进行操作,包括下载Apollo源码,安装Docker。Docker的安装方式有在线和离线两种方式,大家可以根据网络环境选取合适的安装方式。
- 第二阶段是进入Docker,拉取Apollo镜像,并以此镜像创建容器。
- 第三个阶段是进入创建的容器,编译Apollo源码。
- 测试:
- 编译结束之后可以做RTK循迹测试:
- 循迹比较简单,它包含两个文件,核心就是一个Record,用来录制轨迹的信息,也就是一些GPS点;
- 另外记录车辆底盘返回的速度信息、加速度信息、曲率、朝向等。
- RTK循迹测试就是把车辆底盘发出的这些主题和定位输出进行融合。
- 工具链
Relative_map_viewer
是一个对实时相对地图的查询工具,可以根据Rosbag包绘制出实时相对地图。
- DBC转换工具解析车辆DBC文件,生成对应的Protobuf。
- Teleop工具可以通过键盘控制的方式实现车辆的信号发布。
- 主题监控工具可以同时需要监听多个ROS topic。
- Configuration工具明确标识出来修改了哪些字段。
- 交通灯模拟工具可以通过脚本的方式控制地图里面的红绿灯变化情况,对车辆进行测试
- 模拟和Dreamview:该模块是整个Apollo项目可视化的一个模块,基于该模块,开发者可以在没有车和传感器的情况下使用Apollo各个软件模块
参考资料