Apollo 10.0自动驾驶系统源码编译实战:从环境配置到避坑指南

1次阅读
没有评论

共计 1279 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景与痛点

编译 Apollo 10.0 源码时,开发者常遇到三大挑战:

Apollo 10.0 自动驾驶系统源码编译实战:从环境配置到避坑指南

  1. GPU 驱动兼容性 :CUDA 和 cuDNN 版本与系统内核、驱动不匹配会导致编译失败或运行时错误
  2. ROS 依赖管理 :Apollo 部分模块依赖 ROS 消息,但官方文档未明确说明版本锁定方法
  3. Bazel 构建优化 :默认配置可能引发 OOM(尤其是 16GB 以下内存设备),且增量构建规则复杂

环境准备

基础要求(Ubuntu 20.04)

  • 内核版本:5.4.0-135-generic(低版本需升级)
  • GPU 驱动:NVIDIA 470.82+(验证兼容列表见 NVIDIA 文档
  • 磁盘空间:至少 50GB 剩余(建议 SSD)

关键软件包

# 必须精确安装的版本
sudo apt-get install -y \
    docker-ce=5:20.10.14~3-0~ubuntu-focal \
    nvidia-container-toolkit=1.7.0-1 \
    bazel-4.2.2

编译实战

1. 初始化工作区

git clone https://github.com/ApolloAuto/apollo.git
cd apollo
git checkout v10.0
./docker/scripts/dev_start.sh  # Docker 方案必选 

2. Bazel 构建优化

推荐参数组合:

bazel build --config=gpu \
            --config=opt \
            --local_ram_resources=HOST_RAM*0.8 \
            --jobs=$(nproc) \
            //modules/...

  • --config=gpu:启用 NVIDIA 编译工具链
  • local_ram_resources:防止 OOM 的黄金参数

性能调优

内存不足解决方案

# 创建 32GB 交换文件(需 sudo)dd if=/dev/zero of=/swapfile bs=1G count=32
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

增量编译技巧

# 仅重新编译变更模块
bazel build --config=gpu //path/to/module:target

# 清理无效缓存
bazel clean --expunge

避坑指南

CUDA 版本冲突

错误特征:

ERROR: /apollo/modules/perception/cuda_util/BUILD:12:11: undeclared inclusion of 'cuda_runtime.h'

解决方案:

export CUDA_HOME=/usr/local/cuda-11.4  # 必须与 nvidia-smi 显示的驱动版本匹配 

验证与测试

Dreamview 启动

# 在新终端执行
./scripts/bootstrap.sh

# 访问 http://localhost:8888

运行单元测试

bazel test --config=gpu //modules/control/test:control_test

结语

经过上述步骤,应该能成功编译 Apollo 10.0 系统。但编译只是第一步,如何优化 Apollo 的 CI/CD 流水线,实现自动化构建和测试?欢迎在评论区分享你的实践方案。

正文完
 0
评论(没有评论)