相信大家同我一样,刚开始碰到apollo完全是一筹莫展,所以十分有必要梳理整个源码的结构内容。
目录:apollo/docs/README.md
其中quick start guide里面主要讲的是如何安装apollo等教程。
该文件夹下主要存放关于Cyber RT计算框架的相关知识文档。关于Cyber RT的总索引文档目录为:apollo/cyber/README.md
Cyber RT:
Apollo Cyber RT是百度自研得无人车计算任务实时并行计算框架,框架核心理念基于组件,通过组件实现有预先设定的“输入”、“输出”。实际上,在框架中,每个组件代表一个专用的算法模块。可以暂且理解为百度研发的升级版ROS。
Apollo Cyber RT is an open source, high performance runtime framework designed specifically for autonomous driving scenarios. Based on a centralized computing model, it is greatly optimized for high concurrency, low latency, and high throughput in autonomous driving.
During the last few years of the development of autonomous driving technologies, we have learned a lot from our previous experience with Apollo. The industry is evolving and so is Apollo. Going forward, Apollo has already moved from development to productization, with volume deployments in the real world, we see the demands for the highest level of robustness and performance. That’s why we spent years building and perfecting Apollo Cyber RT, which addresses that requirements of autonomous driving solutions.
How to Develop Cyber RT inside Docker Environment on Both x86 and ARM Platform: Official docker image for Cyber RT development, which is easiest way to build and play with Cyber RT. On top of that, we officially support development of Cyber RT on both x86 and ARM platform.文档:CyberRT_Docker.md,介绍如何在Docker环境下build cyber。
Apollo Cyber RT Quick Start: Everything you need to know about how to start developing your first application module on top of Apollo Cyber RT.文档:CyberRT_Quick_Start.md,介绍如何简单的开发一个组件。
Apollo Cyber RT Developer Tools: Detailed guidance on how to use the developer tools from Apollo Cyber RT.文档:CyberRT_Developer_Tools.md,介绍了三种关于cyber的开发工具。
Apollo Cyber RT API for Developers: A comprehensive guide to explore all the APIs of Apollo Cyber RT, with many concrete examples in source code.文档:CyberRT_API_for_Developers.md,关于cyber的详细运用。
Apollo Cyber RT FAQs: Answers to the most frequently asked questions about Apollo Cyber RT.文档:CyberRT_FAQs.md,一些常见问题。
Apollo Cyber RT Terms: Commonly used terminologies in Cyber RT documentation and code.文档:CyberRT_Terms.md,一些专有名词的解释。
还有other文件,可以自行去查看。
关于Cyber RT的具体知识,请转到Cyber RT
如果你没有车辆及车载硬件, Apollo还提供了一个计算机模拟环境,可用于演示和代码调试。
线下演示首先要Fork并且Clone Apollo在GitHub的代码,然后需要设置docker的release环境,请参照 how_to_build_and_release文档中的Install docker章节。
Apollo演示的安装步骤:
运行如下命令启动docker的release环境:
bash docker/scripts/dev_start.sh
运行如下命令进入docker的release环境:
bash docker/scripts/dev_into.sh
在Docker中编译Apollo:
bash apollo.sh build
Note:
如果没有GPU,请使用下面的命令
bash apollo.sh build_cpu
启动DreamView
bash scripts/bootstrap.sh
下载demo record:
cd docs/demo_guide/
python rosbag_helper.py demo_3.5.record
运行如下命令回放record:
cyber_recorder play -f docs/demo_guide/demo_3.5.record --loop
选项 --loop
用于设置循环回放模式.
打开Chrome浏览器,在地址栏输入localhost:8888即可访问Apollo Dreamview
现在你能看到有一辆汽车在模拟器里移动!
Apollo快速入门
Docker是一种容器的技术,它在是Linux内核的基础上做了一些轻量级和隔离机制的优化,让环境更小,部署起来更快。利用Docker可以使整个工程的安装更加简单。Docker镜像通常是一个配置好的运行环境,包括依赖的第三方库等,使得用户不需要对环境编译做过多复杂的操作。例如,在Release版本中,Apollo各个模块是一个已经编译好的二进制文件,可以直接运行;如果是开发版本,通常已经加载了所需的第三方库,用户只需要执行对应的编译指令。
要完成自己硬件的集成,需要遵循以下三步,如图所示:第一需要原始的 UDP(User Data Packet,用户数据包)。第二是做一个ROS Driver方法,把驱动编译到Apollo里面。第三是把数据发布出来。下面举两个例子讲述具体如何操作。
第一个例子是如何使用一个新型号的Camera,假设是USB接口的相机。如图4所示,最下层是相机硬件;往上一层是一个标准的底层驱动,即Video for Linux driver; 再上一层是一个ROS Driver,最上层是Apollo可以接收到的内容。要使用该相机,主要的工作是底层硬件的解析,使得Apollo可以接收到相应的数据。
第二个例子是激光雷达。它大致的工作流程是:硬件通常以基于内核Socket的方式把数据传输给PC,PC端做一些数据处理之后发布对应的消息类型。对于激光雷达来而言,发布的是Pointcloud消息类型,该消息将被最上层的Apollo感知模块接收如图5所示。右图给出了ROS Driver如何解析UDP数据包的过程。
编译安装Apollo的步骤大概分为三个阶段,如图6所示:第一阶段是在Ubuntu环境下进行操作,包括下载Apollo源码,安装Docker。Docker的安装方式有在线和离线两种方式,大家可以根据网络环境选取合适的安装方式。第二阶段是进入Docker,拉取Apollo镜像,并以此镜像创建容器。第三个阶段是进入创建的容器,编译Apollo源码。
编译结束之后可以做RTK循迹测试。循迹比较简单,它包含两个文件,核心就是一个Record,用来录制轨迹的信息,也就是一些GPS点;另外记录车辆底盘返回的速度信息、加速度信息、曲率、朝向等。RTK循迹测试就是把车辆底盘发出的这些主题和定位输出进行融合。
Apollo平台简单操作指南
Apollo仿真环境搭建教程
Link
Apollo激光雷达-IMU标定
在apollo3.5及之后的版本,apollo由ros改为cyber rt框架作为底层通讯与调度平台,此为前提。
Apollo Cyber RT 框架核心理念是基于的组件,组件有预先设定的输入输出。
在运行时刻,框架把融合好的传感器数据和预定义的组件打包在一起形成用户级轻量任务,之后,框架的调度器可以根据资源可用性和任务优先级来派发这些任务。
具体的内容在该博客中可以查阅。
Apollo感知模块
还有许多未写,时间紧迫,未完待续。。。
本文主要参考:
百度开源代码
Apollo开发者社区