在CATake的外部catkin工作场所中使用ROS自定义消息

问题描述 投票:0回答:1

问题:在catkin工作场所之外的CMakeLists.txt中,将生成的ros消息/服务包括在代码中的最佳实践是什么?

上下文:因此,在我现在开始从事的当前项目中,构建系统基于CMake,但是some的代码/可执行文件使用ROS。我决定遵循相同的模式,并在ROS catkin工作场所之外创建大多数可执行文件。现在由于某些新要求,我需要创建自己的ROS消息/服务,并将其作为软件包添加到catkin工作场所中,并使用catkin_make生成它们。目录树如下

root
|-CMakeLists.txt
|-src
|-|--myExecutable.cpp
|-catkin_ws
|--|--src
|--|--|--myPackage
|--|--|---|--srv
|--|--|---|--msg
|--|--|---|--package.xml
|--|--|---|--CMakeLists.txt
|-otherLibraries
|--|--CMakeLists.txt

现在,对于我自己的用途,我只需运行catkin_make一次即可生成msg / srv的头文件,并使用顶部CMakeLists.txt生成用于构建项目的source catkin_ws/devel/setup.bash(实际上已添加到~/.bashrc中)。在顶部CMakeLists.txt中,我有find_package(myPackage),这对于我的用法来说很好用,myExecutable.cpp使用myPackage中定义的消息/服务以及其他人在otherLibraries中创建的库,它们可以编译并运行正常。

现在使用Visual Studio Code的项目的另一个成员抱怨find_package(myPackage)在他的IDE CMake工具上出错。我知道这是由于source catkin_ws/devel/setup.bash未在IDE上运行引起的。

我的CMake知识充其量只是拼凑而成的,但是我知道项目中的人们更喜欢Modern CMake,但我不确定解决此问题的最佳实践是什么。 (我应该在顶部CMakeLists.txt中运行setup.bash脚本吗?是否应该使用set()手动添加生成的标头/库的位置?)

visual-studio-code cmake ros build-system
1个回答
0
投票

我有一个类似的案例,其中我使用了一些独立于ROS的C ++库,然后我需要使用ROS。

我最终要做的是在catkin_ws中为我的软件创建一个catkin程序包,并为非ROS需求更改CMakeLists.txt。这样,我使用catkin_make来构建整个项目,包括ROS相关的内容和非ROS相关的内容。

然后,您可以让您的IDE知道要看的位置,它应该拾取所有内容。就个人而言,我在CLion IDE中打开了柳絮包,CLion提取了所有东西。我能够轻松地在同一个IDE中进行构建,编译,运行和调试,这确实是满足我的需求的绝佳设置(桥接ROS和非ROS代码,带有调试工具的全功能IDE!)。

锦上添花的是,我在奇点容器中完成了以上所有操作。将所有这些都放在单个奇异容器中是非常[[portable和shareable。您可以使用/共享奇点配方甚至是预先构建的奇点图像,任何人都可以在其计算机上使用它,并具有与您完全相同的配置!

© www.soinside.com 2019 - 2024. All rights reserved.