创建一个ROS package(rawmeat:wiki.ros.org/ROS/Tutorials/CreatingPackage)

描述:这个教程包含使用roscreate-pkg 或 catkin来创造一个新的package,使用rospack来列举package的依赖文件。
教程等级:初学者
下一个教程:构造一个ROS package

(只介绍catkin)

内容:

  1. 什么组成了一个catkin package?
  2. catkin workspace中的packages
  3. 创建一个catkin package
  4. 建立一个catkin workspacce与source setup file
  5. package的依赖关系
    1. 第一阶依赖关系
    2. 间接的依赖关系
  6. 定制你的package
    1. 定制package.xml

      1. 描述tag
      2. 维护tag
      3. 许可证tag
      4. 依赖关系tag
      5. 最终的package.xml
    2. 定制CMakeList.txt

1.什么组成了一个catkin package?

一个package如果要被称为Catkin package,需要满足以下几个条件:

  • package包含一个catkin compliant package.xml文件。

    • catkin compliant package.xml 提供了package的元信息。
  • package必须包含一个CMakeLists.txt which uses catkin。
    • 如果它是一个catkin metapackage,那么必须有相关的样板CMakeLists.txt文件
  • 每个package都有自己的文件夹,

    • 这意味着没有嵌套的packages或者多个packages分享同个路径

    最简单的可能的package可能有如下结构:

    my_package/
     CMakeLists.txt
     package.xml

2.catkin workspace中的packages

推荐的使用catkin packages是使用catkin workspace,但是也可以单独使用catkin packages。一个普通的workspace可能如下所示:

workspace_folder/      – WORKSPACE
 src/            – SOURCE SPACE
  CMakeLists.txt      – ‘Toplevel’ CMake file, provided by catkin
   package_1/
    CMakeLists.txt     – CMakeLists.txt file for package_1
    package.xml     – Package manifest for package_1
   …
  package_n/
   CMakeLists.txt     – CMakeLists.txt file for package_n
   package.xml      – Package manifest for package_n

