ROS創建工作空間(三)


查看正在使用的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.必須包含一個使catkinCMakeLists.txt文件Catkin metapackages(package)必須有一個CMakeLists.txt樣本文件;

c.在一個文件夾中不允許有超過兩個的package(這就着意味着沒有其他packages共享這個目錄)。

 

這個簡單的package可能像這個樣子:

my_package/

  CMakeLists.txt

  package.xml

3.catkin工作空間中的Packages 

推薦使用catkin packages 的方式是使用catkin工作空間,但是你也可以單獨使用catkin建立packages。一般的工作空間看起來像這樣:

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

4、創建一個catkin package

這里將會用catkin_create_pkg腳本去創建一個新的catkin package

 

首先去到你之前創建的工作空間目錄:

 

$ cd ~/catkin_ws/src

 

catkin_create_pkg 腳本創建一個做'beginner_tutorials'package,它依賴於std_msgsroscpp,和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_pkgcatkin/commands/catkin_create_pkg.中有對更加高級功能的描敘。

 

5.建立一個catkin工作空間並且啟用setup 文件

現在需要在catkin工作空間編譯package。

$ cd ~/catkin_ws

$ catkin_make

執行該命令后會在devel文件夾下生成一個和在/opt/ros/$ROSDISTRO_NAMEROS版本名這里是/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

rospy

roscpp

列出了運行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>

 

6.2間接依賴

許多情況下,依賴也有它的依賴。

比如:

 

$ rospack depends1 rospy

 

輸出

genpy

rosgraph

rosgraph_msgs

roslib

std_msgs

rospack可以顯示所有遞歸的嵌套依賴。

$ rospack depends beginner_tutorials

cpp_common

rostime

roscpp_traits

roscpp_serialization

genmsg

genpy

message_runtime

rosconsole

std_msgs

rosgraph_msgs

xmlrpcpp

roscpp

rosgraph

catkin

rospack

roslib

rospy

 

 

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

   8   <!-- Example:  -->

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

  15   <license>TODO</license>

選擇一個協議填寫。

 

   8   <license>BSD</license>

 

通常用的一些協議是BSDMITBoost 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 -->

  29   <!-- Examples: -->

  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,除了之外,我們需要指定的所有依賴在buildrun time時都是可用的,我們需要增加run_depend標簽在每個依賴后面。

 

 12   <buildtool_depend>catkin</buildtool_depend>

  13 

  14   <build_depend>roscpp</build_depend>

  15   <build_depend>rospy</build_depend>

  16   <build_depend>std_msgs</build_depend>

  17 

  18   <run_depend>roscpp</run_depend>

  19   <run_depend>rospy</run_depend>

  20   <run_depend>std_msgs</run_depend>

 

 

7.1.5最終的package.xml

 

   1 <?xml version="1.0"?>

   2 <package>

   3   <name>beginner_tutorials</name>

   4   <version>0.1.0</version>

   5   <description>The beginner_tutorials package</description>

   6 

   7   <maintainer email="you@yourdomain.tld">Your Name</maintainer>

   8   <license>BSD</license>

   9   <url type="website">http://wiki.ros.org/beginner_tutorials</url>

  10   <author email="you@yourdomain.tld">Jane Doe</author>

  11 

  12   <buildtool_depend>catkin</buildtool_depend>

  13 

  14   <build_depend>roscpp</build_depend>

  15   <build_depend>rospy</build_depend>

  16   <build_depend>std_msgs</build_depend>

  17 

  18   <run_depend>roscpp</run_depend>

  19   <run_depend>rospy</run_depend>

  20   <run_depend>std_msgs</run_depend>

  21 

  22 </package>

 

 

7.2定制CMakeLists.txt

含有信息的package.xml文件已經為你的package裁剪好了,接下來的教程將會討論CMakeLists.txt文件。由catkin_create_pkg創建的CMakeLists.txt文件將會在下面的關於編譯代碼的教程中涉及.

 

 


免責聲明!

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



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