ROS工作空間和程序包創建


預備工作
后面操作中我們將會用到ros-tutorials程序包,請先安裝:

$ sudo apt-get install ros-<distro>-ros-tutorials

將 <distro> 替換成你所安裝的版本(比如Jade、Indigo、hydro、groovy、fuerte、kinetic等)。

由於我的版本是kinetic的,所有安裝命令如下:

$ sudo apt-get install ros-kinetic-ros-tutorials

一、ROS catkin 工作空間

下面我們開始創建一個catkin 工作空間:

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src

即使這個工作空間是空的(在'src'目錄中沒有任何軟件包,只有一個CMakeLists.txt鏈接文件),你依然可以編譯它:

$ cd ~/catkin_ws/
$ catkin_make

 首次運行catkin_make命令,將會在src文件夾下創建一個CMakeLists.txt文件,且在根目錄下創建了兩個子文件夾build和devel,目錄結構如下:

catkin_ws                       # WORKSPACE
  - build/                      # BUILDSPACE
  - devel/                      # DEVEL SPACE
  - src/                        # SOURCE SPACE
    CMakeLists.txt              # Toplevel CMAKE file,provided by catkin

catkin_make命令在catkin 工作空間中是一個非常方便的工具。如果你查看一下當前目錄應該能看到'build'和'devel'這兩個文件夾。在'devel'文件夾里面你可以看到幾個setup.*sh文件。source這些文件中的任何一個都可以將當前工作空間設置在ROS工作環境的最頂層,想了解更多請參考catkin文檔。接下來首先source一下新生成的setup.*sh文件:

$ source devel/setup.bash

要想保證工作空間已配置正確需確保ROS_PACKAGE_PATH環境變量包含你的工作空間目錄,采用以下命令查看:

$ echo $ROS_PACKAGE_PATH
/home/saneri/catkin_ws/src:/home/saneri/catkin_ws/src:/opt/ros/kinetic/share

到此你的工作環境已經搭建完成,接下來可以繼續創建ROS程序包。

二、創建ROS程序包

1. 一個catkin程序包由什么組成?

一個程序包要想稱為catkin程序包必須符合以下要求:

1.> 該程序包必須包含catkin compliant package.xml文件,這個package.xml文件提供有關程序包的元信息。

2.> 程序包必須包含一個catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必須包含一個對CMakeList.txt文件的引用。

3.> 每個目錄下只能有一個程序包,這意味着在同一個目錄下不能有嵌套的或者多個程序包存在。

2. 在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

3. 創建一個catkin程序包

使用 catkin_create_pkg 命令來創建一個新的catkin程序包創建之后我們看看他都能做些什么。

首先切換到之前通過創建catkin工作空間教程創建的catkin工作空間中的src目錄下:

$ cd ~/catkin_ws/src

現在使用catkin_create_pkg命令來創建一個名為'beginner_tutorials'的新程序包,這個程序包依賴於std_msgs、roscpp和rospy

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

這將會創建一個名為beginner_tutorials的文件夾,這個文件夾里面包含一個package.xml文件和一個CMakeLists.txt文件,這兩個文件都已經自動包含了部分你在執行catkin_create_pkg命令時提供的信息。

catkin_create_pkg命令會要求你輸入package_name,如果有需要你還可以在后面添加一些需要依賴的其它程序包:

# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

4. 程序包依賴關系

4.1一級依賴

之前在使用catkin_create_pkg命令時提供了幾個程序包作為依賴包,現在我們可以使用rospack命令工具來查看一級依賴包。

$ rospack depends1 beginner_tutorials
roscpp
rospy
std_msgs

就像你看到的,rospack列出了在運行catkin_create_pkg命令時作為參數的依賴包,這些依賴包隨后保存在package.xml文件中。

$ roscd beginner_tutorials
$ cat package.xml
<package>
...
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
...
</package>

4.2間接依賴
在很多情況中,一個依賴包還會有它自己的依賴包,比如,rospy還有其它依賴包。

$ rospack depends1 rospy
genpy
rosgraph
rosgraph_msgs
roslib
std_msgs

一個程序包還可以有好幾個間接的依賴包,幸運的是使用rospack可以遞歸檢測出所有的依賴包。

$ rospack depends beginner_tutorials

三、編譯程序包

1. 一旦安裝了所需的系統依賴項,我們就可以開始編譯剛才創建的程序包了,如果你是通過apt或者其它軟件包管理工具來安裝ROS的,那么系統已經默認安裝好所有依賴項。

記得事先 source 你的環境配置(setup)文件,在Ubuntu中的操作指令如下:

$ source /opt/ros/kinetic/setup.sh 

2. 使用 catkin_make
catkin_make 是一個命令行工具,它簡化了catkin的標准工作流程。你可以認為catkin_make是在CMake標准工作流程中依次調用了cmake 和 make。

使用方法:

# 在catkin工作空間下
$ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]

開始編譯你的程序包

之前已經創建好了一個catkin 工作空間 和一個名為beginner_tutorials的catkin 程序包。現在切換到catkin workspace 並查看src文件夾:

$ cd ~/catkin_ws/
$ ls src
beginner_tutorials/  CMakeLists.txt
$ catkin_make

你可以看到很多cmake 和 make 輸出的信息:

Base path: /home/saneri/catkin_ws
Source space: /home/saneri/catkin_ws/src
Build space: /home/saneri/catkin_ws/build
Devel space: /home/saneri/catkin_ws/devel
Install space: /home/saneri/catkin_ws/install
####
#### Running command: "cmake /home/saneri/catkin_ws/src
-DCATKIN_DEVEL_PREFIX=/home/saneri/catkin_ws/devel
-DCMAKE_INSTALL_PREFIX=/home/saneri/catkin_ws/install" in "/home/saneri/catkin_ws/build"
####
-- The C compiler identification is GNU 4.2.1
-- The CXX compiler identification is Clang 4.0.0
-- Checking whether C compiler has -isysroot
-- Checking whether C compiler has -isysroot - yes
-- Checking whether C compiler supports OSX deployment target flag
-- Checking whether C compiler supports OSX deployment target flag - yes
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Using CATKIN_DEVEL_PREFIX: /tmp/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/groovy
-- This workspace overlays: /opt/ros/groovy
-- Found PythonInterp: /usr/bin/python (found version "2.7.1") 
-- Found PY_em: /usr/lib/python2.7/dist-packages/em.pyc
-- Found gtest: gtests will be built
-- catkin 0.5.51
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~  traversing packages in topological order:
-- ~~  - beginner_tutorials
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ add_subdirectory(beginner_tutorials)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/saneri/catkin_ws/build
####
#### Running command: "make -j4" in "/home/saneri/catkin_ws/build"
####

catkin_make首先輸出它所使用到的每個空間所在的路徑,需要注意的是由於這些空間存在默認配置的原因,有幾個文件夾已經在catkin工作空間自動生成了,使用ls查看

saneri@localhost:~/catkin_ws$ ls
build  devel  src

build 目錄是build space的默認所在位置,同時cmake 和 make也是在這里被調用來配置並編譯你的程序包。
devel 目錄是devel space的默認所在位置, 同時也是在你安裝程序包之前存放可執行文件和庫文件的地方。

 

參考文檔:http://wiki.ros.org/cn/ROS/Tutorials/CreatingPackage

     http://wiki.ros.org/cn/ROS/Tutorials/BuildingPackages

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM