本文內容來源於官方wiki,http://wiki.ros.org/ROS/Tutorials/CreatingPackage
- 一個catkin包包含什么
- 必須包含package.xml文件,該文件用來描述包相關信息。
- 必須有一個catkin使用的CMakeLists.txt文件。
- 每個包必須有自己的文件夾。
一個簡單包結構如下:
my_package/ CMakeLists.txt package.xml
- catkin 工作空間(workspace)中的包
建議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工作空間。
- 創建catkin工作空間。
裝了ROS后可以使用該命令安裝catkin,
$ source /opt/ros/kinetic/setup.bash
使用如下命令創建一個catkin工作空間,名字為catkin_ws:
$ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/ $ catkin_make
使用ls命令查看,可以看出已經出現build,devel,src的子目錄。
然后運行:$ source devel/setup.bash $ echo $ROS_PACKAGE_PATH
返回如下:
/home/spy/catkin_ws/src:/opt/ros/kinetic/share
可以看出,環境變量中已經包含了該工作空間中的目錄。
- 創建一個catkin包
可以使用catkin_create_pkg命令創建一個catkin包,該命令語法如下:
# This is an example, do not try to run this # catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
例如如下命令:
$ cd ~/catkin_ws/src $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
創建一個名為 beginner_tutorials 的包,依賴項為 std_msgs rospy 和roscpp
輸出如下:Created file begginner_tutorials/CMakeLists.txt Created file begginner_tutorials/package.xml Created folder begginner_tutorials/include/begginner_tutorials Created folder begginner_tutorials/src Successfully created files in /home/shao/catkin_ws/src/begginner_tutorials. Please adjust the values in package.xml.
可以看出,該命令自動創建了一些文件。其中包括CMakeLists.txt和package.xml這些文件。
- 編譯catkin包
使用如下命令
$ cd ~/catkin_ws $ catkin_make
則會自動將所有包都編譯,包括剛創建的beginner_tutorials包。
catkin_make命令實際上調用了cmake命令,關於更多catkin_make的信息,請參考catkin/commands/catkin_make - 包依賴
- 一級依賴
在使用catkin_create_pkg命令創建包時可以指定一些依賴項,可以rospack命令查看這些依賴項:
$ rospack depends1 begginner_tutorials
則返回:
roscpp rospy std_msgs
這些依賴信息存儲在package.xml中,可以查看package.xml。
- 間接依賴
一級依賴項可能存在自己的依賴,這些稱之為間接依賴,例如,rospy包又存在自己的依賴項:
$ rospack depends1 rospy genpy roscpp rosgraph rosgraph_msgs roslib std_msgs
- 全部依賴
使用rospack depends命令可以查看全部依賴項
$ rospack depends begginner_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
- 一級依賴
- 定制包信息
可以通過定制package.xml的信息來定制包的元信息,關於更詳細信息請參考package.xml
同時,CMakeLists.txt用於編譯包,該文件也可以定制。