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 的官方推荐版本。说白了,就是最稳的那个。
安装步骤:
- 设置编码:
sudo apt install software-properties-common && sudo add-apt-repository universe - 添加 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 - 安装桌面版:
sudo apt install ros-humble-desktop -y - 安装开发工具:
sudo apt install ros-humble-ament-cmake ros-humble-ament-lint-auto -y
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 知识体系总览
下面这张图,把整个环境搭建的流程串起来了。你跟着箭头走,就不会乱。
说白了,环境搭建就是三步走:系统 → ROS2 → Apollo。每一步都有对应的依赖要装,版本号是命根子。我见过太多人因为 boost 版本不对,折腾了两天。所以,照着上面的步骤来,别跳步。
undefined reference 错误,90% 是依赖库版本不对。用 ldd 命令检查一下链接的库路径,基本就能定位问题。
可可精品资料库