使用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}")

TL;博士

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

结束TL;博士

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

ROS只是通信的抽象。如果你想在你的项目中使用来自ROS的库,那么我建议你使用build-systemcatkincatkin是将所有 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 的问题中提供详细信息。

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