第二章 环境搭建:Ubuntu 22.04 + ROS2 Humble安装、Autoware源码编译、依赖管理工具vcs与colcon

说实话,每次带新人入门Autoware,我最怕的就是环境搭建这一步。不是技术有多难,而是坑太多。我自己当年第一次搭环境,整整折腾了两天,最后发现是Ubuntu版本选错了。所以这一章,我把自己踩过的坑、总结的经验,全部摊开来跟你讲。

2.1 操作系统选择:为什么是Ubuntu 22.04?

Autoware官方推荐的是Ubuntu 22.04 LTS。为什么不是20.04?也不是最新的24.04?

原因很简单:ROS2 Humble 是Ubuntu 22.04的原配版本。Humble是长期支持版,到2027年才结束维护。而Autoware的源码,就是基于Humble开发的。你如果用20.04装Galactic,很多依赖包版本对不上,编译到一半报错,心态直接崩掉。

注意: 千万别用Ubuntu 24.04。我试过,ROS2 Humble在24.04上装不了,依赖冲突一大堆。老老实实22.04,别折腾。

2.2 ROS2 Humble 安装

ROS2的安装其实不复杂,但有几个细节容易翻车。我习惯用deb包安装,简单稳定。

2.2.1 设置语言和区域

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

这一步很多人会跳过。但如果不设置,后面编译时有些包会报locale相关的警告,虽然不影响功能,但看着烦。

2.2.2 添加ROS2源

sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

2.2.3 安装ROS2 Humble

sudo apt update
sudo apt install ros-humble-desktop

这里我建议装 ros-humble-desktop,包含了常用的工具和可视化组件。如果你硬盘空间紧张,可以装 ros-humble-ros-base,但后面编译Autoware时还得补一堆包,更麻烦。

2.2.4 配置环境变量

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

嗯,这里有个小坑。如果你同时装了ROS1和ROS2,两个的setup.bash会冲突。我建议只保留ROS2的source,ROS1的注释掉。

2.3 Autoware源码编译

Autoware的源码编译,说白了就是一场依赖管理的战役。你想想看,一个自动驾驶系统,涉及感知、规划、控制、定位……几十个模块,每个模块又有自己的依赖。手动一个个装?不现实。

所以Autoware官方用了两个工具:vcs 和 colcon。

2.3.1 安装vcs和colcon

sudo apt install python3-vcstool python3-colcon-common-extensions

vcs 是用来管理多个Git仓库的。Autoware的源码分布在几十个Git仓库里,vcs可以一次性把它们全部拉下来。colcon 是编译工具,比catkin更现代,支持并行编译。

2.3.2 下载Autoware源码

mkdir -p ~/autoware_ws/src
cd ~/autoware_ws
wget https://raw.githubusercontent.com/autowarefoundation/autoware/main/autoware.repos
vcs import src < autoware.repos

这一步会下载所有依赖仓库。网络不好的话,可能会超时。我建议用代理,或者换个时间段再试。我曾经在下午三点下载,死活下不完,凌晨两点再试,十分钟搞定。

2.3.3 安装系统依赖

sudo apt install -y python3-pip
pip3 install --user -r src/autoware/requirements.txt
sudo apt update
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro humble

rosdep 会自动检测每个包的依赖,然后从apt源安装。但有时候rosdep会漏掉一些包,比如 libpcap-dev、libboost-all-dev 这些。如果编译时报错找不到某个头文件,大概率就是rosdep没装全。手动补上就行。

2.3.4 编译

cd ~/autoware_ws
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release

这里我解释一下参数:

  • --symlink-install:用符号链接代替复制文件,方便调试。你改了Python脚本,不用重新编译。
  • --cmake-args -DCMAKE_BUILD_TYPE=Release:编译Release版本,性能更好。

第一次编译大概需要30分钟到1小时,取决于你的CPU。我建议用 -j4 或 -j8 限制并行任务数,不然CPU跑满,电脑直接卡死。

小技巧: 编译时如果报错,先看错误信息最后几行。大部分错误都是缺少某个依赖包,apt install 装上就行。别一上来就怀疑代码有问题。

2.4 依赖管理工具:vcs 和 colcon 详解

这两个工具,是Autoware开发的左膀右臂。我单独拿出来讲,因为很多人只知其然,不知其所以然。

2.4.1 vcs:多仓库管理神器

vcs的全称是 Version Control System tool。它用一个 .repos 文件,描述所有仓库的地址、分支、版本。你只需要一条命令,就能把几十个仓库全部拉下来。

举个例子,autoware.repos 文件里长这样:

repositories:
  autoware/common:
    type: git
    url: https://github.com/autowarefoundation/autoware_common.git
    version: main
  autoware/core:
    type: git
    url: https://github.com/autowarefoundation/autoware_core.git
    version: main
  ...

vcs会读取这个文件,然后依次执行 git clone。如果某个仓库已经存在,它会自动更新。

我常用的vcs命令:

  • vcs import src < autoware.repos:导入所有仓库
  • vcs pull src:更新所有仓库到最新版本
  • vcs status src:查看所有仓库的状态

2.4.2 colcon:编译利器

colcon是catkin的升级版。它支持:

  • 并行编译(默认用满所有CPU核心)
  • 增量编译(只编译修改过的包)
  • 混合语言支持(C++、Python、CMake都能编译)

我常用的colcon命令:

  • colcon build:编译所有包
  • colcon build --packages-select 包名:只编译某个包,省时间
  • colcon build --packages-up-to 包名:编译某个包及其依赖
  • colcon test:运行测试
核心逻辑: vcs负责「拉代码」,colcon负责「编译代码」。两者配合,才能高效管理Autoware这种大型项目。

2.5 知识体系总览

下面这张图,是我自己画的。它把本章的知识点串在了一起,你看一眼就能明白整个环境搭建的流程。

Autoware环境搭建知识体系 Ubuntu 22.04 LTS ROS2 Humble vcs(多仓库管理) colcon(编译工具) Autoware源码仓库 编译产物(install/) 运行Autoware 从操作系统到运行,每一步都依赖上一步的正确配置

2.6 避坑指南

最后,我把自己这些年踩过的坑,列成一张表。你照着做,能省下不少时间。

常见问题 原因 解决方案
编译时报错 Could not find a package configuration file 缺少某个依赖库 用 apt search 包名 找到对应库,安装即可
vcs import 时网络超时 GitHub访问不稳定 使用代理,或换凌晨网络好的时候下载
colcon build 内存不足 并行编译任务太多 加 --parallel-workers 4 限制并行数
rosdep update 失败 rosdep源被墙 设置代理,或使用国内镜像源
source setup.bash 后找不到ros2命令 环境变量没生效 检查 ~/.bashrc 中是否有source语句
我的经验: 环境搭建这件事,急不得。每做完一步,都验证一下。比如装完ROS2,先跑个 ros2 run demo_nodes_cpp talker 试试。确认没问题,再往下走。否则后面出了问题,你都不知道是哪里错了。

好了,这一章的内容就到这里。环境搭好了,下一章我们就能真正开始写代码了。到时候,你会感谢现在认真搭环境的自己。

可可精品资料库