Note: This tutorial assumes that you have completed the previous tutorials: navigating the ROS filesystem.
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.
Creating a ROS Package
Description: This tutorial covers using roscreate-pkg to create a new package, and rospack to list package dependencies.
Tutorial Level: BEGINNER
Next Tutorial: Building a ROS package
本文介绍如何使用roscreate-pkg 创建一个新的package, 并使用 rospack 列出package中文件的依赖关系
如何使用roscreate
在我们创建一个package之前,先看下如何使用 roscreate-pkg 命令行工具,该命令用于创建一个新的ROS package。 所有的 ROS packages 包含很多相似的文件 : manifests, CMakeLists.txt, mainpage.dox 和 Makefiles。roscreate-pkg免除手工创建package的繁琐的步骤及由于键盘输入可能带来的错误。
在当前目录创建一个新的package的命令如下
$ roscreate-pkg [package_name]
可以同时指明该package所依赖的其它package:
$ roscreate-pkg [package_name] [depend1] [depend2] [depend3]
创建新的ROS Package
现在我们在home目录下或者自定义的目录下创建名为 beginner_tutorials 的package,并使它依赖 std_msgs, roscpp, 和 rospy,这三个package都是ROS的公共通用的package。
切换到目录 ~/ros_workspace 并创建package:
$ cd ~/ros_workspace
$ roscreate-pkg beginner_tutorials std_msgs rospy roscpp
然后在控制台会看到如下相似的返回结果:Creating package directory ~/ros_workspace/beginner_tutorials
Creating include directory ~/ros_workspace/beginner_tutorials/include/beginner_tutorials
Creating cpp source directory ~/ros/ros_tutorials/beginner_tutorials/src
Creating python source directory ~/ros_workspace/beginner_tutorials/src/beginner_tutorials
Creating package file ~/ros_workspace/beginner_tutorials/Makefile
Creating package file ~/ros_workspace/beginner_tutorials/manifest.xml
Creating package file ~/ros_workspace/beginner_tutorials/CMakeLists.txt
Creating package file ~/ros_workspace/beginner_tutorials/mainpage.dox
Please edit beginner_tutorials/manifest.xml and mainpage.dox to finish creating your package
我们可以查看文件 beginner_tutorials/manifest.xml。 manifests 文件起到很重要的作用,在ROS中它定义package如何创建、运行和归档。下面我们验证并确认ROS能查找到我们这个新的package。当目录路径和ROS_PACKAGE_PATH环境变量变化时,通常使用命令 rospack profile 来使得这个新的目录能够在ROS中被查找到:
$ rospack profile
$ rospack find beginner_tutorialsYOUR_PACKAGE_PATH/beginner_tutorials
如果没有列出package的路径说明ROS不能找到这个新的package,需要查看环境变量 ROS_PACKAGE_PATH是否存在问题。仔细查阅ROS安装指南可以找出问题所在。如果已经创建或者添加已经存在的package路径,则需要修改环境变量ROS_PACKAGE_PATH包含进相应的路径。 在ros_workspace 目录中再次执行source setup.sh命令。
例如.$ roscd beginner_tutorials
$ pwdYOUR_PACKAGE_PATH/beginner_tutorials
Package互相依赖的优先顺序
使用命令roscreate-pkg 创建package时可以作为参数指明所依赖的其它package,这个依赖的先后顺序可以通过命令 rospack 来查看。
$ rospack depends1 beginner_tutorialsstd_msgs
rospy
roscpp
如同你看到的返回结果, rospack 命令列出了所有依赖的package,这些package就是运行命令roscreate-pkg 时所带的参数。 一个package的所有依赖项保存在文件 manifest 中。 下面的命令查看 manifest 文件.
$ roscd beginner_tutorials
$ cat manifest.xml
...
package 间接依赖关系
大多数情况下,一个package作为其它package的依赖项,同时也有自己的依赖项(package)。例如, rospy 也有它自己的依赖项(package).$ rospack depends1 rospyroslib
roslang
一个 package 可以由间接的依赖项。命令 rospack 可以查看这些依赖项.$ rospack depends beginner_tutorialsrospack
roslib
std_msgs
rosgraph_msgs
rosbuild
roslang
rospy
cpp_common
roscpp_traits
rostime
roscpp_serialization
xmlrpcpp
rosconsole
roscpp
ROS 库文件
也许你会问前面例子中的 rospy 和 roscpp 依赖哪些package呢? rospy 和 roscpp 是ROS的一组库文件 Client Libraries. 这些库文件允许不同的编程语言来调用以便能够在ROS框架中数据交换. rospy 是Python用的库文件. roscpp 是针对C++用的库文件.
Review
Lets just list some of the commands we've used so far:roscreate-pkg = ros+create-pkg : generates all the files needed to create a ROS package
rospack = ros+pack(age) : provides information related to ROS packages
rosstack = ros+stack : provides information related to ROS stacks
Now that you've made a new ROS package, let's build our ROS package.