使用CMAKE编译时找不到ROS

时间:2019-08-16 19:20:57

标签: 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}")

1 个答案:

答案 0 :(得分:0)

TL; DR

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

END TL; DR

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

ROS仅仅是通信的抽象。如果要在项目中使用ROS中的库,则建议您使用构建系统catkincatkinlinks together的所有ROS软件包,因此您可以在CMake文件中使用它们。

我建议您关注this link,那里有人显示其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的正确方法还有很长的路要走,因此我不确定要如何提供更多帮助,因为您没有就为何首先要使用ROS的问题提供详细信息。 / p>

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