ros1不同版本之间,能编译成功

最近,我在使用网上的开源代码时候,作者使用的是Ubuntu18.04,melodic版本的ros1

但是我试了一下,使用 Ubuntu20.04,ros1 noetic版本也是可以实现的。

项目地址:

https://github.com/Geo-JTao/UR5_gripper_camera_gazebo

我把代码clone下来,然后编译,直接通过了。

我不太懂CmakeLists.txt作用到底是啥。

比如这里的是melodic路径,但是我noetic版本,没有这个路径,竟然编译的时候没有报错,直接成功。

在这里插入图片描述
在这里插入图片描述


问:cmakelists.txt中/opt/ros/melodic/share/catkin/cmake/toplevel.cmake是啥意思

CMakeLists.txt 文件中,/opt/ros/melodic/share/catkin/cmake/toplevel.cmake 是一个用于设置和管理 ROS 包构建的 CMake 文件路径,特别是在使用 ROS1 系统时,catkin 是一种构建工具,类似于传统的 cmake。我们可以通过该路径来指定一些特定于 ROS 构建系统的行为。

详细解释:

  1. 路径解释

    • /opt/ros/melodic/:这是安装了 ROS Melodic 版本的系统路径。/opt/ros/ 目录下存放了你安装的 ROS 各版本的文件和库。
    • share/catkin/cmake/:这是 catkin 构建工具的 CMake 配置文件所在的目录,catkin 是 ROS1 默认的构建系统,cmake 目录包含了一些 ROS-specific 的 CMake 模块和脚本。
    • toplevel.cmake:这个文件是 catkin 构建系统的一部分,通常用于在一个 ROS 工作空间的顶层目录中进行 CMake 配置。它的作用是为 ROS 包的构建过程设置一些全局配置和管理工具链。
  2. 作用
    toplevel.cmake 文件通常会在你构建 ROS 工作空间时由 catkin_makecatkin build 命令自动调用。这个文件的主要作用是:

    • 设置编译过程的基础环境。
    • 配置一些与 ROS 相关的 CMake 变量和宏。
    • 通过加载 catkin 的其他 CMake 模块,帮助 CMake 和 ROS 的其他工具协作完成包的编译和安装。
  3. 如何使用
    当你运行 catkin_makecatkin build 时,CMake 会使用工作空间中 CMakeLists.txt 文件的指令来查找并加载 toplevel.cmake。在该文件中,catkin 会根据不同的参数和设置来确定如何构建包和依赖项。

    示例
    如果你在 CMakeLists.txt 文件中引用了 toplevel.cmake,一般是为了确保这个文件被正确地调用。例如:

    find_package(catkin REQUIRED)
    include_directories(${catkin_INCLUDE_DIRS})
    
    catkin_package()
    

    这会自动包含 toplevel.cmake 文件中的所有设置,从而配置 ROS 构建系统所需的标准流程。

总结:

/opt/ros/melodic/share/catkin/cmake/toplevel.cmake 是 ROS Melodic 版本中用于支持 catkin 构建系统的 CMake 配置文件,它在构建过程中设置了 ROS 包的构建环境。它帮助 CMake 了解如何在 ROS 工作空间中正确地配置和构建包。


但是很奇怪,根本没有这个路径,因此,上面的所有内容,都实现不了。

问:那为什么我noetic版本的ros,也能使用这句话编译成功吗

这是因为 ROS 1 的 catkin 构建系统在不同的版本(如 Melodic、Noetic)之间基本保持了兼容性,尽管它们对应的是不同的 ROS 发行版本。具体来说,ROS Noetic 版本的 catkin 仍然继承了 Melodic 的构建工具和一些标准配置文件,因此即使你使用的是 Noetic 版本,仍然可以通过类似的方式(例如引用 /opt/ros/melodic/share/catkin/cmake/toplevel.cmake)来完成编译。

