3-catkin包介绍与构建

2023-05-16

本教程简单介绍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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3-catkin包介绍与构建 的相关文章

  • socks5代理怎么用?如何使用?

    SOCKS5代理不会重写数据包的标头 xff0c 并结合了TCP和UDP协议 Sock5代理服务器是把你的网络数据请求通过一条连接你和代理服务器之间的通道 xff0c 由服务器转发到目的地 Proxifier是一款功能非常强大的socks5
  • Python代理ip代码示例

    隧道代理和其他代理ip也有共同点优势比路由器更容易配置 xff0c 可以在工作过程中生成各种记录 xff0c 工作在应用层 xff0c 可以对各种数据进行检查 xff0c 按照一定的准则 xff0c 生成各种日志 记录 除此之外 xff0c
  • python 爬虫SSL错误是怎么回事?

    今天摸鱼 xff08 划掉 xff09 看道一个问题蛮有意思的 xff0c 想来展开说说 xff1a 别急 xff0c 解决办法是有的 1 这个错误很可能是因为你正在尝试读取一个 JSON 格式的响应 xff0c 但是实际返回的却是 HTM
  • python写的爬虫,抓取百度的搜索结果,被屏蔽了怎么办?

    某乎上有个热门话题 xff0c 引起了很大的讨论 这个问题通常是由于频繁的请求导致百度的反爬虫机制触发了验证码的保护机制 解决办法无非是那几套流程走一遍 1 增加请求的时间间隔 通过在每个请求之间增加一些时间间隔 xff0c 可以降低请求频
  • HTTP代理挑选最强攻略

    最近上班合理上网的时候 xff0c 在某乎上刷到一个话题 xff0c 本来这个话题我也经常刷到没打算看 xff0c 本着看新动态的心思 xff0c 点进来一看 xff0c 好家伙 xff0c 这话题底下除了各大HTTP代理服务商 xff0c
  • 电设飞控从零学起(一) 基础篇 无人机硬件与结构设计简介

    1 常见无人机的分类 xff08 1 xff09 固定翼 xff1a 续航时间长 xff0c 载荷最大 xff0c 但必须助跑 滑行 xff08 2 xff09 直升机 xff1a 可垂直起降 xff0c 但机械结构复杂 维护成本高 xff
  • ROS编程 csv文件读取/输出 与 YAML文件生成

    前言 代码是抄的 感想是真的 cpp的文件操作对比起python来说是比较繁复的 而每次学习cpp的时候都会去刻意留文件操作的教程 其实直接做一次实验就可以理解了 下面的代码是抄回来 xff0c 分别是做手眼标定与力传感器标定过程中需要将采
  • Android 引入FFmpeg 读取RTSP流 解封装获取H264原始数据

    之前 写了Android中怎么引入FFMmpeg的例子 本编文章将会写一个简单的demo实现ffmpeg拉去rtsp流并在界面中打印前五个字节 懒得往下细看的可以点击这里下载工程 基于andorid studio 实际效果下图 xff1a
  • 单片机: 自定义串口通信协议的实现

    使用51单片机完成一个简单的串口通信协议 要求 xff1a 一个协议帧为8个字节 xff0c 其中头部两个字节 xff0c 分别是0xFF 0xFE 第3个字节代表第一个数据 xff0c 第4个字节代表第二个数据 xff08 均为正数 xf
  • ThreeJS和BabylonJS对比

    Threejs从2009年就问世了 xff0c 当时还是基于ActionScript的 xff0c 后来换成了JavaScript Babylon是2013年微软出品的 xff0c 有一部分代码基于TS写的 xff0c 即TypeScrip
  • dojo是什么?

    现在Web端vue React Angular大行其道 xff0c 安卓端js也有React Native等 xff0c 那么学习dojo有什么意义呢 xff1f 有些老的项目还是用的dojo 例如arcgis javascript api
  • threejs导入json模型

    其实现在的json模型有两种格式 一个是Geometry类型 xff0c 需要JSONLoader加载 xff1b 一个是Object类型 xff0c 需要ObjectLoader加载 1 Geometry var js loader 61
  • three.js的x,y,z坐标轴

    three js中坐标系使用的是左手坐标系还是右手坐标系 xff1f 无论是左手坐标系 xff0c 还是右手坐标系 xff0c x和y轴方向是不变的 改变的只是z轴的方向 threejs和gis中的三维世界坐标系的联系 xff1a gis中
  • 云计算和GIS如何结合?

    GIS的发展离不开计算机技术的发展 每一次GIS的变革 xff0c 背后都是由于计算机技术的进步引起的 而这一次GIS的大变革 xff0c 背后正是云计算技术的愈加成熟 你是否有过这样的经历 xff0c GIS数据量太大 xff0c 加载太
  • Meson安装

    Meson出现的原因 xff1a C 43 43 需要一个仓库管理系统 xff0c 用于管理依赖包 类似于Java里的Maven Maven可以做什么呢 xff1f Maven是Java的项目构建工具 43 仓库管理工具 由此需求下 xff
  • 微服务和云服务的关系

    今天 xff0c 突然想到微服务和云服务 xff08 分布式 xff0c 云计算 xff09 的关系 因为 xff0c 微服务的特点是松耦合 xff0c 而这不就是云计算的基础吗 xff1f 云计算的特点是分布式和集群 xff0c 而要实现
  • 一种简单的GIS云服务提供方案

    如果说云原生的GIS服务比较困难的话 要把GIS拆成一个个微服务 那么提出一种简单的云部署方案就是有必要的了 那就是 xff0c 采用容器化技术将GIS服务器部署到N个小型电脑上 然后采用一个类似于springcloud的中间件进行接受请求
  • Idea-android-osmdroid:the project uses gradle 2.14.1 which is incompatible with java 9 or newer

    方法一 xff1a 工具使用 IDEA 2019默认使用Java11导入gradle工程问题https blog csdn net jiajane article details 103014036 方法二 xff1a 点击open gra
  • Android 使用FFmpeg拉取RTSP流 用RTMP推流到RTMP服务器

    之前写了 如何在Android中使用ffmpeg 以及如何使用ffmpeg拉取RTSP流 业务场景大概是这样 拉取RTSP流之后 解码 送给AI分析 分析完之后 在进行绘制结果 然后编码 编码完之后 进行RTMP推流 AI 解码 是别的同时
  • GeoServer扩展之REST

    https docs geoserver org latest en developer programming guide rest services index html 这个服务扩展似乎过时了 不知道是不是这样 geoserver 2

