如何确定ROS包的依赖

2023-05-16

摘自:https://blog.csdn.net/q71018188/article/details/88172380

如何确定ROS包的依赖

 

七小丘人 2019-03-05 14:19:48 1687 收藏 8

分类专栏: ROS 16-04

版权

初学ROS遇到的大部分问题,到最后都是简单的多加了依赖,少加了依赖,这可能会导致编译不通过,也可能编译通过但是会有核心转储的错,光看程序完全看不出来问题,浪费了很多时间。所以我打算细致地整理一下。

https://answers.ros.org/question/316431/how-to-make-another-package-node-get-boundingbox-msgs-frome-darknet_ros/

https://answers.ros.org/question/317363/segmentation-fault-core-dumped-while-converting-sensor_msgs-to-cvimage/?answer=317488#post-id-317488

参考:

http://docs.ros.org/indigo/api/catkin/html/howto/format2/system_library_dependencies.html
http://wiki.ros.org/catkin/CMakeLists.txt

功能包的依赖部分涉及到cmakelist.txt和package.xml两个文件。两个文件分别要对依赖进行声明
cmakelist.txt一般为这样:

cmake_minimum_required(VERSION 2.8.3)
project(cv_bridge_tutorial_pkg)

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
  roscpp
  sensor_msgs
  std_msgs
  )

find_package( OpenCV REQUIRED )

catkin_package()
include_directories(
  ${catkin_INCLUDE_DIRS}
  ${OpenCV_INCLUDE_DIRS}
)

add_executable(sample_cv_bridge_node src/sample_cv_bridge_node.cpp)
 target_link_libraries(sample_cv_bridge_node
   ${catkin_LIBRARIES}
   ${OpenCV_LIBRARIES}
 )

include_directories(${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})

一般来讲在IDE配置库主要是两个部分,一个是动态链接库,一个是头文件包含。ROS也是这样。

链接库:
find_package()的作用是让cmake找到依赖的库,像boost,opencv这种普遍在用的库,已经提供了CMake模块,运行时不需要单独的共享库,只需要写成 find_package( OpenCV REQUIRED )、find_package(Boost REQUIRED)就可以了。但是有些功能就需要单独的库,比如boot线程实现以及大部分功能包依赖,写成find_package(Boost REQUIRED COMPONENTS thread)。 如果没有Cmake模块可用,但是库的开发包提供了pkg-config文件。写成find_package(PkgConfig REQUIRED)
pkg_check_modules(GSTREAMER REQUIRED libgstreamer-0.10)

头文件包含:
include_directories(include ${Boost_INCLUDE_DIRS} ${GSTREAMER_INCLUDE_DIRS})

导出接口:
catkin_package(0 这里需要和package.xml的<build_export_depend> 或 一致
传递

传递兼容的CMake变量:find_package(boost…)、 catkin_package(DEPENDS Boost)
内部使用, 没有生成兼容的CMake变量,不在暴露的头文件中 find_package(PythonLibs…) ${PYTHON_INCLUDE_PATH}

一般而言的第三方功能包 只需要依赖其消息文件即可 依赖主体节点会有很大的问题。

package.xml

<?xml version="1.0"?>
<package format="2">
  <name>cood_tran</name>
  <version>0.0.0</version>
  <description>The cood_tran package</description>


  <maintainer email="qiuyilin@todo.todo">qiuyilin</maintainer>



  <license>TODO</license>


  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>darknet_ros_msgs</build_depend>
  <build_depend>sensor_msgs</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>cv_bridge</build_depend>
  <build_depend>image_transport</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_export_depend>darknet_ros_msgs</build_export_depend>
  <build_export_depend>sensor_msgs</build_export_depend>
  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>cv_bridge</build_export_depend>
  <build_export_depend>image_transport</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <exec_depend>darknet_ros_msgs</exec_depend>
  <exec_depend>sensor_msgs</exec_depend>
  <exec_depend>roscpp</exec_depend>
  <exec_depend>cv_bridge</exec_depend>
  <exec_depend>image_transport</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->

  </export>
</package>
<build_depend>
构建程序所需要的依赖
<build_export_depend>
其他程序需要build_depend的功能包

<exec_depend>

用于 shared libraries, executables, Python modules, launch scripts and other files required for running your package

不推荐使用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定ROS包的依赖 的相关文章

随机推荐