在继续这个教程之前,根据教程 Creating a workspace for catkin(http://wiki.ros.org/catkin/Tutorials/create_a_workspace) 先创建一个空的catkin workspace。

3.创建一个catkin package

这个教程展示如何使用[catkin_create_pkg] script(http://wiki.ros.org/catkin/commands/catkin_create_pkg)来创建新的catkin package ,以及创建之后可以做什么。

首先改变你在(http://wiki.ros.org/catkin/Tutorials/create_a_workspace)教程中之前创建的catkin workspace的 source space目录:

# You should have created this in the Creating a Workspace Tutorial
$ cd ~/catkin_ws/src

现在使用catkin_creat_pkg script来创建新的package,名叫“beginner_tutuorials”,依赖于std_msgs, roscpp, and rospy:

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

这将会创建一个beginner_tutorials文件夹,包括一个[package.xml] (http://wiki.ros.org/catkin/package.xml)和一个 CMakeLists.txt,这些的部分被你在catkin_creat_pkg给出的信息填满。

catkin_creat_pkg要求你给它一个package_name和有选择地,这个package所依赖的清单:

# This is an example, do not try to run this
# catkin_create_pkg [depend1] [depend2] [depend3]

catkin_creat_pkg也有更多先进的功能,在catkin/commands/catkin_create_pkg

4.建立一个catkin workspacce与source setup文件

现在你需要在catkin workspace中建立package:

$ cd ~/catkin_ws
$ catkin_make

在workspace被创建之后,它已经在devel的子文件夹中创建了相似的结构,正如你在/opt/ros/$ROSDISTRO_NAME下面经常找到的。

为了将workspace增加到你的ROS环境中,你需要source产生的setup文件:

$ . ~/catkin_ws/devel/setup.bash

5.package的依赖关系

5.1第一阶依赖关系

之前使用catkin_creat_pkg的时候,提供了一些package的依赖关系。这些第一阶级的依赖关系现在可以被rospack 查看

$ rospack depends1 beginner_tutorials
  roscpp
  rospy
  std_msgs

正如所示,rospack列举了相同的依赖关系,和运行catkin_create_pkg时的一样,这些依赖关系被储存在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间接的依赖关系

许多情况,一个依赖关系也有自己的依赖关系。比如说,rosp有其他的依赖关系

$ rospack depends1 rospy
  genpy
  roscpp
  rosgraph
  rosgraph_msgs
  roslib
  std_msgs

一个package可以有许多间接依赖,幸运的是rospack可以递归地确定所有嵌套依赖关系。

$ 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

这部分教程会研究catkin_create_pkg创建的每个文件,以及一行行地描述这些文件的成分,还有你怎样为你的package而定制他们。

6.1定制package.xml

生成的package.xml应该在你的新package中。现在熟悉新的(package.xml)[http://wiki.ros.org/catkin/package.xml]以及接触需要你注意的元素。

6.1.1 描述tag

首先升级描述tag:

5   < description >The beginner_tutorials package< /description >

改变这个描述至任何你喜欢的,但是按照惯例第一句话应该短,同时覆盖了package的范围。如果在一句话中描述这个package很困难,就需要拆分。

6.1.2维护tag

接下来是维护者tag:

7    < !– One maintainer tag required, multiple allowed, one person per tag –>
8    < !– Example: –>
9    < !– < maintainer email=”jane.doe@example.com”>Jane Doe< /maintainer> –>
10    < maintainer email=”user@todo.todo”>user< /maintainer >

对于package.xml这是一个必须的,重要的tag因为它让其他人知道谁来联系这个package。至少一个维护者是需要的,但是你可以有许多,如果你喜欢。维护者的名字在tag的体内,但是这儿也有一个email属性应该被填写:

7    < maintainer email=”you@yourdomain.tld”>Your Name< /maintainer>

6.1.3许可证tag

接下来是许可证tag,也是必须的:

12   < !– One license tag required, multiple allowed, one license per tag –>
13   < !– Commonly used license strings: –>
14   < !– BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 –>
15   < license>TODO< /license>

你应该选择一个许可证,填写好。有些常见的开源许可证是BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, and LGPLv3。你可以在Open Source Initiative阅读几个。对于这个教程,我们将会使用BCD许可,因为剩余的ROS核心成分已经使用过它了。

8   < license>BSD< /license>

6.1.4依赖关系tag

接下来的tag描述了package的依赖关系。依赖关系被分在build_depend, buildtool_depend, exec_depend, test_depend。对于这些tag的更清楚的解释,请见文件Catkin Dependencies。既然我们已经把std_msgs, roscpp,和 rospy作为论证传递给了catkin_create_pkg,依赖关系将会如下所示:

27 < !– The *_depend tags are used to specify dependencies –>
28 < !– Dependencies can be catkin packages or system dependencies –>
29 < !– Examples: –>
30 < !– Use build_depend for packages you need at compile time: –>
31 < !– genmsg< /build_depend> –>
32 < !– Use buildtool_depend for build tool packages: –>
33 < !– catkin< /buildtool_depend> –>
34 < !– Use exec_depend for packages you need at runtime: –>
35 < !– python-yaml< /exec_depend> –>
36 < !– Use test_depend for packages you need only for testing: –>
37 < !– gtest< /test_depend> –>
38 < buildtool_depend>catkin< /buildtool_depend>
39 < build_depend>roscpp< /build_depend>
40 < build_depend>rospy< /build_depend>
41 < build_depend>std_msgs< /build_depend>

我们所有列举的依赖文件已经被作为一个build_depend添加给我们,除了catkin中默认的buildtool_depend。这种情况下,我们想让我们的依赖文件在构建和运行的时候可用,所以我们将为他们的每一个添加一个exec_depend tag :

12 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>

6.1.5 最终的package.xml

正如你所见最终的package.xml,不含评论与没有使用的tags,简洁多了:

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定制CMakeList.txt

既然package.xml,包含了元信息,已经为你的package量身定做了,你将会继续进行教程。由catkin_create_pkg创造的CMakeList.txt文件将会在下文有关ROS代码的内容介绍。

现在你已经创造了一个新的ROS package,现在构建我们的ROS package。

3.创建一个ROS package相关推荐

  1. ROS学习笔记3(创建一个ROS Package)

    文章目录 1 catkin Package由什么组成? 2 catkin工作空间下的packages 3 创建一个catkin package 4 编译并且刷新setup文件 5 package依赖 ...

  2. ROS学习笔记10(创建一个ROS消息和服务)

    这篇教程主要介绍怎样创建和编译一个msg消息和srv服务文件,同时介绍rosmsg,rossrv,roscp等命令工具. 文章目录 1 msg和srv文件长什么样 2 msg使用 2.1 创建一个ms ...

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

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

  4. ROS学习-创建一个ROS msg和一个srv

    目录 ROS msg和srv的介绍 使用msg 创建一个msg 使用rosmsg命令 使用srv 创建一个srv 使用rossrv命令 msg和srv的通用步骤 使用Help 简要总结回顾 ROS m ...

  5. ROS学习笔记4(编译一个ROS Package)

    文章目录 1 准备工作 2 使用catkin_make 3 编译一个package 1 准备工作 在所有的系统依赖项都安装好之后,就可以编译一个新的package了. 注意:如果是使用apt方式安装的 ...

  6. ROS(Robot Operating System)笔记 : 2.创建并配置package

    ROS(Robot Operating System)笔记 : 2.创建一个ROS包并设置其依赖 1.首先来到ros的工作目录下,接着使用 catkin_make + [包名称] + [依赖1] + ...

  7. 如何在IDEA中创建一个项目

    首先双击IDEAjava运行环境(也就是双击程序啦!). 点击Create New Project,开始创建一个新的项目! 然后点击下一步!(next) 然后作为小白,不需要勾选下面选项,接着下一步即 ...

  8. 创建一个简单的flask项目步骤

    创建一个flask项目目录(结构配置,SQLAlchemy,邮件,消息闪现等) 展示一下当前的目录结果 |-feng7309 # 项目文件夹 |--|apps # 统一管理所有的蓝图信息 |--|-- ...

  9. Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型

    Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型 Building a Visual Robot Model with URDF from Scratc ...

最新文章

  1. 网络流最大流 Dinic算法模板
  2. W7程序计算机面板介绍,win7系统隐藏任意程序运行界面的详细步骤
  3. vim上次和下次光标位置
  4. 【noiOJ】P1996
  5. 2016年Android主流技术
  6. fir.im Weekly - 2017 年必须了解的 iOS 开源库
  7. windows下hadoop的单机伪分布式部署(3)
  8. android 联系人批量插入,GitHub - Atinerlengs/InsertDemo: android 简单的批量插入通话记录、联系人、短信demo...
  9. android 脚本引擎,GitHub - PassByYou888/zExpression: 脚本与编译器内部的语法引擎内核,也是一种op内核,zExpression可以轻松实现自己的脚本引擎...
  10. 【LeetCode笔记】394. 字符串解码(Java、递归、栈)
  11. linux系统冒号模式map怎么用,shell中冒号 : 用途说明
  12. 2021 年各家大厂的 AI Lab 现状如何?
  13. 诺基亚7P可刷华为鸿蒙系统,今日热闻 | 鸿蒙OS 2.0发布、EMUI 11发布、iPhone 12或配备7P镜头...
  14. 白板推导系列Pytorch实现-感知机算法
  15. springboot+1、图片上传到本地路径信息保存在数据库2、根据id删除本地图片
  16. 信息安全软考——第四章 网络安全体系与网络安全模型 知识点记录
  17. 基于java实现的一个电话号码程序,3位,5位,7位,8位,11位
  18. CSS实现多余文本隐藏
  19. mysql查出繁体文字_Mysql获取数据出现繁体显示为乱码的问题
  20. 《文明六:Sid Meier's Civilization VI 》的介绍

热门文章

  1. linux qt 添加托盘图标,Qt 添加程序图标和系统托盘图标
  2. strang thought
  3. PHP的学习笔记 (php的基础语法)
  4. 计算机等级节日综合症,警惕孩子节日综合症
  5. Matlab:正则表达式中的标文
  6. 计算机一级考试模拟题
  7. (附源码)计算机毕业设计SSM在线付费课程学习平台
  8. Redux中间件(redux-thunk、redux-promise、redux-saga)
  9. 一文带你理解云原生 | 云原生全景图详解
  10. zip与unzip一般压缩和带密码压缩与解压缩