查看正在使用的ROS工作空間,使用命令
echo $ROS_PACKAGE_PATH
我新建了兩個
以后我們要用的工作空間為
~/dev/rosbook
新建文件夾
mkdir -p dev/rosbook
將新的路徑添加到ROS _PACKAGE_PATH只需在~/.bashrc文件的末尾添加新的一行
出錯
等號兩邊不能加空格
echo "export ROS_PACKAGE_PATH=~/dev/rosbook:${ROS_PACKAGE_PATH}" >> ~/.bashrc
查看添加
1.創建一個ROS Package
這個教程包括使用roscreate-pkg或者catkin去創建一個新的package,以及使用rospack去列出package的依賴。
2.catkin Package由什么組成
一個package被認為是catkin packages必須滿足這些要求:
a.必須包含一個catkin compliant(編譯) package.xml文件(提供關於package的元信息);
b.必須包含一個使用catkin的CMakeLists.txt文件。Catkin metapackages(元package)必須有一個CMakeLists.txt樣本文件;
c.在一個文件夾中不允許有超過兩個的package(這就着意味着沒有其他packages共享這個目錄)。
這個簡單的package可能像這個樣子:
my_package/
3.catkin工作空間中的Packages
推薦使用catkin packages 的方式是使用catkin工作空間,但是你也可以單獨使用catkin建立packages。一般的工作空間看起來像這樣:
workspace_folder/ -- WORKSPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
4、創建一個catkin package
這里將會用catkin_create_pkg腳本去創建一個新的catkin package。
首先去到你之前創建的工作空間目錄:
$ cd ~/catkin_ws/src
用catkin_create_pkg 腳本創建一個做'beginner_tutorials'新package,它依賴於std_msgs,roscpp,和roscpy。
命令:
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
現在創建了一個 beginner_tutorials文件夾,包含有package.xml , CMakeLists.txt文件,其中部分填寫了由你提供給catkin_create_pkg的信息。
catkin_create_pkg要求你提供一個package的名字和它所需要的依賴。
catkin_create_pkg在catkin/commands/catkin_create_pkg.中有對更加高級功能的描敘。
5.建立一個catkin工作空間並且啟用setup 文件
現在需要在catkin工作空間編譯package。
$ cd ~/catkin_ws
執行該命令后會在devel文件夾下生成一個和在/opt/ros/$ROSDISTRO_NAME(ROS版本名這里是/opt/ros/indigo)下相似的結構。
為把工作空間添加到ROS環境變量你需要執行:
$ source ~/catkin_ws/devel/setup.bash
(使setup文件生效)
6.package 的依賴
6.1第一層依賴
用catkin_create_pkg時,一些package提供了依賴。這些第一層依賴可以通過rospack工具重現。
$ rospack depends1 beginner_tutorials
輸出:
std_msgs
列出了運行catkin_create_pkg命令時的一些依賴,這些依賴儲存在package.xml文件中。
$ roscd beginner_tutorials
輸出:
<package>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
6.2間接依賴
許多情況下,依賴也有它的依賴。
比如:
$ rospack depends1 rospy
輸出
genpy
rospack可以顯示所有遞歸的嵌套依賴。
$ rospack depends beginner_tutorials
7.定制你的package
這部分將教你怎樣定制自己的package。
7.1定制package.xml
package.xml包含在package中。
7.1.1描敘標簽
首先更新描敘標簽
可以根據你的愛好改變description,但是最好短一些並且能夠概括package
7 <!-- One maintainer tag required, multiple allowed, one person per tag -->
9 <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
10 <maintainer email="user@todo.todo">user</maintainer>
7.1.2維護者標簽
這個非常重要因為他可以讓其他人知道和誰去交流這個package,這個維護者的名字會作為標簽,郵箱也應該填寫:
7 <maintainer email="you@yourdomain.tld">Your Name</maintainer>
7.1.協議標簽
12 <!-- One license tag required, multiple allowed, one license per tag -->
13 <!-- Commonly used license strings: -->
14 <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
選擇一個協議填寫。
通常用的一些協議是BSD,MIT,Boost Software License, GPLv2, GPLv3, LGPLv2.1, and LGPLv3。可以在這里讀到一些其他的開源協議。(http://opensource.org/licenses/alphabetical)。這里作為新手教程,我們選擇BSD協議,因為ROS的其他核心部分已經遵從BSD協議了。
7.1.4依賴標簽
一系列標簽描敘依賴。這些依賴被分為build_depend, buildtool_depend, run_depend, test_depend。
27 <!-- The *_depend tags are used to specify dependencies -->
28 <!-- Dependencies can be catkin packages or system dependencies -->
30 <!-- Use build_depend for packages you need at compile time: -->
31 <!-- <build_depend>genmsg</build_depend> -->
32 <!-- Use buildtool_depend for build tool packages: -->
33 <!-- <buildtool_depend>catkin</buildtool_depend> -->
34 <!-- Use run_depend for packages you need at runtime: -->
35 <!-- <run_depend>python-yaml</run_depend> -->
36 <!-- Use test_depend for packages you need only for testing: -->
37 <!-- <test_depend>gtest</test_depend> -->
38 <buildtool_depend>catkin</buildtool_depend>
39 <build_depend>roscpp</build_depend>
40 <build_depend>rospy</build_depend>
41 <build_depend>std_msgs</build_depend>
所有列出來的都是build_depend,除了之外,我們需要指定的所有依賴在build和run time時都是可用的,我們需要增加run_depend標簽在每個依賴后面。
12 <buildtool_depend>catkin</buildtool_depend>
14 <build_depend>roscpp</build_depend>
15 <build_depend>rospy</build_depend>
16 <build_depend>std_msgs</build_depend>
18 <run_depend>roscpp</run_depend>
19 <run_depend>rospy</run_depend>
20 <run_depend>std_msgs</run_depend>
7.1.5最終的package.xml
3 <name>beginner_tutorials</name>
5 <description>The beginner_tutorials package</description>
7 <maintainer email="you@yourdomain.tld">Your Name</maintainer>
9 <url type="website">http://wiki.ros.org/beginner_tutorials</url>
10 <author email="you@yourdomain.tld">Jane Doe</author>
12 <buildtool_depend>catkin</buildtool_depend>
14 <build_depend>roscpp</build_depend>
15 <build_depend>rospy</build_depend>
16 <build_depend>std_msgs</build_depend>
18 <run_depend>roscpp</run_depend>
19 <run_depend>rospy</run_depend>
20 <run_depend>std_msgs</run_depend>
7.2定制CMakeLists.txt
含有元信息的package.xml文件已經為你的package裁剪好了,接下來的教程將會討論CMakeLists.txt文件。由catkin_create_pkg創建的CMakeLists.txt文件將會在下面的關於編譯代碼的教程中涉及.