百度Apollo系统学习-初章

百度Apollo学习-初章

  • 前言
  • Apollo版本
    • Apollo 1.0
    • Apollo 1.5
    • Apollo 2.0
    • Apollo 2.5
    • Apollo 3.0
    • Apollo 3.5
    • Apollo 5.0
  • Apollo 软硬件架构
    • Hardware/ Vehicle Overview
    • Hardware Connection Overview
    • Software Overview - Navigation Mode
  • 预备知识
    • 理解
    • 掌握
  • Apollo主要代码结构
  • 后续
  • 参考链接

前言

对新手来说要啃下一个大公司的顶级项目是很吃力的,特别是在没有前辈带着的情况下。所以我希望这个系列教程可以帮助更多的开发者理清百度的Apollo系统,文章会比较偏技术向(软件),所以很多套话和简介之类的教程中就不再提及了,而且因为本身能力精力有限所以有错误希望大家积极指出。这些文章会尽量跟着Apollo的版本不断更新并尽可能地保持简洁,有些不太适合用中文表达的会直接用英文方便大家对照。如有引用或借鉴请注明出处,谢谢!

Apollo版本

百度Apollo系统学习-初章_第1张图片
此图为百度官方给出的版本图,此时处于2019.7这个版本。下面会列出所有的版本,笔者建议主要关注1.0(初始版)、3.0(老架构终极版)、3.5(新架构初始版),其他版本主要都是一些功能的完善。

Apollo 1.0

初版的Apollo,只能在封闭场景(测试车道,停车场)中完成Automatic GPS Waypoint Following等简单任务,现在这个版本可以用来测试Apollo和车的兼容性。
主要硬件:工业电脑(IPC),GPS,IMU,控域网(CAN)卡
软件:基于Linux 4.4.32内核的Apollo Linux内核
百度Apollo系统学习-初章_第2张图片

Apollo 1.5

这一版加入了LiDAR,下图黄色处为更新或新加的模块。有了LiDAR感知能力得到了增强,所以在完成fixed lane cruising等任务时更加可靠了。
新增的硬件:LiDAR,GTX1080 GPU
软件:GPU驱动

Apollo 2.0

这个版本做了很多常用的自动驾驶任务。车可以在简单的城市道路上运行了,并且可以完成避障,识别交通信号灯,变道等任务。
新增硬件:摄像头(主要用于识别信号灯),Radar
百度Apollo系统学习-初章_第3张图片

Apollo 2.5

这个版本主要是2.0的优化,车可以在有防护的高速公路上运行了。
新增硬件:多了一个摄像头。
百度Apollo系统学习-初章_第4张图片

Apollo 3.0

2.5和3.0版本主要都是上层功能算法的优化完善,3.0算是原版Apollo的终极形态,它提供了一些应用场景(在Apollo官网上挂着的案例就是):Minibus,Valet Parking等,并且做出了一些集成的硬件平台产品。
新增硬件:超声波传感器,Apollo传感器Unit,Apollo硬件开发平台
软件:守护程序,监视器,新的硬件平台驱动
百度Apollo系统学习-初章_第5张图片

Apollo 3.5

需要重点关注的版本,Apollo发布了自己的Runtime Framework:Cyber RT,整体的软件组织更加有序和清晰。这个版本车已经可以在更加复杂的住宅和小镇区域行驶了,换上了360度全方位感知系统后感知能力大大增加。至此,Apollo系统算是进入了新的发展阶段,已经具备了基本的软件架构雏形以及硬件方案。
新增硬件:更高档的各式传感器,Apollo Extension Unit (AXU)
软件:基于新传感系统更新了算法,Cyber RT
百度Apollo系统学习-初章_第6张图片

Apollo 5.0

主要是软件方面的更新,可以看到3.5版本基本就是硬件定型版本,5.0主要是针对数据层面定义了内部的数据格式和通信方式,并且也提供了很多前期积累的驾驶数据与模拟器数据。
软件:Data Pipeline, Apollo Synthetic Data Set, 算法更新

Apollo 软硬件架构

Hardware/ Vehicle Overview

百度Apollo系统学习-初章_第7张图片

Hardware Connection Overview

百度Apollo系统学习-初章_第8张图片

Software Overview - Navigation Mode

百度Apollo系统学习-初章_第9张图片

预备知识

这里列举一些学习Apollo系统的预备知识,随着Apollo的更新,这些也会有所变化。这些知识分为2类,一类是只需要理解概念和理念,另一类需要开发者会使用。这里针对的是普通开发者,读者需要根据实际情况学习自己所需的知识。

理解

  1. ROS:Cyber RT中很多设计都借鉴了ROS
  2. 传感器基础知识,比如LiDAR、Radar、IMU都是什么:理解上层算法的基础
  3. 常见的自动驾驶算法(非算法开发者),比如计算机视觉、高清地图构建、PID控制等:理解系统是如何决策和运作的

掌握

  1. C++:需要比较高阶的知识,比如知道C++11的特性,会使用高级的数据结构,能理解面向对象编程,熟悉并发编程
  2. VSCode:官方钦定的调试工具
  3. Dreamland, Dreamview:官方模拟器环境工具
  4. Bazel:Apollo使用的编译工具
  5. Google Protocol Buffer:Apollo使用的“通信协议”
  6. Docker:Apollo系统运行在容器环境
  7. Ubuntu:基础的Linux使用

Apollo主要代码结构

  • cyber 消息中间件,相当于ROS作用
  • docker 容器环境搭建的脚本等
  • modules 不同的功能模块
    • canbus 通讯总线
    • common 日志,数学库等辅助代码
    • drivers 雷达摄像头等的驱动
    • tools 工具
    • v2x 车和其他实体的交互
    • data 数据
    • control 控制模块
    • transform 原型为ros/tf2库,用来坐标转换
    • guardian 守护程序
    • 其余模块主要都是自动驾驶会用到的功能
  • scripts 脚本
  • third_party 第三方库

后续

初章主要是搬运和总结百度官方的介绍,之后会逐渐深入理解Apollo的代码结构。系列文章不会关注具体的算法实现或优化,主要是带读者理解整体运行流程和架构。
注:本着开源精神,本专栏的文章都能自由查阅,但不定时有些新的文章会被设置成vip可见,别慌,那些文章因为还没完全写好或者突然发现有一些错误所以暂时隐藏,后续完全改好以后就会正常发出,当然心急的同学可以先睹为快

参考链接

大部分内容可以在官方github找到。

  1. 百度Apollo项目技术文档
  2. Apollo Github项目地址
  3. 使用Docker Build
  4. 装载运行
  5. 代码结构

你可能感兴趣的:(百度Apollo学习)