本文介绍如何搭建 Baidu Apollo 的开发环境。
简介 Apollo 是一个高性能、灵活的架构,可加速自动驾驶汽车的开发、测试和部署。
本文撰写于 2025 年 7 月 7 日,基于 Apollo 10.0 版本。
环境 我使用的系统环境:
Intel(R) Core(TM) i9-14900K
NVIDIA GeForce RTX 2080 Ti
Ubuntu 22.04.5 LTS
请自行安装 Docker Engine 和 GPU 支持,可参考 Docker 官方文档 和 Apollo安装指南 。
包管理安装方式 安装 Apollo 环境管理工具 Apollo 环境管理工具是一个帮忙管理和启动 Apollo 环境的命令行工具。
1. 安装依赖软件 1 2 sudo apt-get update sudo apt-get install ca-certificates curl gnupg
2. 在宿主机添加 Apollo 软件源的 gpg key,并设置好源和更新 1 2 3 4 5 6 7 8 9 10 11 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.gpgecho \ "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
3. 安装 aem 1 sudo apt install apollo-neo-env-manager-dev --reinstall
安装成功后即可使用
安装示例工程 1. 选择示例工程 Apollo 目前提供了3个示例工程,您可以根据需要选择其一
另外也可以使用 Apollo 全量源码的工程 apollo
提示:从Apollo 10.0开始,源码模式和包模式采用同一套编译工具,我们建议您统一使用下面的命令进行编译和运行,源码模式下的dev_start.sh、dev_into.sh、apollo.sh等脚本不再建议使用。
2. 克隆工程 以 application-core 为例
1 git clone https://github.com/ApolloAuto/application-core.git
3. 启动并进入 Apollo 环境 1 2 3 4 5 6 7 8 9 10 11 12 # 先进入工程目录 cd application-core# 切换环境配置, 会自动识别您的宿主机环境切换.env 和.workspace.json配置 # 如果您使用apollo源码方式,不需要执行此步骤,aem会自动识别起动环境 bash setup.sh# 启动容器 aem start# 如果您选择使用本机而非docker容器进行环境安装,执行: aem start -b host
注意:本机模式下后面的操作和容器内是一致的。后续都可以在当前工程目录下执行 aem enter 命令进入环境,一个是进入docker容器,一个是进入一个apollo bash空间。
4. 安装软件包 示例工程中包含一个名为 core
目录,其中 core/cyberfile.xml
文件中描述了工程所依赖软件包,可以通过 buildtool 工具进行依赖包的安装
1 2 3 4 buildtool build -p core# 注:如果您想编译安装工作目录下的所有代码和包,请执行 buildtool build
此操作真正含义是编译工程中 core
这个包,但 core
本身并没有需要编译的代码,所以此操作仅会安装 core/cyberfile.xml
中声明的依赖包
提示:新版本buildtool编译的时候会默认带上 –opt –gpu(如果您使用gpu环境)参数,如果需要gdb调式请使用–dbg参数编译。
安装过程中可能会遇到权限问题:
1 PermissionError: [Errno 13] Permission denied: 'tools/proto/proto.bzl'
使用 sudo chmod 777 tools/proto/proto.bzl
命令修改权限即可,其它文件同理。
5. 选择车型配置 示例工程中profiles/sample目录是官方提供的基于一个雷达两个摄像头的车型配置,您可以参考profiles目录下的sample编写自己的车型配置,生效车型配置的方法如下:
1 2 # 以sample为例 aem profile use sample
6. 播放数据包 获取数据包对应的地图 1 buildtool map get sunnyvale
从 9.0.0-rc-r10
版本开始,地图数据已经被分离出来,需要单独下载,不再随地图包发布;通过 buildtool map list
可以查看所有可用的地图
启动 Dreamview+ 1 aem bootstrap start --plus
其余步骤请参考下方 播放数据包 部分。
源码安装方式 下载安装 Apollo 源码 1. 克隆 Apollo 源码 执行以下命令克隆 Apollo 源码
1 2 3 4 5 # SSH 方式 git clone git@github.com:ApolloAuto/apollo.git# HTTPS 方式 git clone https://github.com/ApolloAuto/apollo.git
检出到最新分支:
1 2 cd apollo git checkout master
2. 启动 Apollo 环境容器 在 apollo 目录下输入以下命令来启动环境容器
注意:如果显卡是40系列,并且正确安装驱动后,参考40系列镜像支持 进行操作。
1 bash docker/scripts/dev_start.sh
操作成功后您将会看到如下样式的提示输出
1 2 3 4 [ OK ] Congratulations! You have successfully finished setting up Apollo Dev Environment. [ OK ] To login into the newly created apollo_dev_michael container, please run the following command : [ OK ] bash docker/scripts/dev_into.sh [ OK ] Enjoy!
3. 进入 Apollo 环境容器 在 apollo 目录下输入以下命令进入容器
1 bash docker/scripts/dev_into.sh
4. 编译 在容器内的 /apollo 目录下输出以下命令编译整个工程
若需要开启编译优化,则通过以下命令进行编译
5. 启动 Apollo 进行播包验证 启动 Dreamview+ 1 bash scripts/bootstrap.sh start_plus
其余步骤请参考下方 播放数据包 部分。
播放数据包 获取数据包 1 wget https://apollo-system.cdn.bcebos.com/dataset/6.0_edu/demo_3.5.record -P $HOME/.apollo/resources/records/
在 Dreamview+ 中播放数据包 启动 Dreamview+ 之后,在浏览器输入 localhost:8888
进入 Dreamview+ 界面,您可以选择默认模式,也可以选择其他模式播放数据包。本小节以默认模式为例。
选择 Default Mode 。
勾选 Accept the User Agreement and Privacy Policy/接受用户协议和隐私政策 ,并单击 Enter this Mode 进入 Mode Settings/模式设置 页面。
在 Mode Settings/模式设置 页面,设置播包参数。
在 Operations/操作 中选择 Record 。
在 Environment Resources/环境资源 中,单击 Records/数据包 ,并选择具体想要播放的数据包。
在 Environment Resources/环境资源 中,单击 HDMap/高精地图 ,并选择 Sunnyvale Big Loop 。
单击底部区域播放按钮。 可以在 Vehicle Visualization/车辆可视化 中看到数据包播放的画面。
通过命令行播放数据包
进入 docker 环境,
在 Dreamview+ 中 Resource Manager/资源管理 > Records/数据包 中先下载需要的数据包。输入以下命令播放数据包:
1 cyber_recorder play -f ~/.apollo/resources/records/demo_3.5.record
注意:如果您想要循环播放数据包,添加 -l
,如果不循环播放数据包,则不需要添加 -l
。
使用 Dreamview 高版本(大约9.0及以上)建议使用 Dreamview+,Dreamview 的路径规划等功能会由于缺乏维护而不便甚至无法使用。
Dreamview+ 打开 http://localhost:8888/
播放数据包
编辑路径
Dreamview 打开 http://localhost:8899/
常见问题
如果您在浏览器中看到 Dreamview+ localhost:8888
是空白的,可能需要清除浏览器缓存,有其他显示问题也可以尝试。
git clone
下载后,请记得 git checkout
到正确的版本。
使用源码方式构建 Apollo 7.0 时,可能会遇到以下问题
1 2 3 4 5 6 (21:25:48) ERROR: An error occurred during the fetch of repository 'zlib' : Traceback (most recent call last): File "/apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/external/bazel_tools/tools/build_defs/repo/http.bzl" , line 111, column 45, in _http_archive_impl download_info = ctx.download_and_extract( Error in download_and_extract: java.io.IOException: Error downloading [https://zlib.net/zlib-1.2.11.tar.gz] to /apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/external/zlib/temp2343066494928926687/zlib-1.2.11.tar.gz: GET returned 404 Not Found (21:25:49) ERROR: /apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/external/com_google_protobuf/BUILD:210:11: @com_google_protobuf//:protobuf depends on @zlib//:zlib in repository @zlib which failed to fetch. no such package '@zlib//' : java.io.IOException: Error downloading [https://zlib.net/zlib-1.2.11.tar.gz] to /apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/external/zlib/temp2343066494928926687/zlib-1.2.11.tar.gz: GET returned 404 Not Found
此时需要在 apollo 目录下的 WORKSPACE
文件中添加以下内容来修复 zlib 的下载地址。需添加到文件第一行的 workspace(name = "apollo")
之后。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "zlib", urls = ["https://github.com/madler/zlib/archive/refs/tags/v1.2.11.tar.gz"], sha256 = "629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff", strip_prefix = "zlib-1.2.11", build_file_content = """ cc_library( name = "zlib", srcs = glob(["*.c"]), hdrs = glob(["*.h"]), includes = ["."], visibility = ["//visibility:public"], ) """, )