本项目致力于在官方不支持的环境(如 Ubuntu 22.04 Jammy 和 Ubuntu 24.04 Noble)中通过源码自动化打包生成 ROS 1 Noetic 的 .deb 安装包。
- 修改内容:支持通过参数传递 OS 版本和 ROS 发行版;引入动态
rosdep映射逻辑,排除非包目录(如工具、测试目录及隐藏目录)。 - 原因:为了兼容不同版本的 Ubuntu 原生系统依赖名,并解决
bloom无法识别工作空间内尚未打包的内部依赖问题。排除测试目录是为了防止无效或故意的错误 XML 文件干扰解析。
- 修改内容:创建了
.github/workflows/build_deb.yml,支持 Matrix 策略。 - 原因:实现自动化构建产出,并验证在不同 Ubuntu 容器镜像中的兼容性。
- 修改内容:
- 工具链:将
bloom、rosdep等工具从apt安装切换为pip3(针对 24.04 使用了--break-system-packages)。 - 系统库:手动添加了
nasm、libpoco-dev、libfltk1.3-dev、libogre-1.9-dev、libsdl-dev等几十个底层依赖。 - 仓库源:移除了官方 ROS 1 apt 源(避免 404),改用
tianbot/rosdistro自定义源。
- 工具链:将
- 原因:22.04+ 官方不提供 ROS 1 包,因此必须完全依赖源码构建;特定底层库是编译
rviz、image_pipeline等核心包所必需的。
- 修改内容:引入
catkin_tools对所有包进行拓扑排序。在 CI 循环中,每打好一个.deb包就执行dpkg -i立即安装,并配合dpkg-buildpackage -d跳过不必要的依赖检查。 - 原因:
- 拓扑排序:确保基础包(如
catkin)先于上层依赖包构建。 - 即时安装:上层包(如
roscpp)在编译时需要底层包提供的 CMake 文件和头文件。通过即时安装,可以实现“一边打包一边满足后续依赖”的滚雪球式构建。 - 跳过检查 (
-d):应对复杂的循环依赖和系统尚未索引新包的情况。
- 拓扑排序:确保基础包(如
构建完成后,成品 .deb 文件将作为 Artifacts 存储在 GitHub Action 运行记录中。