土豆泥老师 (知乎:@土豆泥): 上海交通大学在读博士.
引言Apollo是一个完整的自动驾驶系统,其中包括许多模块和不少依赖。为了降低安装难度,Apollo提供了一系列镜像以及工具。同时,Apollo还提供了两种安装方式,分别是源码和包管理安装。
相比于源码安装方式,包管理优化了下载安装中出现的下载量大、无法按需使用、编译时间过长等问题,规范了组件依赖关系以及组件粒度,提升了自动驾驶开发效率。从实际安装的角度来说,包管理也更方便,免除了源码编译系统容易卡死的问题。
因此,本文将利用包管理的方式对Apollo系统进行安装。同时,介绍包管理下的源码下载和编译的方法,并利用vscode对源码进行查看和编辑,再通过dreamview仿真来验证源码修改的效果。最后,还将简单介绍vscode进行代码单步调试的方法。
如果想利用源码安装,可以详见:Apollo9.0 安装指南。这篇文章也基本参考指南中的内容,顺便还有一些自己的经验。
另外,在进行安装前,保证自己的电脑满足以下配置:
CPU | 四核以上 |
---|---|
内存 | 16G以上 |
GPU(如果运行感知模块) | GTX1060以上 |
一、安装基础软件
1. 安装Ubuntu系统
Apollo需要运行在Ubuntu 18.04及以上的系统上。安装Ubuntu 18.04+的步骤,参见Ubuntu系统安装指南
完成安装后保持联网状态更新相关软件,在终端中运行以下代码(按Ctrl+Alt+T弹出终端):
sudo apt-get update
sudo apt-get upgrade
推荐大家安装为双系统,因为Apollo运行配置要求16G内存。如果安装为虚拟机的话,性能可能无法满足要求。另外,如果Apollo安装过程中出现了问题,需要重装系统,在双系统的模式下可以参考
Windows和Linux(Ubuntu)双系统下,完全删除Ubuntu系统
2. 安装Docker
Docker是一种容器化技术,用于创建和使用容器。容器可以被视作一个轻量级的虚拟机,有着虚拟机的效果,但是性能损耗远低于虚拟机。
Apollo依赖于Docker 19.03+。可以根据官方文档对Docker引擎进行安装:Docker安装指南
Apollo也提供了安装脚本,推荐按此脚本可以直接进行安装:
wget http://apollo-pkg-beta.bj.bcebos.com/docker_install.sh
bash docker_install.sh
这个过程可能会运行多次脚本,根据脚本提示执行即可。一般来说3-4次就能安装成功,成功之前会提示你再次执行脚本,就再输入bash docker_install.sh。
二、获取GPU支持(如不运行感知,可先跳过)
Apollo的某些模块需要GPU的支持才能够编译、运行(例如感知模块),如果您需要使用此类模块,需要安装Nvidia显卡驱动以及Nvidia container toolkit以获取GPU支持。
“注意:本教程只适用于ubuntu系统,虚拟机无法安装显卡驱动,WSL请自行上网搜索。另外,如果之前已经安装过Nvidia显卡驱动,即往终端输入nvidia-smi能够正常输出,可以跳过 安装显卡驱动 小节
1. 安装显卡驱动
可参照官网方法安装驱动 Linux AMD64 Display Driver Archive | NVIDIA
由于nvidia的硬件更新的很快,因此会遇到显卡驱动和CUDA版本不兼容的情况,以下为测试过的畅通链路:
显卡系列 | 测试显卡 | 驱动版本 | 最低支持驱动版本 | cuda版本 |
---|---|---|---|---|
GeForce 10 Series | GeForce GTX 1080 | nvidia-driver-470.160.03 | nvidia-driver-391.35 | CUDA Version :11.4 |
GeForce RTX 20 Series | GeForce RTX 2070 SUPER | nvidia-driver-470.63.01 | nvidia-driver-456.38 | CUDA Version :11.4 |
GeForce RTX 30 Series | GeForce RTX 3090 | nvidia-driver-515.86.01 | nvidia-driver-460.89 | CUDA Version :11.6 |
GeForce RTX 30 Series | GeForce RTX 3060 | nvidia-driver-470.63.01 | nvidia-driver-460.89 | CUDA Version :11.4 |
Tesla V-Series | Tesla V100 | nvidia-driver-418.67 | nvidia-driver-410.129 | CUDA Version :10.1 |
AMD | MI100 dGPU | ROCm™ 3.10 driver |
10、20、30系列显卡推荐使用470.63.01版本的驱动 ,您可以通过Nvidia官网来 下载驱动
40系列显卡推荐驱动版本>=520.61.05,提供525.105.17版本驱动下载链接: https://www.nvidia.cn/geforce/drivers/results/202351/
下载之后,找到相应的文件夹打开终端输入安装指令:
sudo chmod 777 NVIDIA-Linux-x86_64-470.63.01.run
sudo ./NVIDIA-Linux-x86_64-470.63.01.run
安装完毕后,您可以通过nvidia-smi指令来检查驱动是否安装成功,如果一切正常,您可以看到类似以下的提示:
Tue Jan 3 12:04:21 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.91.03 Driver Version: 470.63.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce GTX 1080 Off | 00000000:01:00.0 Off | N/A |
| 0% 38C P8 7W / 198W | 239MiB / 8118MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 2566 G /usr/lib/xorg/Xorg 18MiB |
| 0 N/A N/A 2657 G /usr/bin/gnome-shell 67MiB |
| 0 N/A N/A 6104 G /usr/lib/xorg/Xorg 132MiB |
| 0 N/A N/A 6234 G /usr/bin/gnome-shell 13MiB |
| 0 N/A N/A 7440 G gnome-control-center 1MiB |
+-----------------------------------------------------------------------------+
2. 安装 Nvidia container toolkit
为了在容器内获得 GPU 支持,在安装完 docker 后需要安装 NVIDIA Container Toolkit。 运行以下指令安装 NVIDIA Container Toolkit:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get -y update
sudo apt-get install -y nvidia-docker2
安装完毕后,需要手动重启下docker:
sudo systemctl restart docker
三、安装Apollo环境管理工具
Apollo 环境管理工具是一个帮忙管理和启动 Apollo 环境容器的命令行工具。
1. 安装依赖软件
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
2. 在宿主机添加 Apollo 软件源的 gpg key,并设置好源和更新
# 添加 gpg key
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://apollo-pkg-beta.cdn.bcebos.com/neo/beta/key/deb.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/apolloauto.gpg
sudo chmod a+r /etc/apt/keyrings/apolloauto.gpg
# 设置源并更新
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/apolloauto.gpg] https://apollo-pkg-beta.cdn.bcebos.com/apollo/core"\
$(. /etc/os-release && echo "$VERSION_CODENAME") "main" | \
sudo tee /etc/apt/sources.list.d/apolloauto.list
sudo apt-get update
“注:如果之前已经安装过8.0版本的apollo的话,在宿主机上的/etc/apt/sources.list文件中会有形如debhttps://apollo-pkg-beta.cdn.bcebos.com/neo/betabionic main的配置,可以直接删除,宿主机上的apollo源配置仅用于安 装aem工具
3. 安装aem工具
sudo apt install apollo-neo-env-manager-dev --reinstall
安装成功后即可使用下列代码查看aem使用说明
aem -h
四、安装Apollo工程
1. 选择示例工程并下载
Apollo 目前提供了3个示例工程,您可以根据需要选择其一
application-core , 包含 Apollo 所有开源软件包,可以基于此工程搭建自己的应用,推荐安装
application-pnc , 仅包含规划控制相关的软件包,适合仅关注规划控制方向的用户
application-perception , 仅包含感知相关的软件包,适合仅关注感知方向的用户
以 x86 架构的 application-core 为例
git clone https://github.com/ApolloAuto/application-core.git application-core
2. 启动并进入Apollo环境容器
# 创建并进入工程目录
mkdir application-core
cd application-core
# 环境设置:识别主机系统是x86_64还是aarch64, 并修改对应的.env和.workspace.json配置
bash setup.sh
# 启动容器
aem start
# 进入容器
aem enter
当进入容器后,可以看见in-dev-docker字样。
3. 安装软件包
示例工程中包含一个名为 core 目录,其中 core/cyberfile.xml 文件中描述了工程所依赖软件包,可以通过 buildtool 工具进行依赖包的安装
buildtool build -p core
“此操作真正含义是编译工程中 core 这个包,但 core 本身并没有需要编译的代码,所以此操作仅会安装 core/cyberfile.xml 中声明的依赖包。 这一步需要较长的时间,如果失败,检查是否正确进入容器,还有软件包是否正常下载。
4. 选择车型配置
示例工程中profiles/sample目录是官方提供的基于一个雷达两个摄像头的车型配置,您可以参考profiles目录下的sample编写自己的车型配置,生效车型配置的方法如下
# 以sample为例
aem profile use sample
5. 播放数据包
获取数据包
wget https://apollo-system.cdn.bcebos.com/dataset/6.0_edu/demo_3.5.record -P $HOME/.apollo/resources/records/
获取数据包对应的地图
buildtool map get sunnyvale
“从9.0.0-rc-r10版本开始,地图数据已经被分离出来,需要单独下载,不再随地图包发布;通过buildtool map list可以查看所有可用的地图
启动 Dreamview+,可能需要多次执行才能启动成功
aem bootstrap start --plus
在Dreamview中播放数据包
启动 Dreamview+ 之后,在浏览器输入localhost:8888进入 Dreamview+ 界面,您可以选择默认模式,也可以选择其他模式播放数据包。本小节以默认模式为例。
在Mode Settings/模式设置页面,设置播包参数。
在 Operations/操作 中选择 Record 。 在 Environment Resources/环境资源 中,单击 Records/数据包 ,并选择demo 3.5。 在 Environment Resources/环境资源 中,单击 HDMap/高精地图 ,并选择 Sunnyvale。
单击底部按钮区域,可以在 Vehicle Visualization/车辆可视化 中看到数据包播放的画面。
五、删除工程(可选)
此步说明如何删除已安装的工程
# 先进入工程目录
cd application-core
# 删除容器
aem remove
# 回到上一级目录
cd ..
# 删除工程目录
rm -r application-core
小结(要点总结)
如果你顺利进行到这一步,并且在Dreamview中看到播放的画面,恭喜你已经在你的电脑上成功安装了Apollo系统。与源码安装不同,包管理安装在根目录下并不能看到源码,这与我们的熟悉的开发方式或许有些不同。后续我们将简单介绍包管理的开发方式,并且在dreamview上重复我们在云实验室中进行的几个实验。
如果你并没有顺利安装成功,我这里总结了几个安装要点:
一定要严格按照最新版本的安装手册进行安装。目前最新版本是9.0,当进入官网还能搜到6.0和8.0版本的,如果不小心依照之前的手册安装,可能会出现各种各样的bug。如果实在无法解决,可以参照一、1重装系统。如果你安装的时候已经出到更新的版本,依照最新版本手册进行安装。 Apollo的代码量真的很大,源码下载下来有20多G。整个源码编译很吃电脑性能,所以如果你用源码安装方式又经常编译死机,还是推荐包管理安装。 打开dreamview,发现环境资源里,地图和车辆没有文中的多,这是正常现象。Apollo提供了一些工具下载对地图和车辆进行下载,也可以编辑自己的地图和车辆。
推荐阅读:
🏎️自动驾驶小白说官网:https://www.helloxiaobai.cn