ROS学习笔记3(创建一个ROS Package)

文章目录

  • 1 catkin Package由什么组成?
  • 2 catkin工作空间下的packages
  • 3 创建一个catkin package
  • 4 编译并且刷新setup文件
  • 5 package依赖
    • 5.1 第一依赖项
    • 5.2 间接依赖
  • 6 自定义你的package
    • 6.1 自定义packages.xml
    • 6.2 自定义CMakeLists.txt

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_msgsroscpprospybeginner_tutorialspackage:

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

catkin_create_pkg命令的标准格式为:

# catkin_create_pkg  [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>catkinbuildtool_depend>
  <build_depend>roscppbuild_depend>
  <build_depend>rospybuild_depend>
  <build_depend>std_msgsbuild_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 
   2 <package format="2">
   3   <name>beginner_tutorialsname>
   4   <version>0.1.0version>
   5   <description>The beginner_tutorials packagedescription>
   6 
   7   <maintainer email="[email protected]">Your Namemaintainer>
   8   <license>BSDlicense>
   9   <url type="website">http://wiki.ros.org/beginner_tutorialsurl>
  10   <author email="[email protected]">Jane Doeauthor>
  11 
  12   <buildtool_depend>catkinbuildtool_depend>
  13 
  14   <build_depend>roscppbuild_depend>
  15   <build_depend>rospybuild_depend>
  16   <build_depend>std_msgsbuild_depend>
  17 
  18   <exec_depend>roscppexec_depend>
  19   <exec_depend>rospyexec_depend>
  20   <exec_depend>std_msgsexec_depend>
  21 
  22 package>

6.2 自定义CMakeLists.txt

最初使用catkin_creat_pkgCMakeList.txt会被后面的ros代码编译给覆盖掉。


参考:http://wiki.ros.org/ROS/Tutorials/CreatingPackage

你可能感兴趣的:(ROS)