如果满足下面3个条件,一个package就会被认为是catkin package
:
package.xml
文件。
CMakeLists.txt
文件。
metapackage
,需要引用相关的CMakeLists.txt文件。一个最简单的package应该有如下的结构:
my_package/
CMakeLists.txt
package.xml
一个标准的工作空间应该类似:
workspace_folder/ -- 工作空间
src/ -- 存放代码的目录
CMakeLists.txt -- catkin的最顶级CMake文件
package_1/
CMakeLists.txt -- package_1的CMakeLists.txt
package.xml -- package_1的说明文件manifest
...
package_n/
CMakeLists.txt -- package_n的CMakeLists.txt
package.xml -- package_n的说明文件manifest
使用catkin_creat_pkg
命令来创建一个catkin package:
# 首先创建一个工作空间
$ cd ~/catkin_ws/src
接着使用catkin_creat_pkg
命令创建一个依赖于std_msgs
,roscpp
和rospy
的beginner_tutorials
package:
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
catkin_create_pkg
命令的标准格式为:
# catkin_create_pkg [depend1] [depend2] [depend3]
使用tree
命令查看以下目录结构:
└── beginner_tutorials
├── CMakeLists.txt
├── include
│ └── beginner_tutorials
├── package.xml
└── src
切换到catkin_ws
目录,然后编译:
$ cd ~/catkin_ws
$ catkin_make
使用ls
查看当前文件夹,发现多了2个文件夹:
build devel src
最后把这个工作空间加入到ros环境中:
$ source ~/catkin_ws/devel/setup.bash
在我们使用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>catkinbuildtool_depend>
<build_depend>roscppbuild_depend>
<build_depend>rospybuild_depend>
<build_depend>std_msgsbuild_depend>
...
package>
有些依赖包本身也依赖于其他的包,例如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
删除不必要的内容:
1
2 <package format="2">
3 <name>beginner_tutorialsname>
4 <version>0.1.0version>
5 <description>The beginner_tutorials packagedescription>
6
7 <maintainer email="[email protected]">Your Namemaintainer>
8 <license>BSDlicense>
9 <url type="website">http://wiki.ros.org/beginner_tutorialsurl>
10 <author email="[email protected]">Jane Doeauthor>
11
12 <buildtool_depend>catkinbuildtool_depend>
13
14 <build_depend>roscppbuild_depend>
15 <build_depend>rospybuild_depend>
16 <build_depend>std_msgsbuild_depend>
17
18 <exec_depend>roscppexec_depend>
19 <exec_depend>rospyexec_depend>
20 <exec_depend>std_msgsexec_depend>
21
22 package>
最初使用catkin_creat_pkg
的CMakeList.txt
会被后面的ros代码编译给覆盖掉。
参考:http://wiki.ros.org/ROS/Tutorials/CreatingPackage