百度Apollo学习笔记(更新中)
Apollo学习笔记
近期学习百度Apollo,特在此博客作学习笔记来总结相关知识。
因为只关注apollo中定位和激光雷达3d感知部分,⼤致的学习思路是,⾸先阅读apollo源码中的帮助⽂档,学习Cyber RT相关知识以及apollo的3d障碍物感知,定位部分。接着查看部分源码。
⼀、⾸先介绍百度开源代码中⽂件结构内容
相信⼤家同我⼀样,刚开始碰到apollo完全是⼀筹莫展,所以⼗分有必要梳理整个源码的结构内容。
1.Apollo总的索引⽂档
⽬录:apollo/docs/README.md
其中quick start guide⾥⾯主要讲的是如何安装apollo等教程。
2.帮助⽂档,⽬录:apollo/docs
2.1 Quick Start Guide
A hardware and software guide to setting up Apollo, segregated by versions
quidkstart⽂件夹主要介绍如何安装apollo。
2.2 Technical Tutorial
Everything you need to know about Apollo. Written as individual versions with links to every document related to that version.
该⽂件是Apollo5.0教程,推荐按照这个⽬录进⾏索引学习。⽬录:docs/apollo_5.0_technical_tutorial.md
2.3 Cyber
该⽂件夹下主要存放关于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 c omputing 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 ind ustry 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 addr esses that requirements of autonomous driving solutions.
: 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。
: Everything you need to know about how to start developing your first application module on top of Apollo Cyber RT.⽂档:CyberRT_Quick_Start.md,介绍如何简单的开发⼀个组件。
: Detailed guidance on how to use the developer tools from Apollo Cyber RT.⽂档:CyberRT_Developer_Tools.md,介绍了三种关于cyber的开发⼯具。
: 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的详细运⽤。
: Answers to the most frequently asked questions about Apollo Cyber RT.⽂档:CyberRT_FAQs.md,⼀些常见问题。
: Commonly used terminologies in Cyber RT documentation and code.⽂档:CyberRT_Terms.md,⼀些专有名词的解释。
还有other⽂件,可以⾃⾏去查看。
关于Cyber RT的具体知识,请转到
2.4 Specs
A Deep dive into Apollo’s Hardware and Software specifications (only recommended for expert level developers that
have successfully installed and launched Apollo)
⽂件夹下存放Apollo软硬件的详细说明,包含⼀些算法详细说明。
2.5 Howto Guides
Brief technical solutions to common problems that developers face during the installation and use of the Apollo platform
howto⽂件夹下主要存放⼀些特定问题的解决⽅法。可以查看README.md进⾏索引查。
2.6 demo_guide 运⾏线下演⽰
如果你没有车辆及车载硬件, Apollo还提供了⼀个计算机模拟环境,可⽤于演⽰和代码调试。
线下演⽰⾸先要Fork并且Clone Apollo在GitHub的代码,然后需要设置docker的release环境,请参照 ⽂档中的章节。
Apollo演⽰的安装步骤:
1. 运⾏如下命令启动docker的release环境:
bash docker/scripts/dev_start.sh
2. 运⾏如下命令进⼊docker的release环境:
bash docker/scripts/dev_into.sh
3. 在Docker中编译Apollo:
bash apollo.sh build
Note: 如果没有GPU,请使⽤下⾯的命令
bash apollo.sh build_cpu
4. 启动DreamView
bash scripts/bootstrap.sh
5. 下载demo record:
cd docs/demo_guide/
python rosbag_helper.py demo_d
6. 运⾏如下命令回放record:
cyber_recorder play -f docs/demo_guide/demo_d --loop
选项 --loop ⽤于设置循环回放模式.
7. 打开Chrome浏览器,在地址栏输⼊localhost:8888即可访问Apollo Dreamview
现在你能看到有⼀辆汽车在模拟器⾥移动!
接下总结⼀些关于Apollo运⾏的教程,帮助快速⼊门
⼆、Apollo快速⼊门及仿真环境搭建教程
1.Docker
Docker是⼀种容器的技术,它在是Linux内核的基础上做了⼀些轻量级和隔离机制的优化,让环境更⼩,部署起来更快。利⽤Docker可以使整个⼯程的安装更加简单。Docker镜像通常是⼀个配置好的运⾏环境,包括依赖的第三⽅库等,使得⽤户不需要对环境编译做过多复杂的操作。例如,在Release版本中,Apollo各个模块是⼀个已经编译好的⼆进制⽂件,可以直接运⾏;如果是开发版本,通常已经加载了所需的第三⽅库,⽤户只需要执⾏对应的编译指令。
2.硬件接⼊
⼀个很重要的问题,如何将不同于参考硬件的传感器继承到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数据包的过程。
3.编译
编译安装Apollo的步骤⼤概分为三个阶段,如图6所⽰:第⼀阶段是在Ubuntu环境下进⾏操作,包括下载Apollo源码,安装Docker。Docker的安装⽅式有在线和离线两种⽅式,⼤家可以根据⽹络环境选取合适的安装⽅式。第⼆阶段是进⼊Docker,拉取Apollo镜像,并以此镜像创建容器。第三个阶段是进⼊创建的容器,编译Apollo源码。
编译结束之后可以做RTK循迹测试。循迹⽐较简单,它包含两个⽂件,核⼼就是⼀个Record,⽤来录
制轨迹的信息,也就是⼀些GPS点;另外记录车辆底盘返回的速度信息、加速度信息、曲率、朝向等。RTK循迹测试就是把车辆底盘发出的这些主题和定位输出进⾏融合。
汽车三、Apollo传感器标定指南
四、Apollo 3.5各功能模块启动过程解析
在apollo3.5及之后的版本,apollo由ros改为cyber rt框架作为底层通讯与调度平台,此为前提。
Apollo Cyber RT 框架核⼼理念是基于的组件,组件有预先设定的输⼊输出。
在运⾏时刻,框架把融合好的传感器数据和预定义的组件打包在⼀起形成⽤户级轻量任务,之后,框架的调度器可以根据资源可⽤性和任务优先级来派发这些任务。
具体的内容在该中可以查阅。
还有许多未写,时间紧迫,未完待续。。。
本⽂主要参考: