4. 开发环境搭建

自动驾驶系统的开发环境不是“装一个ROS2就完事”,而是一套从操作系统、运行时、容器、编辑器到构建与版本控制的完整工具链。环境搭建的质量直接决定后续编译成功率、节点通信稳定性以及团队协作效率。本章围绕Ubuntu、ROS2发行版、Docker、VS Code、Colcon、Git六类核心工具,给出可复用的安装路径与工程目录规范。

一、核心原理:环境分层与依赖隔离

自动驾驶软件栈通常包含感知、定位、规划、控制等多个模块,各模块对库版本、CUDA、驱动的要求并不一致。若全部安装在宿主机上,极易出现“A模块能编译、B模块崩溃”的依赖冲突。因此推荐采用分层结构:

  • 宿主机层:Ubuntu LTS + 显卡驱动 + Docker Engine,只提供最稳定的基础运行环境。
  • 容器层:每个ROS2发行版或算法模块使用独立镜像,锁定依赖版本。
  • 工作空间层:通过Colcon在容器内构建,源码由宿主机挂载,保证代码持久化。
  • 版本控制层:Git管理源码与配置,镜像由Dockerfile描述,实现环境可复现。

这种分层让“环境问题”与“代码问题”解耦,是团队协作和CI/CD的基础。

自动驾驶开发环境分层架构 宿主机层 · Ubuntu 22.04 LTS NVIDIA 驱动 / CUDA Docker Engine Git / SSH 密钥 VS Code + Remote 挂载源码 / 设备 容器层 · Docker 镜像(依赖隔离) ros:humble-ros-base ROS2 Humble 运行时 autodrive:perception 感知模块 + CUDA 依赖 autodrive:planning 规划控制模块 Colcon 构建 工作空间层 · Colcon Workspace src/ 源码 build/ 中间产物 install/ 安装结果 log/ 构建日志 版本控制层 · Git 仓库(源码 + Dockerfile + 配置) 分支策略:main / dev / feature-*

二、方法流程:六类工具的安装顺序

安装顺序应遵循“先底层后上层、先系统后应用”的原则,避免反复返工。推荐流程如下:

  1. Ubuntu 22.04 LTS:选择LTS版本,安装时勾选“最小安装”,关闭自动更新以免编译中断。
  2. 基础依赖:更新源并安装编译工具链。
  3. Docker Engine:使用官方脚本安装,并将当前用户加入docker组。
  4. ROS2 Humble:优先在容器内安装,宿主机仅保留ros2 CLI用于调试。
  5. VS Code:安装Remote-Containers、C/C++、Python、ROS插件。
  6. Colcon 与 Git:Colcon随ROS2安装,Git需配置用户名、邮箱与SSH密钥。
# 1. 基础依赖
sudo apt update && sudo apt install -y \
  build-essential cmake git curl wget python3-pip

# 2. 安装 Docker Engine
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

# 3. 拉取 ROS2 Humble 基础镜像
docker pull ros:humble-ros-base

# 4. 安装 Colcon(容器内或宿主机)
sudo apt install -y python3-colcon-common-extensions

# 5. 配置 Git
git config --global user.name "autodrive-dev"
git config --global user.email "dev@autodrive.local"
ssh-keygen -t ed25519 -C "dev@autodrive.local"
建议将Docker镜像标签固定为具体版本(如 ros:humble-2024-05),避免 latest 标签导致环境漂移。

三、工程目录规范

统一的目录结构是团队协作的前提。推荐以“工作空间 + 功能包”两级组织,源码全部放在 src 下,构建产物不纳入Git。

目录/文件 作用 是否纳入Git
src/所有ROS2功能包源码是
build/Colcon编译中间文件否
install/编译后的可执行与库否
log/构建与运行日志否
docker/Dockerfile与compose配置是
scripts/启动、构建、部署脚本是
config/参数文件、标定文件是
.gitignore排除build/install/log是
autodrive_ws/
├── src/
│   ├── perception/
│   ├── localization/
│   ├── planning/
│   └── control/
├── docker/
│   ├── Dockerfile
│   └── docker-compose.yml
├── scripts/
│   ├── build.sh
│   └── run.sh
├── config/
└── .gitignore

四、案例与误区复盘

案例:某团队在宿主机直接安装ROS2 Foxy与Humble,因Python版本冲突导致 rclpy 导入失败。改为“宿主机只装Docker,ROS2全部在容器内”后,问题消失,且新成员入职时间从两天缩短到两小时。

常见误区:

  • 把 build/、install/ 提交到Git,导致仓库膨胀、冲突频发。
  • 使用 latest 镜像标签,今天能跑明天报错。
  • 在容器内直接改代码却不挂载宿主机目录,容器删除后代码丢失。
  • 忘记将用户加入docker组,每次都要 sudo,脚本无法自动化。
  • Colcon构建时不指定 --symlink-install,Python脚本修改后需重新编译。
环境搭建完成后,务必执行一次“从零复现”验证:删除容器与build/install目录,仅凭Git仓库和Dockerfile重新构建并运行,确保环境可复现。