,# ROS学习笔记三:创建ROS软件包
一个软件包必须满足如下条件才能被称之为catkin软件包:
my_package/
CMakeLists.txt
package.xml
推荐利用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
利用catkin_create_pkg
命令创建一个新的catkin软件包。
cd ~/catkin/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
依赖于std_msgs、rospy、roscpp在src目录下创建一个名为beginner_tutorials的catkin软件包,这将会创建一个名称为beginner_tutorials的包含CMakeLists.txt和package.xml文件的文件夹。catkin_create_pkg命令要求提供软件包名称和可选择的一系列软件包的依赖。
注意:软件包命名惯例是—以小写字母开头,只能包含小写字母和数字以及下划线,不符合规则的软件包名称将不能编译通过。
mountzf@ubuntu:~/catkin_ws/src/beginner_tutorials$ tree
.
├── CMakeLists.txt
├── include
│ └── beginner_tutorials
├── package.xml
└── src
同时也会创建beginner_tutorials软件包的src文件夹和include文件夹,但是此时都是空的。
创建完成软件包之后,需要在工作空间中进行编译:
cd ~/catkin_ws
catkin_make
mountzf@ubuntu:~/catkin_ws$ catkin_make
Base path: /home/mountzf/catkin_ws
Source space: /home/mountzf/catkin_ws/src
Build space: /home/mountzf/catkin_ws/build
Devel space: /home/mountzf/catkin_ws/devel
Install space: /home/mountzf/catkin_ws/install
####
#### Running command: "cmake /home/mountzf/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/mountzf/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/mountzf/catkin_ws/install -G Unix Makefiles" in "/home/mountzf/catkin_ws/build"
####
-- Using CATKIN_DEVEL_PREFIX: /home/mountzf/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/indigo
-- This workspace overlays: /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/mountzf/catkin_ws/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.18
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 1 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/mountzf/catkin_ws/build
####
#### Running command: "make -j4 -l4" in "/home/mountzf/catkin_ws/build"
####
根据如上编译信息,可以知道:
.*sh
文件来将软件包的工作空间添加到环境变量当中。. ~/catkin_ws/devel/setup.bash
在前面利用catkin_create_pkg命令的时候,在选项中提供了一些依赖,利用rospack工具可以查看这些直接依赖。
rospack depends1 beginner_tutorials
std_msgs
rospy
roscpp
注意上面的是depends1(是阿拉伯数字1,而不是小写字母l)。可以看出rospack工具列出了在使用catkin_create_pkg命令的时候提供的依赖,这些信息存储在packa.xml文件中,可以cat package.xml
查看。
在很多情况下,我们会遇到依赖的依赖,即间接依赖。例如beginner_tutorials的依赖文件rospy也有其他依赖。
rospack depends1 rospy
genpy
rosgraph
rosgraph_msgs
roslib
std_msgs
如果我们使用rospack depends(没有阿拉伯数字1),则会列出catkin软件包的所有依赖文件。
rospack depends beginner_tutorials
cpp_common
rostime
roscpp_traits
roscpp_serialization
genmsg
genpy
message_runtime
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
catkin
rospack
roslib
rospy
主要按照自己的需要更改package.xml文件和CMakeLists.txt文件。
The beginner_tutorials package
描述软件包的概述,应该简短精要。
"[email protected]">user
```
至少需要一个维护者的信息,但是也可以添加多个。维护者的名字在类别的内容之中,邮箱在类别的属性之中。
#### 许可证部分license
```bash
TODO
"se-preview-section-delimiter">
一些常见的软件使用BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv等,在这里使用BSD,因为ROS的其他核心部件已经使用了BSD证书。
依赖在这里被分为build_depend, buildtool_depend, run_depend, test_depend, 更加详细的信息见此link。当前package.xml中的依赖部分如下:
catkin
roscpp
rospy
std_msgs
"se-preview-section-delimiter">
我们想在编译和运行的时候都能够获得这些依赖,所以需要在run_depend中添加那些依赖,结果如下:
catkin
roscpp
rospy
std_msgs
roscpp
rospy
std_msgs
"se-preview-section-delimiter">
"1.0"?>
beginner_tutorials
0.1.0
The beginner_tutorials package
"[email protected]">Your Name
BSD
type="website">http://wiki.ros.org/beginner_tutorials
"[email protected]">Jane Doe
catkin
roscpp
rospy
std_msgs
roscpp
rospy
std_msgs
在下一部分编译ROS软件包中再来修改CMakelist.txt文件。
catkin_create_pkg
命令创建一个新的catkin软件包。catkin_make
命令编译catkin工作空间。祝枫
2016年7月21日于深圳