ROS学习笔记4-创建一个ROS包
本文内容来源于官方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用于编译包,该文件也可以定制。
给孤独的理想插上自由的翅膀