ROS学习笔记二(创建ROS软件包)
catkin软件包的组成
一个软件包必须满足如下条件才能被称之为catkin软件包:
- 必须包含一个catkin编译文件package.xml(manifests文件),此文件包含了描述该软件包的重要信息。
- 必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。
- 每个目录下只能有一个程序包。 这意味着在同一个目录下不能有嵌套的或者多个程序包存在。
最简单的可能的软件包可能有如下文件结构:
my_package/
CMakeLists.txt
package.xml
1.catkin工作空间中的程序包
最好利用catkin工作空间来处理catkin软件包相关的内容,但是也可以单独编译catkin软件包。
一个普通的工作空间如下所示:
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
1.创建程序包
【1】先创建一个catkin 工作空间:(复习上一节)
$ mkdir -p ~/catkin_ws2/src //在home中创建catkin_ws2/src
$ cd ~/catkin_ws2
$ catkin_make
$ source devel/setup.bash //配置环境变量
$ echo $ROS_PACKAGE_PATH //检查工作空间是否已配置环境变量
【2】创建一个catkin程序包(catkin_create_pkg命令)
cd ~/catkin_ws2/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
依赖于std_msgs、rospy、roscpp在src目录下创建一个名为beginner_tutorials的catkin软件包,这将会创建一个名称为beginner_tutorials的包含CMakeLists.txt和package.xml文件的文件夹,及src文件夹和include文件夹,但是此时都是空的。(catkin_create_pkg命令要求提供软件包名称和可选择的一系列软件包的依赖。 )
注意:软件包命名惯例是—以小写字母开头,只能包含小写字母和数字以及下划线,不符合规则的软件包名称将不能编译通过。
安装树枝干 sudo apt-get install tree,为了更清楚显示。
wj@wj-Inspiron-:~/catkin_ws2/src/beginner_tutorials$ tree
.
├── CMakeLists.txt
├── include
│ └── beginner_tutorials
├── package.xml
└── src 3 directories, 2 files
2.编译catkin工作空间(程序包)
按照之前的应该已经创建好了一个catkin 工作空间 和一个beginner_tutorials的catkin 程序包。
进行编译:
wj@wj-Inspiron-:~/catkin_ws2
$ catkin_make
Base path: /home/wj/catkin_ws2
Source space: /home/wj/catkin_ws2/src
Build space: /home/wj/catkin_ws2/build
Devel space: /home/wj/catkin_ws2/devel
Install space: /home/wj/catkin_ws2/install
####
#### Running command: "cmake /home/wj/catkin_ws2/src -DCATKIN_DEVEL_PREFIX=/home/wj/catkin_ws2/devel -DCMAKE_INSTALL_PREFIX=/home/wj/catkin_ws2/install -G Unix Makefiles" in "/home/wj/catkin_ws2/build"
####
-- Using CATKIN_DEVEL_PREFIX: /home/wj/catkin_ws2/devel
-- Using CMAKE_PREFIX_PATH: /home/wj/catkin_ws2/devel;/opt/ros/indigo
-- This workspace overlays: /home/wj/catkin_ws2/devel;/opt/ros/indigo
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/wj/catkin_ws2/build/test_results
-- Found gtest sources under '/usr/src/gtest': gtests will be built
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.6.
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing packages in topological order:
-- ~~ - beginner_tutorials
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'beginner_tutorials'
-- ==> add_subdirectory(beginner_tutorials)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wj/catkin_ws2/build
####
#### Running command: "make -j4 -l4" in "/home/wj/catkin_ws2/build"
####
前面几行是编译文件的基本信息,每个空间所在的路径。
3.软件包依赖
【1】直接依赖:
(利用rospack工具可以查看这些直接依赖。)
$ source devel/setup.bash
$ rospack depends1 beginner_tutorials
roscpp
rospy
std_msgs
可以看出rospack工具列出了在使用catkin_create_pkg命令的时候提供的依赖,这些信息存储在packa.xml文件中,可以cat package.xml查看。
wj@wj-Inspiron-:~/catkin_ws2/src/beginner_tutorials$ cat package.xml
【2】间接依赖:
在很多情况下,我们会遇到依赖的依赖,即间接依赖。例如beginner_tutorials的依赖文件rospy也有其他依赖。
$ rospack depends1 rospy
genpy
roscpp
rosgraph
rosgraph_msgs
roslib
std_msgs
如果我们使用rospack depends(没有阿拉伯数字1),则会列出catkin软件包的所有依赖文件。
wj@wj-Inspiron-:~/catkin_ws2$ rospack depends beginner_tutorials
4.定制catkin软件包
主要按照自己的需要更改package.xml文件和CMakeLists.txt文件
【1】定制package.xml文件
描述部分description
<package>
<name>beginner_tutorials</name>
<version>0.0.</version>
<description>The beginner_tutorials package</description>
维护者部分maintainer
<!-- One maintainer tag required, multiple allowed, one person per tag -->
<!-- Example: -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<maintainer email="wj@todo.todo">wj</maintainer>至少需要一个维护者的信息,但是也可以添加多个。维护者的名字在类别的内容之中,邮箱在类别的属性之中。
许可证部分license
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2., LGPLv3 -->
<license>TODO</license>
依赖部分dependencies
依赖在这里被分为build_depend, buildtool_depend, run_depend, test_depend, 更加详细的信息见此link。当前package.xml中的依赖部分如下:
<!-- The *_depend tags are used to specify dependencies -->
<!-- Dependencies can be catkin packages or system dependencies -->
<!-- Examples: -->
<!-- Use build_depend for packages you need at compile time: -->
<!-- <build_depend>message_generation</build_depend> -->
<!-- Use buildtool_depend for build tool packages: -->
<!-- <buildtool_depend>catkin</buildtool_depend> -->
<!-- Use run_depend for packages you need at runtime: -->
<!-- <run_depend>message_runtime</run_depend> -->
<!-- Use test_depend for packages you need only for testing: -->
<!-- <test_depend>gtest</test_depend> -->
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
我们想在编译和运行的时候都能够获得这些依赖,所以需要在run_depend中添加那些依赖,结果如下:
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<run_depend>roscpp</run_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
最后完成的 package.xml
现在看下面最后去掉了注释和未使用标签后的package.xml文件就显得更加简洁了:
<?xml version="1.0"?>
<package>
<name>beginner_tutorials</name>
<version>0.0.</version>
<description>The beginner_tutorials package</description> <maintainer email="wj@todo.todo">wj</maintainer>
<license>TODO</license>
<url type="website">http://wiki.ros.org/beginner_tutorials</url>
<author email="jane.doe@example.com">Jane Doe</author> <buildtool_depend>catkin</buildtool_depend> <build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend> <run_depend>roscpp</run_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
【2】定制CMakelists.txt文件
3.总结
- catkin软件包必要组成:package.xml和CMakeList.txt文件(src目录下)
- 创建catkin软件包:
catkin_create_pkg命令。 - 编译catkin工作空间:
catkin_make命令。 - 查看ROS软件包依赖:rospack depends1查看直接依赖,rospack depends查看间接依赖。
- 定制catkin软件包:修改文件package.xml和CMakeLists.txt。
ROS学习笔记二(创建ROS软件包)的更多相关文章
- ROS学习笔记二:ROS系统架构及概念
本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...
- ROS学习手记 - 7 创建ROS msg & srv
至此,我们初步学习了ROS的基本工具,接下来一步步理解ROS的各个工作部件的创建和工作原理. 本文的详细文档:http://wenku.baidu.com/view/623f41b3376baf1ff ...
- ROS学习笔记一:ROS安装与测试
1 Ubuntu和ROS版本的对应关系 Ubuntu 和 ROS 都存在不同的版本,其对应关系如下: 注:如果Ubuntu版本和ROS版本不对应的话,安装就不会成功了- 笔者安装的是Ubuntu14. ...
- ROS学习笔记一(ROS的catkin工作空间)
在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...
- ROS学习笔记9-创建ros消息和服务
该节内容主要来自于官方文档的两个小节:1.使用rosed来编辑2.创建ros消息的服务 先来看rosed: rosedrosed命令是rosbash的一部分,使用rosed可以直接编辑包中的一个文件, ...
- angular学习笔记(二)-创建angular模块
如果在页面的html标签(或任意标签)中添加ng-app,表示对整个页面应用angular来管理. 他是一个模块. 模块有助于把东西从全局命名空间中隔离. 今天学习如何自定义创建模块: <!DO ...
- ROS学习笔记(二) :使用roslaunch
目录 roslaunch roslaunch的使用 以turtlesim为例 roslaunch roslaunch是ros自带的一个库,使用roslaunch可以同时运行多个节点,通过编写launc ...
- ROS学习笔记(二)
===================================================== QT工具箱sudo apt-get install ros-kinetic-rqtsudo ...
- ROS学习笔记九:ROS工具
ROS有各种工具可以帮助用户使用ROS.应该指出,这些GUI工具是对输入型命令工具的补充.如果包括ROS用户个人发布的工具,那么ROS工具的数量很庞大.其中,本文讨论的工具是对于ROS编程非常有用的辅 ...
随机推荐
- (转)linux查找技巧: find grep xargs
在当前目录下所有.cpp文件中查找efg函数 find . -name "*.cpp" | xargs grep 'efg' xargs展开find获得的结果,使其作为grep的参 ...
- 第13章 TCP编程(1)_socket套接字
1. socket套接字 (1)套接字简介 ①socket是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如TCP/UDP等网络协议进行网络通讯的手段. ②Linux中的 ...
- PHP书写格式
从一个例子开始. 启动编辑器,创建一个php文件并键入如下代码: <?php echo "你好!"; ?> 运行 将该文件命名为 test.php 并存储于 E:htm ...
- Python:23种Pandas核心操作
Pandas 是一个 Python 软件库,它提供了大量能使我们快速便捷地处理数据的函数和方法.一般而言,Pandas 是使 Python 成为强大而高效的数据分析环境的重要因素之一.在本文中,作者从 ...
- zabbix监控vCenter报错,无法自动发现主机
公司机房停电检修,检修完成后重新上电,发现VCSA起不来了,尝试多次无法解决,无奈只好重装.重装VCSA 6.5U2之后又发现无法自动发现主机,报错如下: 'config.vpxd.stats.max ...
- Xshell图形界面启动
https://blog.csdn.net/qq_27843481/article/details/50539797 增加内存:https://jingyan.baidu.com/article/4d ...
- leetcode342
public class Solution { public bool IsPowerOfFour(int num) { ) && ((num & (num - )) == ) ...
- python常见异常提示
PEP8 expected 2 blank lines, found 1 定义方法时,出现期望是2个空白行,但是实际检测到是1个.方法与上面内容间隔期望为两个换行符 PEP8 This diction ...
- windows7安装node
一.在官网下载node 二.按照提示进行安装 三.安装好的目录结构 四.测试是否安装好了node 首先按快捷键win+r,在运行窗口输入cmd,调出命令提示窗口,在命令提示窗口中输入path查看nod ...
- SpringBoot 监控管理模块actuator没有权限的问题
SpringBoot 1.5.9 版本加入actuator依赖后, 访问/beans 等敏感的信息时候报错,如下 Tue Mar 07 21:18:57 GMT+08:00 2017 There wa ...