4、开发环境搭建:Ubuntu 22.04 + ROS2 Humble + Apollo 9.0源码编译与依赖安装

说实话,环境搭建这一步,劝退了很多人。

我记得刚入行那会儿,光装一个ROS就把我折腾了两天。后来做Apollo集成,又踩了一遍坑。所以这一章,我把自己这些年积累的经验全掏出来,帮你把这条路铺平。

4.1 为什么选这个组合?

你可能要问:Ubuntu 22.04、ROS2 Humble、Apollo 9.0,这三者为什么能凑到一起?

说白了,这是目前最稳的搭配。Ubuntu 22.04是LTS版本,生命周期长。ROS2 Humble是2022年的发行版,跟22.04完美匹配。Apollo 9.0官方推荐的就是这个组合。我在项目里试过其他版本,比如Ubuntu 20.04配ROS2 Foxy,编译Apollo时总出些奇奇怪怪的依赖问题。嗯,后来就老老实实按官方推荐来了。

核心版本对应关系:

组件版本说明
操作系统Ubuntu 22.04 LTS长期支持,稳定可靠
ROS2Humble Hawksbill2022年发行,与22.04同周期
Apollo9.0最新稳定版,支持ROS2桥接

4.2 第一步:装系统,别偷懒

我建议你直接装Ubuntu 22.04桌面版,别用服务器版。为什么?因为调试的时候,图形界面能省很多事。我曾经在服务器版上折腾了三天,就为了看一个可视化日志,最后乖乖装回了桌面版。

安装时注意几点:

  • 磁盘分区:至少留80GB给系统,Apollo编译完能吃掉30GB+
  • 内存:16GB起步,32GB更舒服。我试过8GB编译,直接卡死
  • 网络:确保能访问GitHub和Docker Hub,你懂的

避坑指南:我曾经在虚拟机里装Ubuntu 22.04,结果编译Apollo时内存不够,直接OOM。后来老老实实双系统了。如果你用虚拟机,至少分配8GB内存和4核CPU。

4.3 第二步:ROS2 Humble安装

ROS2的安装其实不复杂,但有几个细节要注意。我直接给你最稳的步骤:

# 1. 设置locale
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

# 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

# 3. 安装ROS2 Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop

# 4. 安装开发工具
sudo apt install ros-dev-tools

装完之后,记得配置环境变量:

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

我的小技巧:装完ROS2后,先跑一下ros2 run demo_nodes_cpp talker和ros2 run demo_nodes_py listener,验证一下通信是否正常。这一步能帮你排除很多后续问题。

4.4 第三步:Apollo 9.0源码编译

Apollo的编译,说白了就是一套Docker化的流程。但这里有个坑:Apollo 9.0对ROS2的支持是实验性的,需要手动开启一些选项。

先拉代码:

git clone https://github.com/ApolloAuto/apollo.git
cd apollo
git checkout v9.0.0

然后安装依赖:

# 安装Docker
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

# 把当前用户加入docker组
sudo usermod -aG docker $USER
# 记得重新登录或执行 newgrp docker

# 拉取Apollo镜像
bash docker/scripts/dev_start.sh

进入容器后,编译带ROS2支持的版本:

# 进入容器
bash docker/scripts/dev_into.sh

# 编译(启用ROS2支持)
./apollo.sh build --with_ros2

注意:第一次编译大概需要1-2小时,取决于你的机器配置。我建议你泡杯咖啡,或者去干点别的。编译过程中如果报错,多半是网络问题,重试就行。

4.5 依赖安装的坑与解

依赖问题,是环境搭建中最磨人的部分。我把自己踩过的坑列出来,你直接避开:

常见问题原因解决方案
protobuf版本冲突ROS2和Apollo用的protobuf版本不同使用Apollo容器内的protobuf,不要装系统级的
Python包缺失Apollo依赖一些Python3包pip3 install -r requirements.txt
CUDA版本不对Apollo 9.0要求CUDA 11.6+检查nvidia-smi,升级驱动
编译时内存不足Apollo编译很吃内存加swap空间,或者减少并行编译数

我曾经踩过的坑:有一次编译到一半,报错说找不到libpcap.so.1。查了半天,原来是系统里装了多个版本的libpcap。最后用ldconfig重新配置了一下才解决。所以,如果你遇到类似的库找不到问题,先检查一下ldconfig -p | grep 库名。

4.6 验证环境是否搭好

环境搭完,怎么知道对不对?我一般跑一个简单的测试:

# 在Apollo容器内
source /apollo/ros2_bridge/install/setup.bash
ros2 topic list

如果能看到类似/apollo/control、/apollo/localization这样的topic,说明ROS2桥接成功了。

我的习惯:每次搭完环境,我都会写一个简单的测试脚本,把关键功能都跑一遍。这样下次换机器或者重装系统时,直接跑脚本验证就行,不用再手动一个个试了。

4.7 知识体系总览

这一章的内容,说白了就是三件事:装系统、装ROS2、装Apollo。但背后的逻辑,我画了张图帮你理清:

开发环境搭建核心逻辑 Ubuntu 22.04 LTS ROS2 Humble Apollo 9.0 依赖安装关键点 • Docker:容器化编译环境 • protobuf:版本一致性(用Apollo容器内的) • CUDA:11.6+,用于GPU加速 • ROS2桥接:--with_ros2 编译选项 提示:先装系统 → 再装ROS2 → 最后装Apollo,顺序不要乱

这张图其实就说明了一件事:底层是操作系统,中间是ROS2,上层是Apollo。依赖关系是单向的,不能跳级。我见过有人先装Apollo再装ROS2,结果依赖全乱套了。

好了,环境搭好之后,下一章我们就可以开始真正搞集成了。到时候我会带你写第一个ROS2节点,跟Apollo通信。嗯,那才是真正有意思的部分。

可可精品资料库