3-catkin包介绍与构建

本教程简单介绍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...]
# 如果 [make_targets]为空,会构建工作区src目录下的所有包
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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值