使用自定义 Rosdistro 版本
概述
rosdistro 包含所有发行版的 ROS 软件包的中央索引和用于安装的打包二进制依赖项的 rosdep
键。
当您调用 rosdep install ...
时,它会检查来自 rosdistro 的本地缓存索引(在 rosdep update
期间填充)以将 package.xml
中的键与要安装的 ROS 软件包、python 模块或二进制文件关联起来。
因此,该索引是 ROS 生态系统的重要组成部分。
但是,有时用户希望断言对该索引有进一步的控制,以添加他们自己的专有密钥或使用 rosdistro 的先前状态。 本指南将介绍如何在您的系统上设置要使用的 rosdistro 版本。
本指南将使用的激励示例是由于您的开发计算机或持续集成出现故障而希望使用先前版本的 Rolling。 在从一个操作系统过渡到另一个操作系统期间,由于支持转移到新操作系统(即从 Ubuntu 22.04 转移到 24.04),旧操作系统上的 Rolling 可能会变得不可用。 因此,我们希望设置一个与给定操作系统上有效的 Rolling 发行版一致的 rosdistro 的先前版本,以便在升级到新操作系统之前保持系统正常运行。
重要准备工作
Rosdep 默认从其“/etc/ros/rosdep/sources.list.d/20-default.list”中设置的位置填充其缓存。 使用“rosdep init”设置 rosdep 时,它会使用主 rosdistro URL(来自此文件 <https://github.com/ros/rosdistro/blob/master/rosdep/sources.list.d/20-default.list>)填充“20-default.list”。 由“rosdep update”生成的缓存位于“~/.ros/rosdep/sources.cache”中,不应手动修改。
当 rosdep update 期间未设置“ROSDISTRO_INDEX_URL”环境变量值时,它会使用主公共 rosdistro 索引。 但是,当设置此值时,您可以使用自定义 rosdisto 索引,该索引可以是来自公共索引的快照,也可以是使用您的专有包填充的完全独立的索引。
如果您想了解更多信息,请查看`ros_buildfarm 包中的文档 <https://github.com/ros-infrastructure/ros_buildfarm/blob/master/doc/custom_rosdistro.rst>`_。
如何使用自定义 Rosdistro 版本
要在您的 CI、docker build、本地环境、机器人或其他应用程序中使用自定义版本,我们需要首先确定感兴趣的 rosdistro 版本。
对于我们的激励示例,我们希望在新操作系统上第一次同步“rolling”之前使用最后一个索引状态。 在这种情况下,我们操作系统的最后一次同步是在 2024 年 2 月 28 日进行的。 方便的是,同步已标记,因此我们可以在“rolling/2024-02-28”标记的分支上获取该信息。
因此,我们需要使用标记的分支值来更新“20-default.list”,而不是使用主存储库的当前状态。 这可以使用以下脚本完成。 如果在本地主机上运行,则可能需要包含“sudo”。 这将更新列表以使用标记的分支而不是主分支。
sed -i "s|ros\/rosdistro\/master|ros\/rosdistro\/rolling\/2024-02-28|" /etc/ros/rosdep/sources.list.d/20-default.list
之后,我们现在必须更新环境变量“ROSDISTRO_INDEX_URL”以指向我们的新 rosdistro 索引。
export ROSDISTRO_INDEX_URL=https://raw.githubusercontent.com/ros/rosdistro/rolling/2024-02-28/index-v4.yaml
如果您计划在本地主机上长期使用它,最好将其包含在“~/.bashrc”中,以便所有新终端自动执行此操作。 我们索引中的“v4”指向索引格式的新版本。 以前的索引也存在,但没有“v4”,由于历史原因和遗留系统,它仍然存在,但您不应该使用它。
之后,您可以“rosdep update”,它现在将使用更改根据 2024 年 2 月 28 日开始损坏之前的滚动分布状态更新索引。 您可以在 Nav2 的 CircleCI 和 ros_gz 的 GitHub Actions 中看到这一点,以绕过其 CI 系统中的临时滚动中断。
Note
如果您使用的是自定义 rosdistro 版本,则可以用您的分叉或索引位置替换默认列表和索引 URL 中的最终 URL。