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_tutorials
YOUR_PACKAGE_PATH/beginner_tutorials
如果没有列出package的路径说明ROS不能找到这个新的package,需要查看环境变量 ROS_PACKAGE_PATH是否存在问题。仔细查阅ROS安装指南可以找出问题所在。如果已经创建或者添加已经存在的package路径,则需要修改环境变量ROS_PACKAGE_PATH包含进相应的路径。 在ros_workspace 目录中再次执行source setup.sh命令。
例如.
$ roscd beginner_tutorials $ pwd
YOUR_PACKAGE_PATH/beginner_tutorials
Package互相依赖的优先顺序
使用命令roscreate-pkg 创建package时可以作为参数指明所依赖的其它package,这个依赖的先后顺序可以通过命令 rospack 来查看。
$ rospack depends1 beginner_tutorials
std_msgs rospy roscpp
如同你看到的返回结果, rospack 命令列出了所有依赖的package,这些package就是运行命令roscreate-pkg 时所带的参数。 一个package的所有依赖项保存在文件 manifest 中。 下面的命令查看 manifest 文件.
$ roscd beginner_tutorials $ cat manifest.xml
<package> ... <depend package="std_msgs"/> <depend package="rospy"/> <depend package="roscpp"/> </package>
package 间接依赖关系
大多数情况下,一个package作为其它package的依赖项,同时也有自己的依赖项(package)。例如, rospy 也有它自己的依赖项(package).
$ rospack depends1 rospy
roslib roslang
一个 package 可以由间接的依赖项。命令 rospack 可以查看这些依赖项.
$ rospack depends beginner_tutorials
rospack 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.