ROS パッケージの作成

roscreate の使い方

パッケージを作成する前に roscreate-pkg コマンドラインツールがどのような働きをするのか見てみましょう.ここでは新規に ROS パッケージを作成します.全ての ROS パッケージは manifestsCMakeLists.txt・mainpage.dox・Makefile といった多くの似通ったファイル群で構成されています.roscreate-pkg は手作業で行うパッケージ新規作成において多くの退屈な手間を軽減します.また,ファイルやマニフェストを手作業で作成する上でよくある間違いを防ぎます.

新しいパッケージを現在のディレクトリで作成します:

$ roscreate-pkg [package_name]

パッケージの依存関係についても指定します:

$ roscreate-pkg [package_name] [depend1] [depend2] [depend3]

あたらしく ROS パッケージを作成する

ここでは ros_tutorials ディレクトリに入って,beginner_tutorials パッケージを作成します.これには一般的な ROS パッケージである std_msgsroscpprospy と関連させます.

まず、~/fuerte_workspace/sandboxに行きます。

$ cd ~/fuerte_workspace/sandbox

もし代わりにfuerteかそれ以降のディストリビューションを使っているなら、単に以下のようにします。

$ roscd
$ cd sandbox

もしsandboxがない場合は、

mkdir sandbox

をして、再度行ってください。

次に以下のように入力してください。

$ roscreate-pkg beginner_tutorials std_msgs rospy roscpp

このように表示されます:

  • Creating package directory ~/ros/ros_tutorials/beginner_tutorials
    Creating include directory ~/ros/ros_tutorials/beginner_tutorials/include/beginner_tutorials
    Creating cpp source directory ~/ros/ros_tutorials/beginner_tutorials/src
    Creating python source directory ~/ros/ros_tutorials/beginner_tutorials/src/beginner_tutorials
    Creating package file ~/ros/ros_tutorials/beginner_tutorials/Makefile
    Creating package file ~/ros/ros_tutorials/beginner_tutorials/manifest.xml
    Creating package file ~/ros/ros_tutorials/beginner_tutorials/CMakeLists.txt
    Creating package file ~/ros/ros_tutorials/beginner_tutorials/mainpage.dox
    
    Please edit beginner_tutorials/manifest.xml and mainpage.dox to finish creating your package

あなたは beginner_tutorials/manifest.xml を読みたくなるでしょう.マニフェストはパッケージがどのようにビルドされ・起動し・文書化されるかを定義するという ROS の中で重要な役割を持っています.

さて、ROSが新しく作ったパッケージを見つけることを確認しましょう。新しいディレクトリが発見されるように、新しいパッケージを作った際には、rospack profileを呼ぶのが便利です。

$ rospack profile
$ rospack find beginner_tutorials
  • YOUR_PACKAGE_PATH/beginner_tutorials

もしこれが失敗しているなら、ROS_PACKAGE_PATHに設定が足りなかったためにあなたの新しいパッケージを見つけられなかったと思われます。どのようにインストールしたかでsvnかbinaryから再度インストールの手順を確認してください。もし、現存するROS_PACKAGE_PATHの中にあるパスの中に作ってない場合は、新しいそのディレクトリをROS_PACKAGE_PATHの環境変数に加える必要があります。setup.shをroscdで移動するディレクトリで行ってください。

以下もmkdirを行ったディレクトリに移って、以下を打ってみてください。

$ export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:`pwd`/sandbox

パッケージのディレクトリに移動してみます.

$ roscd beginner_tutorials 
$ pwd
  • YOUR_PACKAGE_PATH/beginner_tutorials

先頭のパッケージの依存関係について

初期に roscreate-pkg を使うとき,少々のパッケージの依存関係が提供されています.

これらの先頭の依存関係は rospack ツールで見ることができます.

$ rospack depends1 beginner_tutorials 
  • std_msgs
    rospy
    roscpp

ここで見られるように,rospackroscreate-pkg を起動するときに使用する引数と同じ依存関係をリスト化します. これらのパッケージの依存関係はマニフェストファイルに補完されます.マニフェストファイルを見てみましょう.

$ roscd beginner_tutorials
$ cat manifest.xml
  • <package>
    
    ...
    
      <depend package="std_msgs"/>
      <depend package="rospy"/>
      <depend package="roscpp"/>
    
    </package>

間接的なパッケージの依存関係について

多くの場合,1つの依存関係はそれ自身が依存関係を持っています.例を挙げると,rospy は他の依存関係を持っています.

$ rospack depends1 rospy
  • roslib
    roslang

1つのパッケージは間接的な依存関係を持つことができます.幸運なことに rospack は全ての絡み合った依存関係を再帰的に決定することができます.

$ rospack depends beginner_tutorials
  • std_msgs
    roslang
    rospy
    roscpp

ROS クライアント ライブラリ

先ほどの例が rospyroscpp に依存していることが分かるでしょう.rospyroscppROS クライアント ライブラリです.クライアント ライブラリは ROS を通じて他のプログラミング言語とやりとりすることを可能にします.rospy は Python のためのクライアント ライブラリで,roscpp は C++ のためのクライアント ライブラリです.

ここであなたは新しい ROS パッケージを作成しました.次は ROS パッケージをビルドしてみましょう.

roscreate-pkg の周辺

roscreate-pkg が失敗したら,その理由はもしかして同一のディレクトリを2度作成しようとしているのかもしれません.これに対処するには, "roscreate" パッケージ内の "roscreatepkg.py" を編集する必要があります:

$ rosed roscreate roscreatepkg.py

75行目において,同じディレクトリを2度に作成しないようにチェックするようにします.

<<<<<< Old: 
  73    if uses_rospy:
  74        # create package/src/ for python files
  75        py_path = os.path.join(p, 'src')
  76        print "Creating python source directory", py_path
  77        os.makedirs(py_path)
>>>>>> New: 
  73    if uses_rospy:
  74        # create package/src/ for python files
  75        py_path = os.path.join(p, 'src')
  76        if not os.path.exists(py_path):
  77            print "Creating python source directory", py_path
  78            os.makedirs(py_path)

一度このファイルを保存したら,以下のようになっていることでしょう:

$ rm -rf beginner_tutorials/
$ roscreate-pkg beginner_tutorials std_msgs rospy roscpp
Creating package directory ~/ros/ros_tutorials/beginner_tutorials
Creating include directory ~/ros/ros_tutorials/beginner_tutorials/include/
beginner_tutorials
Creating cpp source directory ~/ros/ros_tutorials/beginner_tutorials/src
Creating python source directory ~/ros/ros_tutorials/beginner_tutorials/src/
beginner_tutorials
Creating package file ~/ros/ros_tutorials/beginner_tutorials/Makefile
Creating package file ~/ros/ros_tutorials/beginner_tutorials/manifest.xml
Creating package file ~/ros/ros_tutorials/beginner_tutorials/CMakeLists.txt
Creating package file ~/ros/ros_tutorials/beginner_tutorials/mainpage.dox

Please edit beginner_tutorials/manifest.xml and mainpage.dox to finish creating 
your package.

Review

今まで使用してきたコマンドのいくつかをリストにしましょう。

  • roscreate-pkg = ros+create-pkg : ROSのパッケージを作るのに必要なファイルをすべて生成します。
  • rospack = ros+pack(age) : ROSのパッケージに関係する情報を提供します。
  • rosstack = ros+stack : ROSのスタックに関係する情報を提供します。

Wiki: ja/ROS/Tutorials/rosbuild/CreatingPackagerosbuild (last edited 2014-08-17 12:57:29 by Moirai)