第二章 环境搭建: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,很多依赖包版本对不上,编译到一半报错,心态直接崩掉。
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跑满,电脑直接卡死。
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:运行测试
2.5 知识体系总览
下面这张图,是我自己画的。它把本章的知识点串在了一起,你看一眼就能明白整个环境搭建的流程。
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 run demo_nodes_cpp talker 试试。确认没问题,再往下走。否则后面出了问题,你都不知道是哪里错了。
好了,这一章的内容就到这里。环境搭好了,下一章我们就能真正开始写代码了。到时候,你会感谢现在认真搭环境的自己。