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

说实话,环境搭建这件事,我见过太多人在这里卡上好几天。明明代码逻辑没问题,结果编译报错一看,全是依赖版本不对。所以这一章,咱们就把这事彻底捋清楚。

核心思路:先装系统,再装ROS2,最后编译Apollo。顺序不能乱,版本不能错。

4.1 操作系统准备:Ubuntu 22.04 LTS

我个人习惯用Ubuntu 22.04 Server版,然后自己装桌面。为什么?因为Server版干净,没有乱七八糟的预装软件。但如果你图省事,Desktop版也行。

安装要点:

  • 磁盘分区:建议至少给 / 分 80GB,/home 分 100GB 以上。Apollo编译完大概占 30GB,ROS2 占 10GB,再加上缓存,空间很快就没了。
  • 语言选英文。中文支持可以后面加,但终端里英文报错更容易搜到解决方案。
  • 网络配置:建议用有线网络,Wi-Fi在编译大项目时偶尔会断流。
小技巧:装完系统第一件事,跑 sudo apt update && sudo apt upgrade -y。我遇到过好几次因为内核版本太旧,导致显卡驱动装不上的情况。

4.2 ROS2 Humble 安装

ROS2 Humble 是 Ubuntu 22.04 的官方推荐版本。说白了,就是最稳的那个。

安装步骤:

  1. 设置编码:sudo apt install software-properties-common && sudo add-apt-repository universe
  2. 添加 ROS2 源:sudo apt update && sudo apt install curl gnupg -y && curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
  3. 安装桌面版:sudo apt install ros-humble-desktop -y
  4. 安装开发工具:sudo apt install ros-humble-ament-cmake ros-humble-ament-lint-auto -y
注意:千万不要用 pip 安装 ROS2 的 Python 包!我踩过这个坑,pip 版本和 apt 版本冲突,导致 rclpy 直接崩了。老老实实用 apt 装。

环境变量配置:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "export ROS_DOMAIN_ID=30" >> ~/.bashrc  # 避免多机通信冲突
source ~/.bashrc

为什么要设 ROS_DOMAIN_ID?你想想看,如果实验室里好几台车都在跑 ROS2,不设这个 ID,消息就乱串了。我一般设 30,好记。

4.3 Apollo 9.0 源码编译

Apollo 9.0 的编译方式和之前版本不太一样。它用了 apollo.sh 脚本,但底层还是依赖 Docker。嗯,这里要注意,Apollo 官方推荐用 Docker 编译,但咱们做联调,最好还是源码编译,方便改代码。

下载源码:

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

安装依赖:

sudo apt install -y build-essential cmake git libboost-all-dev
sudo apt install -y libeigen3-dev libopencv-dev libyaml-cpp-dev
sudo apt install -y libpcap-dev libsqlite3-dev libgflags-dev libgoogle-glog-dev

这里有个坑——libboost-all-dev 会装很多 boost 库,但 Apollo 只需要其中几个。我曾经因为 boost 版本冲突,编译时卡在 boost::shared_ptr 上。解决方案是手动指定版本:

sudo apt install libboost1.74-dev libboost-filesystem1.74-dev libboost-system1.74-dev

避坑指南:我曾经在 Ubuntu 22.04 上直接装 libboost-all-dev,结果它给我装了 1.81 版本,Apollo 9.0 不兼容。后来我手动降级到 1.74 才搞定。所以,版本号一定要对。

4.4 编译 Apollo 核心模块

Apollo 9.0 的编译命令很简单:

./apollo.sh build_opt

但第一次编译大概要 40 分钟到 1 小时,取决于你的机器配置。我建议用 build_opt_gpu 如果你有 NVIDIA 显卡,能快不少。

编译选项说明:

命令 说明 适用场景
./apollo.sh build_opt 优化编译,速度较快 日常开发
./apollo.sh build_dbg 调试模式,包含符号信息 调试崩溃问题
./apollo.sh build_opt_gpu GPU 加速编译 有 NVIDIA 显卡
个人经验:第一次编译时,别开太多终端。我试过一边编译一边看视频,结果内存爆了,编译失败。老老实实等它跑完,去泡杯咖啡。

4.5 验证环境是否正常

编译完成后,跑一下 Apollo 的单元测试:

./apollo.sh test

如果所有测试通过,说明环境搭建成功。然后启动 ROS2 和 Apollo 的桥接节点:

ros2 run apollo_bridge apollo_bridge_node

看到 [INFO] [bridge]: Apollo bridge initialized successfully 就对了。

常见问题:如果报错 libcyber.so: cannot open shared object file,说明环境变量没设对。检查 LD_LIBRARY_PATH 是否包含 Apollo 的 lib 目录。

4.6 知识体系总览

下面这张图,把整个环境搭建的流程串起来了。你跟着箭头走,就不会乱。

环境搭建核心流程 Ubuntu 22.04 LTS ROS2 Humble Apollo 9.0 源码 依赖安装细节 系统工具链 Boost 1.74 Eigen3 / OpenCV 其他库 ✅ 单元测试通过 → 环境就绪

说白了,环境搭建就是三步走:系统 → ROS2 → Apollo。每一步都有对应的依赖要装,版本号是命根子。我见过太多人因为 boost 版本不对,折腾了两天。所以,照着上面的步骤来,别跳步。

最后一句:如果你在编译时遇到 undefined reference 错误,90% 是依赖库版本不对。用 ldd 命令检查一下链接的库路径,基本就能定位问题。

可可精品资料库