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