1. 程式人生 > >【ROS】建立工作空間和程式包

【ROS】建立工作空間和程式包

要使用ROS系統進行開發,首先需要在ROS下建立工作空間(workspace)和程式包(package)。

建立工作空間:

$ mkdir -p ~/catkin_ws/src

執行上述命令即在使用者主目錄下建立了catkin_ws資料夾及其子資料夾src(-p表示建立目標路徑上的所有資料夾)。此時,catkin_ws即為你的工作空間,src為存放程式包的資料夾(src可以存放多個程式包)。

下面切換到工作空間下,並對其進行編譯(工作空間下沒有任何程式包依然可以進行編譯):

$ cd ~/catkin_ws/
$ catkin_make

此時,會發現catkin_ws資料夾下除了src,又多出兩個資料夾build和devel。build資料夾是

build space的預設所在位置,同時catkin_make也是在這裡被呼叫來配置並編譯你的程式包。devel資料夾是devel space的預設所在位置, 同時也是在你安裝程式包之前存放可執行檔案和庫檔案的地方。在devel資料夾裡有多個setup.*sh檔案。source這些檔案中的任何一個都可以將當前工作空間設定在ROS工作環境的最頂層。接下來首先source一下新生成的setup.*sh

為了確保ROS_PACKAGE_PATH環境變數包含你的工作空間目錄,採用以下命令檢視:

$ echo $ROS_PACKAGE_PATH

若返回以下資訊:(我安裝的ROS是kinetic版本)

/home/你的使用者名稱/你的工作空間名/src:/opt/ros/kinetic(ROS的版本名)/share

則表示你的工作變數已經配置正確。

接下來在src資料夾中建立一個新的程式包:

$ cd ~/catkin_ws/src/
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

執行上述命令後,src資料夾下就會出現一個新資料夾beginner_tutorials和一個新檔案CMakeList.txt,beginner_tutorials即為我們新建的程式包,該資料夾下至少包括CMakeList.txt和package.xml兩個檔案。std_msgs、rospy、roscpp為beginner_tutorials的依賴包,其作用相當於一個程式原始檔所需要的標頭檔案。

需要注意的是程式包的目錄不能相互巢狀,即若需要建立一個新的程式包,不能建在beginner_tutorials資料夾下。

由上述的建立過程,我們可以知道,一個工作空間和程式包的典型結構應為:

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
  devel/
    setup.*sh
  build/

在工作空間下完成程式包的建立後,再次在工作空間目錄下進行編譯(編譯其中的程式包):

首先source一下你的環境配置檔案:

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

再在工作空間下編譯程式包:

$ cd ~/catkin_ws/
$ catkin_make

至此,我們就完成了一個新的工作空間和程式包的建立和編譯。