文章目录

  • 1 catkin Package由什么组成?
  • 2 catkin工作空间下的packages
  • 3 创建一个catkin package
  • 4 编译并且刷新setup文件
  • 5 package依赖
    • 5.1 第一依赖项
    • 5.2 间接依赖
  • 6 自定义你的package
    • 6.1 自定义packages.xml
    • 6.2 自定义CMakeLists.txt

1 catkin Package由什么组成?

如果满足下面3个条件,一个package就会被认为是catkin package

  • 包含一个符合catkin标准的package.xml文件。

    • 这个文件包含了包的主要信息。
  • 包含一个使用catkin的CMakeLists.txt文件。
    • 如果是一个metapackage,需要引用相关的CMakeLists.txt文件。
  • 每个package都有自己的独立文件夹。
    • 这意味着没有嵌套packages,也不存在多个packages共用相同目录。

一个最简单的package应该有如下的结构:

my_package/CMakeLists.txtpackage.xml

2 catkin工作空间下的packages

一个标准的工作空间应该类似:

workspace_folder/        -- 工作空间src/                   -- 存放代码的目录CMakeLists.txt       -- catkin的最顶级CMake文件package_1/CMakeLists.txt     -- package_1的CMakeLists.txtpackage.xml        -- package_1的说明文件manifest...package_n/CMakeLists.txt     -- package_n的CMakeLists.txtpackage.xml        -- package_n的说明文件manifest

3 创建一个catkin package

使用catkin_creat_pkg命令来创建一个catkin package:

# 首先创建一个工作空间
$ cd ~/catkin_ws/src

接着使用catkin_creat_pkg命令创建一个依赖于std_msgsroscpprospybeginner_tutorialspackage:

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

catkin_create_pkg命令的标准格式为:

# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

使用tree命令查看以下目录结构:

└── beginner_tutorials├── CMakeLists.txt├── include│   └── beginner_tutorials├── package.xml└── src

4 编译并且刷新setup文件

切换到catkin_ws目录,然后编译:

$ cd ~/catkin_ws
$ catkin_make

使用ls查看当前文件夹,发现多了2个文件夹:

build  devel  src

最后把这个工作空间加入到ros环境中:

$ source ~/catkin_ws/devel/setup.bash

5 package依赖

5.1 第一依赖项

在我们使用catkin_creat_pkg命令的时候,已经产生了第一依赖:

$ rospack depends1 beginner_tutorials

共有3个依赖:

roscpp
rospy
std_msgs

这些依赖被保存在package.xml文件中:

$ roscd beginner_tutorials
$ cat package.xml

发现:

<package format="2">
...<buildtool_depend>catkin</buildtool_depend><build_depend>roscpp</build_depend><build_depend>rospy</build_depend><build_depend>std_msgs</build_depend>
...
</package>

5.2 间接依赖

有些依赖包本身也依赖于其他的包,例如rospy有许多依赖:

$ rospack depends1 rospy

发现:

genpy
roscpp
rosgraph
rosgraph_msgs
roslib
std_msgs

rospack可以列出所有的嵌套依赖项目:

lk@Mibook:~$ rospack depends beginner_tutorials
cpp_common
rostime
roscpp_traits
roscpp_serialization
catkin
genmsg
genpy
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
rospy

6 自定义你的package

6.1 自定义packages.xml

删除不必要的内容:

   1 <?xml version="1.0"?>2 <package format="2">3   <name>beginner_tutorials</name>4   <version>0.1.0</version>5   <description>The beginner_tutorials package</description>6 7   <maintainer email="you@yourdomain.tld">Your Name</maintainer>8   <license>BSD</license>9   <url type="website">http://wiki.ros.org/beginner_tutorials</url>10   <author email="you@yourdomain.tld">Jane Doe</author>11 12   <buildtool_depend>catkin</buildtool_depend>13 14   <build_depend>roscpp</build_depend>15   <build_depend>rospy</build_depend>16   <build_depend>std_msgs</build_depend>17 18   <exec_depend>roscpp</exec_depend>19   <exec_depend>rospy</exec_depend>20   <exec_depend>std_msgs</exec_depend>21 22 </package>

6.2 自定义CMakeLists.txt

最初使用catkin_creat_pkgCMakeList.txt会被后面的ros代码编译给覆盖掉。

参考:http://wiki.ros.org/ROS/Tutorials/CreatingPackage