随机推荐

  • python pyd文件是 - mapnik.pyd

  • leaflet加载postgis发布的矢量切片数据

    之前写过使用mapbox加载矢量切片 xff1a https www cnblogs com 2008nmj p 15069842 html 那么leaflet怎么加载python 43 postgis发布的矢量切片服务呢 xff1f 矢量
  • opencv安装make时报错: 没有指明目标并且找不到makefile

    在利用安装包进行opencv安装时 xff0c 当按照指令安装好依赖 xff0c 进行下载opencv文件夹下 xff0c 建立build文件夹并进入其文件夹后 xff0c 利用CMAKE进行编译 xff0c 但是编译成功之后 xff0c
  • 在Ubuntu中安装Chrome浏览器

    Chrome 简介 Google Chrome是由Google开发的一款设计简单 高效的Web浏览工具 Google Chrome的特点是简洁 快速 GoogleChrome支持多标签浏览 xff0c 每个标签页面都在独立的 沙箱 内运行
  • STM32H747 / STM32H745 简单测试

    目录 1 简介 2 datasheet关键点介绍 2 1 PWR 3 资料说明 4 例程运行 4 1 选择CM7作为项目工程对象 xff0c 并编译下载程序 4 2 同理编译CM4项目对象 4 3 编译结果说明 参考链接 1 简介 STM3
  • NUCLEO STM32H743购买和使用说明

    摘要 STM32H743的NUCLEO板子有两种 xff0c 对应不同的PCB电路 xff0c 使用方式也有所不同 本文将对这两款评估板进行比较 xff0c 并给出参考资料和选择建议 两款板子的资料可以在ST官网上下 xff0c 分别是MB
  • 关于硬盘数据恢复的一些思考

    我平时会将数据保存在两台电脑和两个移动硬盘上 xff0c 但由于假期回家 xff0c IDE软件用起来容易崩 xff0c 于是决定重装下系统 xff0c 但发现USB启动盘找不到了 xff0c 便将移动硬盘隔分了小的个新逻辑卷 xff0c
  • Simulink中的Simscape

    Simscape是在Simulink环境下创建物理系统模型的工具和语言 8 它可以通过基于Matlab语法的Simscape语法来制作自己的物理仿真系统 如果使用Simscape中现有的基础库 xff08 Foundation Librar
  • Matlab电路仿真

    电路仿真的工具有很多 xff0c 比如专业点的Pspice 本科时学习时经常使用 但问题是 xff0c 即使电信专业以后真的从事硬件设计的也寥寥无几 而为了进行简单的仿真还要多装个软件 xff0c 我能接收 xff0c 我的老电脑也接收不了
  • RK1126 平台环境搭建以及入坑指南(不不 应该是入门指南)

    手上有个RK1126的板子 如下图 采用的是底板 43 核心板 xff0c 摄像头是OS04a10 简单做个记录 相比与海思的sdk 和example RK1126 的sdk 和example 功能更丰富一些 基本的rtsp 什么的 都已经
  • 关于JSP开发中jsp页面调用DAO返回的ResultSet为空值完美解决方案

    不多说 问题蛮简单 直接上代码 关于ResultSet为空值的原因经我查阅资料 应该是因为在JSP页面的时候conn已经被释放掉了 因此对应的resultset也过期了 所以不能用 解决方案就是重新开辟一块内存存储它 用链表 关键代码 Li
  • 关系模式的基本概念

    为了更好地存储数据 xff0c 需要将现实世界的事物及其关系进行层层抽象 xff0c 从而得到数据模型 使用关系数据模型的数据库系统是现在的主流数据库系统 数据模型是数据库的框架 xff0c 该框架描述了数据及其联系的组织方式 表达方式和存
  • 惯性器件分析—— ICM-42688-P

    2019年年底新推出的一款很赞的IMU 陀螺特性 加计特性 相关链接 官网DataSheet xff1a https invensense tdk com download pdf icm 42688 p datasheet 两家IMU对比
  • vim学习导航

    vim学习曲线陡峭 xff0c 其实和开始学习键盘打字和双拼打字的过程差不多 以前练习打字是因为小学电脑课没游戏玩 xff0c 只能玩金山打字的 警察抓小偷 xff1b 学习双拼主要动力是为了打字手手不酸 xff0c 能尽量跟上思维速度 而
  • word论文格式调整

    目录 注意事项 论文框架搭建 论文分块 页边距 页眉 页脚 样式 默认样式 正文 标题 参考文献 致谢 目录 图表 参考文献 公式 最后 注意事项 1 使用同一个word版本编辑 xff0c 避免格式不兼容 本文可能不适用于WPS 本文用o
  • 符号编码与乱码问题

    目标 xff1a 解释符号与编码 xff0c 分析乱码问题 xff0c 于是就能明明白白地处理大多数符号乱码问题了 符号与编码 以C 43 43 为例 xff0c 符号A的 十进制 编码为65 即 39 A 39 为65 其中 xff0c
  • PWM变模拟信号(积分电路 )

    就是简单的积分电路 频率不变 xff0c 积分后的电平相当于把高电平的电压和对应的时间的面积 xff0c 平均到一个周期里 基本上占空比是50 xff0c 转换的电压 xff0c 就是最高电压的50 xff0c 占空比30 xff0c 模拟
  • 如何生成汇编代码文件

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • Ardupilot SITL——arducopter 操作步骤

    打开cygwin输入 cd ardupilot ArduCopter Tools autotest sim vehicle py map console xff08 默认master下版本arducopter xff0c 默认模拟 四轴 x
  • 3-catkin包介绍与构建

    本教程简单介绍ROS1的catkin包 至于为什么选择deepin而不是ROS通用的ubuntu 也仅仅是为了支持国产系统 鉴于本人水平有限 xff0c 如哪位攻城狮网友发现本文存在的问题 xff0c 烦请留言指正 xff0c 谢谢 cat