解释原因:

  1. ROS Noetic 与 Melodic 的兼容性
    ROS Noetic 是 ROS 1 的最后一个发行版,它基于 Ubuntu 20.04(Focal Fossa),而 ROS Melodic 基于 Ubuntu 18.04(Bionic)。尽管它们使用了不同的 Ubuntu 版本,但它们的 catkin 构建系统在设计时保留了较好的向后兼容性,尤其是在 CMake 配置和构建方式上。因此,NoeticMelodic 使用的构建工具是相似的,catkin 的大部分基础设施和目录结构是一样的。

  2. catkin 构建系统的兼容性
    catkin 是一个在 ROS 1 中广泛使用的构建系统,它负责组织和管理 ROS 包的构建过程。catkin 的配置文件和工作流程在不同版本之间并没有做大的改变,尤其是在 CMake 部分。ROS Noetic 仍然使用 catkin,并且大部分的配置文件路径(如 /opt/ros/melodic/share/catkin/cmake/toplevel.cmake)是被保留下来的,这就导致了即使你在 Noetic 中使用 Melodic 的路径,编译过程仍然能够成功执行。

  3. catkin 配置文件的共享
    即使你在 ROS Noetic 中使用了 Melodic 的路径,例如 toplevel.cmake,这些配置文件和脚本仍然可以兼容。ROS 的 CMake 构建系统并没有对不同版本做出完全独立的调整,而是通过一些软链接或者配置保留了对老版本的支持。这意味着,Noetic 的 catkin 构建系统可以在运行时找到 Melodic 的一些配置文件,并根据它们进行构建。

关键点:

  • 路径兼容性:虽然 ROS Melodic 和 Noetic 是不同版本,但它们都使用 catkin 构建系统,且大多数 CMake 配置文件和工具链保持了兼容性。
  • 向后兼容性catkin 构建系统在 ROS 版本间的兼容性很强,尤其是在 CMake 配置方面。它设计时考虑到不同版本的兼容性,确保在构建时不容易出现因版本差异导致的问题。
  • 默认工具链和配置:即使在 Noetic 中,某些 Melodic 的配置文件也可能被保留,或者路径指向的文件仍然是有效的。

总结:

在 ROS Noetic 中使用 Melodic 版本的路径进行编译成功,主要是因为 ROS 1 在不同版本之间的构建系统(catkin)保持了较好的兼容性。因此,使用 Melodic 的构建配置路径在 Noetic 中也能找到相应的支持文件,并成功编译。


问:但是noetic版本根本找不到路径吧

你说得对,在 ROS Noetic 中,默认的路径应该指向的是 Noetic 版本的 catkin 工具和配置,而不是 Melodic 版本的路径。如果你尝试使用 /opt/ros/melodic/share/catkin/cmake/toplevel.cmake 这样的路径,在 Noetic 中确实应该无法找到该文件,因为路径指向的是 Melodic 的版本。

让我们来澄清一下可能出现的混淆并找出原因:

1. 不同版本的安装路径不同

  • ROS Melodic 和 Noetic 会分别安装在不同的目录下。ROS Melodic 通常安装在 /opt/ros/melodic/ 下,而 ROS Noetic 安装在 /opt/ros/noetic/ 下。所以,Noetic 中的 catkin 相关路径应该位于 /opt/ros/noetic/share/catkin/ 下,而不是 Melodic 的路径。
  • 如果你在 Noetic 中尝试引用 Melodic 的路径,确实会出现找不到路径的问题。

2. ROS Noetic 里的 catkin 配置

  • 如果你在 ROS Noetic 中遇到类似的问题,应该查看 /opt/ros/noetic/share/catkin/cmake/ 下的内容,而不是 Melodic 版本的路径。
  • 一些可能的正确路径包括:
    • /opt/ros/noetic/share/catkin/cmake/toplevel.cmake
    • /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake

3. 解决方案

  • 确保你在使用 Noetic 时,所引用的路径是基于 Noetic 的。例如,尝试查找以下路径中的 catkin 文件:
    /opt/ros/noetic/share/catkin/cmake/toplevel.cmake
    
  • 如果你之前复制了 Melodic 相关的路径到 Noetic 的工作环境中,那就需要进行更正,引用适合当前版本的配置文件。

4. 如何检查路径

如果你不确定正确的路径,可以通过以下方式检查:

  • 执行 roscd catkin 查看当前 ROS 环境中 catkin 的实际路径。
  • 执行 ls /opt/ros/noetic/share/catkin/cmake/ 查看 Noetic 中的实际 CMake 配置文件。

最后

最后就是,我改了路径

在这里插入图片描述
然后重新 编译了一下,也是能够成功的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

knighthood2001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值