3.创建一个ROS package
创建一个ROS package(rawmeat:wiki.ros.org/ROS/Tutorials/CreatingPackage)
描述:这个教程包含使用roscreate-pkg 或 catkin来创造一个新的package,使用rospack来列举package的依赖文件。
教程等级:初学者
下一个教程:构造一个ROS package
(只介绍catkin)
内容:
- 什么组成了一个catkin package?
- catkin workspace中的packages
- 创建一个catkin package
- 建立一个catkin workspacce与source setup file
- package的依赖关系
- 第一阶依赖关系
- 间接的依赖关系
- 定制你的package
- 定制package.xml
- 描述tag
- 维护tag
- 许可证tag
- 依赖关系tag
- 最终的package.xml
- 定制CMakeList.txt
- 定制package.xml
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相关推荐
- ROS学习笔记3(创建一个ROS Package)
文章目录 1 catkin Package由什么组成? 2 catkin工作空间下的packages 3 创建一个catkin package 4 编译并且刷新setup文件 5 package依赖 ...
- ROS学习笔记10(创建一个ROS消息和服务)
这篇教程主要介绍怎样创建和编译一个msg消息和srv服务文件,同时介绍rosmsg,rossrv,roscp等命令工具. 文章目录 1 msg和srv文件长什么样 2 msg使用 2.1 创建一个ms ...
- ros系统支持java_创建一个rosjava package 并测试发布和接受消息
一.rosjava package 结构和解析 Rosjava 主要是提供了客户端(如:android)与ros系统(如:turtlebot)通信的库,主要应用于android等java平台客户端开发 ...
- ROS学习-创建一个ROS msg和一个srv
目录 ROS msg和srv的介绍 使用msg 创建一个msg 使用rosmsg命令 使用srv 创建一个srv 使用rossrv命令 msg和srv的通用步骤 使用Help 简要总结回顾 ROS m ...
- ROS学习笔记4(编译一个ROS Package)
文章目录 1 准备工作 2 使用catkin_make 3 编译一个package 1 准备工作 在所有的系统依赖项都安装好之后,就可以编译一个新的package了. 注意:如果是使用apt方式安装的 ...
- ROS(Robot Operating System)笔记 : 2.创建并配置package
ROS(Robot Operating System)笔记 : 2.创建一个ROS包并设置其依赖 1.首先来到ros的工作目录下,接着使用 catkin_make + [包名称] + [依赖1] + ...
- 如何在IDEA中创建一个项目
首先双击IDEAjava运行环境(也就是双击程序啦!). 点击Create New Project,开始创建一个新的项目! 然后点击下一步!(next) 然后作为小白,不需要勾选下面选项,接着下一步即 ...
- 创建一个简单的flask项目步骤
创建一个flask项目目录(结构配置,SQLAlchemy,邮件,消息闪现等) 展示一下当前的目录结果 |-feng7309 # 项目文件夹 |--|apps # 统一管理所有的蓝图信息 |--|-- ...
- Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型
Ubuntu18.04 LTS Melodic ROS 教程:使用URDF创建一个虚拟机器人模型 Building a Visual Robot Model with URDF from Scratc ...
最新文章
- 网络流最大流 Dinic算法模板
- W7程序计算机面板介绍,win7系统隐藏任意程序运行界面的详细步骤
- vim上次和下次光标位置
- 【noiOJ】P1996
- 2016年Android主流技术
- fir.im Weekly - 2017 年必须了解的 iOS 开源库
- windows下hadoop的单机伪分布式部署(3)
- android 联系人批量插入,GitHub - Atinerlengs/InsertDemo: android 简单的批量插入通话记录、联系人、短信demo...
- android 脚本引擎,GitHub - PassByYou888/zExpression: 脚本与编译器内部的语法引擎内核,也是一种op内核,zExpression可以轻松实现自己的脚本引擎...
- 【LeetCode笔记】394. 字符串解码(Java、递归、栈)
- linux系统冒号模式map怎么用,shell中冒号 : 用途说明
- 2021 年各家大厂的 AI Lab 现状如何?
- 诺基亚7P可刷华为鸿蒙系统,今日热闻 | 鸿蒙OS 2.0发布、EMUI 11发布、iPhone 12或配备7P镜头...
- 白板推导系列Pytorch实现-感知机算法
- springboot+1、图片上传到本地路径信息保存在数据库2、根据id删除本地图片
- 信息安全软考——第四章 网络安全体系与网络安全模型 知识点记录
- 基于java实现的一个电话号码程序,3位,5位,7位,8位,11位
- CSS实现多余文本隐藏
- mysql查出繁体文字_Mysql获取数据出现繁体显示为乱码的问题
- 《文明六:Sid Meier's Civilization VI 》的介绍