本教程简单介绍ROS1的catkin包。至于为什么选择deepin而不是ROS通用的ubuntu,也仅仅是为了支持国产系统。鉴于本人水平有限,如哪位攻城狮网友发现本文存在的问题,烦请留言指正,谢谢!
catkin包组成
catkin包必须满足以下几个要求:
- 必须包含catkin兼容的package.xml文件,此xml文件提供了与此包有关的元信息
- 必须包含CMakeLists.txt
- 每个包必须有其独有的目录结构,意味着没有嵌套包,也没有多个包共享一个目录的情况
最简单的包满足如下的目录结构
my_package/
CMakeList.txt
package.xml
catkin工作区中的包
推荐使用catkin工作区的形式来管理catkin包。但是即使如此也需要独立构建catkin包。一般的catkin工作区如下所示
workspace_folder/ -- 工作区
src/ -- 代码区
CMakeLists.txt -- 顶层CMakeList.txt
package_1/
CMakeLists.txt --包1的CMakeLists.txt
package.xml --包1的xml文件
...
package_n/
CMakeLists.txt -- 包n的CMakeLists.txt
package.xml -- 包n的xml文件
继续本教程之前可按照如下教程创建一个空的catkin工作区
创建catkin包
mkdir -p ~/ros_ws/src
- 切换到工作区src目录创建包beginner_totorials包,此包依赖std_msgs,roscpp,rospy等.
命令:catkin_create_pkg [包名] [包依赖列表]
cd ~/ros_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
.
└── src
└── beginner_tutorials
├── CMakeLists.txt
├── include
│ └── beginner_tutorials
├── package.xml
└── src
catkin_create_pkg的高级功能可参考
构建ctakin工作区,并source配置脚本
现在可以构建catkin工作区中的包.构建完成后工作区中生成build,devel两个目录,其中devel目录下有后期要使用此包时需要source的脚本:devel/setup.bash
cd ~/ros_ws
catkin_make
source devel/setup.bash
包依赖
直接依赖
在使用catkin_create_pkg的时候,已经提供的std_msgs,roscpp等是间接依赖,可使用rospack depends1 工具检查这些依赖关系
rospack depends1 beginner_tutorials
roscpp
rospy
std_msgs
可以看到rospack工具所列出的依赖与我们在catkin_create_pkg时追加的依赖保持一致。另外这些依赖关系也保存在package.xml. roscd beginner_tutorials 查看package.xml
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
间接依赖
在大多数情况下包的依赖也有其自己的依赖关系,例如此beginner_tutorials包的rospy就有其自己的依赖,一个包可以有相当多的直接依赖和间接依赖。可使用rospack depends获取包的所有依赖
rospack depends beginner_tutorials
cpp_common
rostime
roscpp_traits
roscpp_serialization
catkin
genmsg
...
包的定制
此部分将查看catkin_create_pkg生成的两个文件,并逐行介绍具体内容,以及如何为您的包定制这些东西
package.xml的定制
description tag
可用一句简短的语句来描述包的具体内容
<description>The beginner_tutorials package</description>
maintainer tags
这是package.xml中较为重要的部分,用于填写此包的维护人员。维护者名字出现在标签主体中,email属性用于填写维护者的邮箱
<maintainer email="gaoy@todo.todo">gaoy</maintainer>
license tags
顾名思义,说明此包所遵循的开源协议,例如GPL,MIT等
<license>TODO</license>
dependencies tag
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
包依赖分为:
- buildtool_depend:指定用于构建此包的构建工具所需要的依赖,通常情况下构建工具是catkin,在交叉编译场景下,编译工具还依赖于具体架构
- build_depend:指定此包在构建过程中的依赖,可用于编译时包含头文件,链接库,或者在构建时需要的其他资源[尤其注意在CMake中的find_package()]
- exec_depend:包运行时的依赖文件。比如包在运行时需要依赖某个动态库
- test_depend:指定单元测试的附加依赖
有关各种依赖项的详细信息可参考
上述pacckage.xml仅仅有build_depend和exec_depend.
按照上述描述填充具体字段就可以获取一个完整的xml,有关CMakeLists.txt的修改定制会在后面给出。
构建包
一旦包相关的依赖均安装到位,即可进行包构建工作。
使用catkin_make
catkin_make是一个为catkin工作流提供了便利的命令行工具。你可以想象catkin_make在标准的cmake工作流中结合了对cmake和make的调用。
用法:
catkin_make [make_targets] [-DCMAKE_VARIABLES...]
catkin_make install [可选]
catkin_make --source my_src
catkin_make install --source my_src
catkin_make详细使用文档可参考
构建包
在工作区的顶层目录知行catkin_make即可。之后会生成如下目录:
- build:作为构建空间的默认位置,存放cmake和make过程中产生的中间文件
- devel:是编译完成后包所存放知行文件,库的地方
- install:兼容所有软件包的catkin的工作空间,包含*sh,以及相关的可执行程序。只有调用了catkin_make install会自动生成。
关联GItee
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)