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:选择LTS版本,安装时勾选“最小安装”,关闭自动更新以免编译中断。
- 基础依赖:更新源并安装编译工具链。
- Docker Engine:使用官方脚本安装,并将当前用户加入docker组。
- ROS2 Humble:优先在容器内安装,宿主机仅保留ros2 CLI用于调试。
- VS Code:安装Remote-Containers、C/C++、Python、ROS插件。
- 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重新构建并运行,确保环境可复现。