我有一个
ROS2
软件包,它正在使用 OpenCV 4.7.0
,它是从源代码安装的。
我可以使用 colcon-build --symlink-install
构建包,也可以使用 colcon-test
对其进行测试。找到正确的opencv版本,是4.7.0
。但是当我使用 bloom-generate rosdebian...
创建 .deb 数据包时,它找不到 OpenCV 4.7.0
,而是找到对 OpenCV 4.5.4
的引用。这是版本之间的冲突,因此不会创建 .deb
数据包。如何让bloom-generate rosdebian
找到正确的版本?
我不明白为什么构建和测试可以找到
CMakeLists.txt
中提到的正确版本,但不能找到bloom-generate
。
注:
OpenCV 4.5.4 一切运行良好,因为我是从源代码构建的,也可能是因为 4.5.4 附带带有“libopencv-dev”数据包的 Ubuntu 22.04。
我只是更改了版本号,其他都一样。
我在本地计算机上工作时任何版本都没有任何问题,但这仅发生在 docker 容器内的 Git CD/CI 管道中,该容器与我的本地计算机具有相同的配置。
谢谢你。
bloom
使用 rosdep 规则来解析包,因为它只关心发布到 ROS Build Farm。 bloom
本身不会创建DEB/RPM文件,它只创建触发构建农场的发布文件,该构建农场使用GBP来构建DEB文件。
通常建议不要使用自定义版本的软件包。特别是如果您正在制作一个可普遍分发的 DEB。
但如果您仍然想这样做,您可以选择将 ROS Build Farm 托管在基于 Ubuntu 的容器上,并通过 PPA 安装 OpenCV 4.7.0。我找不到任何此类 PPA,因此这可能不是最佳选择。也许您可以尝试提供安装了 OpenCV 4.7.0 的本地 APT 存储库(希望它不会破坏任何其他软件包)。但是,无论您在哪里安装它,您都必须使用相同的存储库(如果 OpenCV 是运行时依赖项)。也许您可以在本地存储库中创建一个名为
opencv-4.7.0
的新包。
另一个选项是创建自定义 rosdep 规则,例如
10-opencv.list
到 /etc/ros/rosdep/sources.list.d
。我知道它支持 pip
包,这适用于 python3-opnecv
。我不确定您是否可以使用那里的 git
版本的软件包。
根据这个
answer,有一个名为
ament_virtualenv
(基于catkin_virtualenv
)的包为此目的构建,但最后一个版本是针对ROS 2:Dashing。
colcon build
使用OpenCV 4.7.0的原因可能是因为您在--ignore-src
中使用了rosdep install
,因此它没有进一步解析为rosdistro
版本的依赖项。
- 在本地计算机上工作时,任何版本都没有任何问题,但这仅发生在 docker 容器内的 Git CD/CI 管道中,该容器与我的本地计算机具有相同的配置。
我不确定
bloom
是如何在您的本地计算机上获得 4.7.0 的。也许您指的是colcon build
?