如何将一个cpp文件放入到已有ROS工作空间中编译通过以及如何调用第三方库

如何将一个cpp文件放入到已有ROS工作空间中编译通过以及如何调用第三方库

1.创建一个新的功能包

catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

2.helloworld

在src中添加你的cpp文件,并放开cmakelist.txt里关于add_executable()和target_link_libraries()的注释,修改名字为你的cpp文件名(add_executable里后缀为,cpp的那一项)和你想起的可执行文件的名字(可执行文件名字可以默认,前后保持一致)。此时cpp文件里是helloworld,那么已经可以编译运行了。

3.添加头文件依赖

但是一般cpp文件里一定会有很多的#include,最基本的是“#include “ros/ros.h” ”,以及一些数据结构,这些一般在opt-ros-noetic-include里面都能找到,因为在之前你的电脑执行过

sudo apt-get install ros-noetic-xxx

所以这些不用额外操作配置。不幸的是,会有很多的include并没有官方的ros版本的元功能包,或者ros包内容不全,有些函数没有。这时候我们一般会在github上下载完整源码并按照指引在本地编译。此时你的电脑已经安装上了相应的软件包。如果你是使用VScode编写代码,只需要在c_cpp_properyies.json里的inludepath添加你make完成后给你提示出的路径头,VScode就不会显示预编译出错(红色波浪线)了。

sudo make install

如何将一个cpp文件放入到已有ROS工作空间中编译通过以及如何调用第三方库_第1张图片

"/usr/local/include/ompl-1.6"

但是要如何在cmakelist.txt中添加相应的调用路径呢???
在cmakelist.txt中:find_package负责找依赖路径,catkin_package负责声明编译构建时的依赖信息,如果其他功能包使用本功能包的话,当中会包含我们在本功能包声明的include路径和库,对于DEPENDS依赖项,会将DEPENDS的头文件路径和库添加到本功能包下的include路径和库。
catkin_package有五个可选参数:

INCLUDE_DIRS - 包的导出包含路径

LIBRARIES - 从项目中导出的库

CATKIN_DEPENDS - 本项目依赖的其他catkin项目

DEPENDS - 此项目所依赖的非 catkin CMake 项目。

CFG_EXTRAS - 额外的配置选项

所以对于非ROS的包总结来讲,以ompl为例(虽然这个有ros的包,但听说不全,我就弄了个源码),需要写四行:

find_package(ompl REQUIRED)
catkin_package(
 INCLUDE_DIRS include
 CATKIN_DEPENDS roscpp rospy std_msgs
 DEPENDS ompl
)
include_directories(
  include
  ${catkin_INCLUDE_DIRS}
  ${OMPL_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
  ${OMPL_LIBRARIES}
)

因为不是catkin的成分,所以在package.xml里不需要再额外写标签。
一般各个include都是套娃的,只需要把需要的所有包都添加到依赖即可。

最后,不要使用fcl碰撞检测库,好久没更新了,我反正是弄到爆炸也没成功!

你可能感兴趣的:(vscode)