1. 程式人生 > >ROS入門教程歸納3

ROS入門教程歸納3

建立ROS程式包

組成
i)package.xml
ii)CMakeLists.txt

最簡組成

my_package/
  CMakeLists.txt
  package.xml

滿足條件
i)package.xml包含程式包的元資訊;
ii)CMakeLists.txt為catkin版本;
iii)metapackages必須包含對CMakeLists.txt檔案的飲用;
iv)每個目錄下只有一個程式包。

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

步驟
i) 建立工作空間
ii) cd 工作空間/src
iii) catkin_create_pkg
建立catkin程式包操作步驟

1)catkin_create_pkg
輸入 catkin_create_pkg 包名 依賴1 依賴2 依賴3
輸出 建立一個自定義名字的包,依賴於你定義的1,2,3
舉例
建立一個名為’beginner_tutorials’的新程式包,這個程式包依賴於std_msgs、roscpp和rospy

$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

會建立一個名為beginner_tutorials的資料夾,包含一個package.xml檔案和一個CMakeLists.txt檔案。
這兩個檔案都已經自動包含了部分你在執行catkin_create_pkg命令時提供的資訊。

一級依賴

1)rospack depends1
輸入 rospack depends1 包名
輸出 包對應一級依賴包
舉例
輸入

$ rospack depends1 beginner_tutorials 

輸出

std_msgs
rospy
roscpp

2)cat
輸入 cat 檔名
輸出 顯示整個檔案
舉例

$ 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>

間接依賴

1)rospack depends
輸入 rospack depends 包名
輸出 所有依賴包列表

自定義 package.xml

1)gedit
輸入 gedit 檔名
輸出 通過gedit編輯器開啟檔案
組成
i)描述
可更改任意內容,最好簡短。

<description>The beginner_tutorials package</description>

ii)維護者
填寫一個維護者及其聯絡方式

<!-- One maintainer tag required, multiple allowed, one person per tag --> 
<!-- Example:  -->
<!-- <maintainer email="[email protected]">Yourname</maintainer> -->
<maintainer email="[email protected]">user</maintainer>

iii)許可標籤
填寫許可協議,常見開源許可協議(把TODO換成協議名):
BSD、MIT、Boost Software License、GPLv2、GPLv3、LGPLv2.1和LGPLv3

<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>TODO</license>

iv)依賴項標籤
描述依賴項,分為:
build_depend、buildtool_depend、run_depend、test_depend
下述結果(自動生成的build_depend部分)是由於之前設定的依賴項
編譯和執行所需的包需新增到run_depend(exec_depend)中。

<!-- The *_depend tags are used to specify dependencies -->
<!-- Dependencies can be catkin packages or system dependencies -->
<!-- Examples: -->
<!-- Use build_depend for packages you need at compile time: -->
<!--   <build_depend>genmsg</build_depend> -->
<!-- Use buildtool_depend for build tool packages: -->
<!--   <buildtool_depend>catkin</buildtool_depend> -->
<!-- Use exec_depend for packages you need at runtime: -->
<!--   <exec_depend>python-yaml</exec_depend> -->
<!-- Use test_depend for packages you need only for testing: -->
<!--   <test_depend>gtest</test_depend> -->
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>

<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>

舉例
調整並去註釋的package.xml

<?xml version="1.0"?>
<package format="2">
  <name>beginner_tutorials</name>
  <version>0.1.0</version>
  <description>The beginner_tutorials package</description>

  <maintainer email="[email protected]">Your Name</maintainer>
  <license>BSD</license>
  <url type="website">http://wiki.ros.org/beginner_tutorials</url>
  <author email="[email protected]">Jane Doe</author>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>

  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>

</package>