首页 > 解决方案 > 使用CMAKE编译时找不到ROS

问题描述

我正在使用一个连接到ROS的软件,当我通过Cmake编译包时,我遇到错误“找不到ROS包”

我已将 ROS 目录添加到“CMAKE_PREFIX_PATH”,但失败了。而且我检查了ROS包,我找不到相关文件。

错误:

CMake Error at applications/plugins/SoftRobots/CMakeLists.txt:190
(find_package):
By not providing "FindROS.cmake" in CMAKE_MODULE_PATH this project 
has asked CMake to find a package configuration file provided by "ROS", 
but CMake did not find one.

Could not find a package configuration file provided by "ROS" with any of
the following names:

ROSConfig.cmake
ros-config.cmake

Add the installation prefix of "ROS" to CMAKE_PREFIX_PATH or set "ROS_DIR"
to a directory containing one of the above files.  If "ROS" provides a
separate development package or SDK, be sure it has been installed.

Cmake.list

find_package(ROS QUIET REQUIRED)
message(STATUS "ROS found: ${ROS_FOUND}")

标签: cmakeros

解决方案


TL;博士

ROS 不是一个单独的包,它是一个包的集合。ROS 只是一个与主要 aptitude 包关联的名称ros-${ROS_DISTRO}-desktop-full,与 CMake 无关。

结束 TL;DR

通常,有人将他们的代码转换为 ROS,以便他们可以访问具有预建消息类型和库的网络通信的内置功能,以访问具有硬件的传感器(尽管您不需要机器人硬件来使用 ROS)。

ROS 只是通信的抽象。如果你想在你的项目中使用 ROS 的库,那么我建议你使用 build-sytem catkincatkin是将所有 ROS 包链接在一起,以便您可以在 CMake 文件中使用它们。

我建议您点击此链接,其中有人显示他们的 CMakeLists.txt 文件。您需要了解的重要部分是:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  genmsg
  message_generation
  depend_1
  depend_2
)


catkin_package(
   INCLUDE_DIRS include
   LIBRARIES ${PROJECT_NAME}
   CATKIN_DEPENDS
   DEPENDS system_lib

)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

然后到最后,在你定义了你的可执行文件之后,

target_link_libraries(run_${PROJECT_NAME}
    ${PROJECT_NAME}
    ${catkin_LIBRARIES}
)

我应该注意,我没有测试任何这个 CMake 进行验证。这里的重点是说明如何从 ROS 生态系统中获取您想要的包。一旦你有正确的 CMake,你可以简单地#include正确的头文件。发生的事情是 CMake 正在“调用”catkin找到所需的软件包(有关更多详细信息,请参阅上面的链接)。听起来,鉴于您正在尝试“导入 ROS”,您对 ROS 的经验不足(没关系,我也是新手),而且这不是一个 ROS 包,而是一个单独的包可以使用 ROS 生态系统中提供的库进行简化的项目。不过我不得不说,由于您离包含 ROS 的正确方法还有很长的路要走,所以我不完全确定还有什么可以帮助的,因为您没有在为什么首先需要 ROS 的问题中提供详细信息。

(如果这回答了您的问题,则绿色复选标记是友好的 :)


推荐阅读