ROS学习笔记3(创建一个ROS Package)相关推荐

  1. ROS学习笔记六:理解ROS服务和参数

    ROS学习笔记六:理解ROS服务和参数 主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam. ROS service service是节点之间互相通信的另一种方式,se ...

  2. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

  3. ROS学习笔记二:探索ROS文件系统

    ROS学习笔记二:探索ROS文件系统 ROS针对自己文件的特性,具有一些自己的工具命令,当针对ROS文件进行操作的时候是非常方便的.这些命令和ubuntu系统原有的命令相似但却不同,单独针对ROS文件 ...

  4. ROS学习笔记四:理解ROS节点

    ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...

  5. ROS学习笔记1(配置ROS环境和创建工作空间)

    1 安装ros 参考我的另一篇博客Ubuntu16.04安装ROS和依赖包 如果是通过apt命令安装的package,是不能够被读写的(相当于二进制安装),如果是通过下载源代码编译的,就可以自行编辑. ...

  6. ros系统支持java_创建一个rosjava package 并测试发布和接受消息

    一.rosjava package 结构和解析 Rosjava 主要是提供了客户端(如:android)与ros系统(如:turtlebot)通信的库,主要应用于android等java平台客户端开发 ...

  7. ROS学习笔记(一)ROS基础入门 — 参考创客制造

    2016年12月8日 Thur 我是看的这土豆网的教程 http://www.tudou.com/listplay/nZHW3aBlxmw/XIovKWZJF2o.html ROS是依赖于某种空间组合 ...

  8. Ros学习笔记(一)Ros中HelloWorld实现(C++/Python)

    例程实现流程 声明:整个学习是我跟着奥特学园进行的,不是原创,只是记录自己的学习过程 1.准备事项 1)先创建一个工作空间 2)再创建一个功能包 3)编辑源文件 4)编辑配置文件 5)编译并执行 C+ ...

  9. ROS学习笔记(一)ROS系统架构

    ROS系统架构 ROS系统的架构主要被设计和划分为三部分,每一部分代表一个层级的概念: 文件系统级(The filesystem level) 计算图级(The computation graph l ...

  10. sandy引擎学习笔记: 创建一个立方体

    问题:如何利用sandy的类库去创建一个立方体呢? 首先,我们要先了解sandy类库的结构 可以看到上面就官方网放出的类库表,有一些很容易理解,像sandy.events 这个和flash.event ...

最新文章

  1. 小冰和她的兄弟姐妹们组团出道:唱歌跳舞写文章样样都会,而且都开放版权...
  2. TweetBot TabBar
  3. ARC中的三个关键字
  4. Live回顾 | 松鼠AI智适应教育首席科学家崔炜:人工智能如何变革教育产业
  5. python的输入和格式输出
  6. 应用深度学习(台大陈蕴侬李宏毅) Part1
  7. 征稿 | 计算机视觉与数据挖掘-EI会议 ICCVDM2020
  8. apache 2许可证_如何理解Apache 2专利许可
  9. C语言排序方法-----冒泡排序法
  10. app devops建设
  11. ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql
  12. Thinking in Java 9.9 接口与工厂
  13. 我的chrome插件
  14. PCM音频数据格式介绍
  15. PHP面试技巧 之 职场暗语知多少?!
  16. backdrop-filter,让你的网站熠熠生”毛’
  17. vmware“增强型虚拟键盘”键呈灰色不能修改状态
  18. 【计网】DNS解析 DDNS解决动态公网IP访问
  19. 披荆斩棘,砥砺前行,我是新手奶爸,我仍笑如少年——小康师兄的2022年度总结
  20. 没有鼠标就无法对计算机进行操作,电脑鼠标不灵敏是什么原因?怎么解决?

热门文章

  1. STM32工作笔记0075---UCOSIII任务管理(下)
  2. san分布式共享文件系统_基于SAN存储共享卷实现openstack高可用的方法与流程
  3. 流星雨_行者常至 双子座流星雨
  4. linux进程通信system v,【linux高级程序设计】(第十一章)System V进程间通信 4
  5. python pandas excel 排序_Pandas 按组汇总和列排序 - python
  6. 服务器LCD显示面板,DELL服务器2950的错误代码表(前LCD面板)
  7. python中类的参数怎么传_如何将整个类作为参数传递给另一个类的方法
  8. linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)
  9. 头信息_如何在 Spring REST Controller 中获取 HTTP 头信息
  10. MySQL三种打开方式