(訳注:最新の情報は原文を参照してください.)

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 と関連させます.

以下のコマンドを起動してください:

$ roscd ros_tutorials
$ roscreate-pkg beginner_tutorials std_msgs rospy roscpp

注意: ROS 0.10 リリースにはバグがあります.このバグは次のリリースでフィックスされます.すぐに使う場合は,以下のファイルの76行目を以下に示す通りに変更してください.

ros/tools/roscreate/src/roscreate/roscreatepkg.py

変更前: py_path = os.path.join(p, 'src')

変更後: py_path = os.path.join(p, 'src', package)

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

  • 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 find beginner_tutorials 
  • ~/ros/pkgs/ros_tutorials/beginner_tutorials

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

$ roscd beginner_tutorials 
$ pwd
  • ~/ros/pkgs/ros_tutorials/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
  • genmsg_cpp
    roslib
    std_msgs
    roslang
    rospy
    xmlrpc++
    rosconsole
    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.

Wiki: ja/ROS/Tutorials/CreatingPackage (last edited 2010-01-04 09:52:32 by KentaYonekura)