1. 同一文件级下对其他package中msg文件的引用
对于同一文件级下,A功能包
引用B功能包
中的消息:
方法1: 可直接通过添加依赖的方式解决.
catkin_create_pkg std_msgs roscpp rospy b_package
然后通过以下命令编译b_package
:
catkin_make -DCATKIN_WHITELIST_PACKAGES='b_package'
在a_package
中新建*.cpp
此时便可以自动加载出msg文件所对应的头文件了
最后,全局编译整个工作空间
catkin_make -DCATKIN_WHITELIST_PACKAGES=''
方法2: 手动修改A_package文件夹中的CMakeLists.txt和package.xml文件
首先在CMakeLists.txt文件中的find_package
部分添加b_package
,需要将以下代码取消注释(删除#):
include_directories(
include
${catkin_INCLUDE_DIRS}
)
然后在package.xml文件中添加以下代码,注意需要根据实际情况按相应的格式配置,不一定如下(博主ros版本为 ros kinetic 1.12.14):
<build_depend>B_package</build_depend>
<build_export_depend>B_package</build_export_depend>
<exec_depend>B_package</exec_depend>
最后,同样需要先编译要引用文件的功能包b_package.
catkin_make -DCATKIN_WHITELIST_PACKAGES='b_package'
值得注意的是, 使用
catkin_make -DCATKIN_WHITELIST_PACKAGES='B_package'
命令对指定功能包进行编译后,下次使用 catkin_make 命令编译整个工作空间时,系统会默认为此时编译的仍然是指定的B_package功能包,因此使用完catkin_make -DCATKIN_WHITELIST_PACKAGES='B_package'
命令后必须使用catkin_make -DCATKIN_WHITELIST_PACKAGES=''
命令对工作空间进行全局编译.
注意注意: 在桌面新建的工作空间仍然无法使用此方法引用成功,必须在
/桌面
同级的/home
目录下才能成功.
2. 引用不同文件级下的package中的msg文件
如下图所示,mico_ws工作空间下,mrrobot_demo功能包想引用kinova-ros文件夹下kinova_msgs功能包中的消息,从下图可以看出,kinova-ros文件夹中有若干功能包,但是没有CMakeLists.txt和package.xml文件,所以这只是一个单纯的文件夹,而并非是元功能包(包含若干功能包的功能包),其引用方法与同一文件级下对其他package中msg文件的引用 相同.
注意: 要想最简单的编译成功,也是需要先编译要引用消息文件所在的功能包,最后编译工作空间.
方法1: 可直接通过添加依赖的方式解决.
catkin_create_pkg std_msgs roscpp rospy b_package
然后通过以下命令编译b_package
:
catkin_make -DCATKIN_WHITELIST_PACKAGES='b_package'
在a_package
中新建*.cpp
此时便可以自动加载出msg文件所对应的头文件了
最后,全局编译整个工作空间
catkin_make -DCATKIN_WHITELIST_PACKAGES=''
方法2: 手动修改A_package文件夹中的CMakeLists.txt和package.xml文件
首先在CMakeLists.txt文件中的find_package
部分添加b_package
,需要将以下代码取消注释(删除#):
include_directories(
include
${catkin_INCLUDE_DIRS}
)
然后在package.xml文件中添加以下代码,注意需要根据实际情况按相应的格式配置,不一定如下(博主ros版本为 ros kinetic 1.12.14):
<build_depend>B_package</build_depend>
<build_export_depend>B_package</build_export_depend>
<exec_depend>B_package</exec_depend>
最后,同样需要先编译要引用文件的功能包b_package.
catkin_make -DCATKIN_WHITELIST_PACKAGES='b_package'
3. 引用元功能包中某一功能包的消息文件
即功能包a_package与元功能包b_packages处于同一文件级src/下,a_package想引用b_packages中的c_package中的消息文件.
推测: 应该直接将元功能包Bs添加进依赖即可.~~~~~~
有时间测试
4. 总结
-
使用
catkin_make -DCATKIN_WHITELIST_PACKAGES='packageName'
命令对指定功能包进行编译后,下次使用 catkin_make 命令编译整个工作空间时,系统会默认为此时编译的仍然是指定的packageName功能包,因此使用完catkin_make -DCATKIN_WHITELIST_PACKAGES='B_package'
命令后必须使用catkin_make -DCATKIN_WHITELIST_PACKAGES=''
命令对工作空间进行全局编译. -
在桌面新建的工作空间仍然无法使用此方法引用成功,必须在
/桌面
同级的/home
目录下才能成功.