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 | 长期支持,稳定可靠 |
| ROS2 | Humble Hawksbill | 2022年发行,与22.04同周期 |
| Apollo | 9.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。但背后的逻辑,我画了张图帮你理清:
这张图其实就说明了一件事:底层是操作系统,中间是ROS2,上层是Apollo。依赖关系是单向的,不能跳级。我见过有人先装Apollo再装ROS2,结果依赖全乱套了。
好了,环境搭好之后,下一章我们就可以开始真正搞集成了。到时候我会带你写第一个ROS2节点,跟Apollo通信。嗯,那才是真正有意思的部分。