文章目录
1 catkin Package由什么组成?
如果满足下面3个条件,一个package就会被认为是catkin package
:
- 包含一个符合catkin标准的
package.xml
文件。- 这个文件包含了包的主要信息。
- 包含一个使用catkin的
CMakeLists.txt
文件。- 如果是一个
metapackage
,需要引用相关的CMakeLists.txt文件。
- 如果是一个
- 每个package都有自己的独立文件夹。
- 这意味着没有嵌套packages,也不存在多个packages共用相同目录。
一个最简单的package应该有如下的结构:
my_package/
CMakeLists.txt
package.xml
2 catkin工作空间下的packages
一个标准的工作空间应该类似:
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
3 创建一个catkin package
使用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 <package_name> [depend1] [depend2] [depend3]
使用tree
命令查看以下目录结构:
└── beginner_tutorials
├── CMakeLists.txt
├── include
│ └── beginner_tutorials
├── package.xml
└── src
4 编译并且刷新setup文件
切换到catkin_ws
目录,然后编译:
$ cd ~/catkin_ws
$ catkin_make
使用ls
查看当前文件夹,发现多了2个文件夹:
build devel src
最后把这个工作空间加入到ros环境中:
$ source ~/catkin_ws/devel/setup.bash
5 package依赖
5.1 第一依赖项
在我们使用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>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
...
</package>
5.2 间接依赖
有些依赖包本身也依赖于其他的包,例如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
6 自定义你的package
6.1 自定义packages.xml
删除不必要的内容:
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 自定义CMakeLists.txt
最初使用catkin_creat_pkg
的CMakeList.txt
会被后面的ros代码编译给覆盖掉。