roscreateの使用

パッケージを作成する前にroscreate-pkgコマンドラインツールがどのように機能するかを確認する。このコマンドは新たなROS pacageを作成する。ROS packageは全て manifests, CMakeLists.txt, mainpage.dox, and Makefilesといった類似したファイルから構成される。roscreate-pkgにより新規パッケージを手動で作成する労力が不要になり、ビルドファイルやmanifestを手動で作成することによるエラーを削減できる。

カレントディレクトリに新規パーッケージを作成するには以下のように実行する。

# roscreate-pkg [package_name]

依存パッケージを指定することもできる。

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

新規ROS Packageの作成

各自のホームディレクトリかプロジェクトディレクトリへ移動してbeginner_tutorialsパッケージを作成する。ROS packageで共通のstd_msgsroscpprospyを依存パッケージとする。

まず、 ~/fuerte_workspace/sandbox へ移動する。

$ cd ~/fuerte_workspace/sandbox

Fuerte以降のバージョンを使用しているの場合は代わりに以下のように実行する。

$ roscd
$ cd sandbox

次にパッケージそ作成する。

$ roscreate-pkg beginner_tutorials std_msgs rospy roscpp

以下のような出力が確認できる。

Creating package directory ~/fuerte_workspace/sandbox/beginner_tutorials
Creating include directory ~/fuerte_workspace/sandbox/beginner_tutorials/include/beginner_tutorials
Creating cpp source directory ~/ros/ros_tutorials/beginner_tutorials/src
Creating python source directory ~/fuerte_workspace/sandbox/beginner_tutorials/src/beginner_tutorials
Creating package file ~/fuerte_workspace/sandbox/beginner_tutorials/Makefile
Creating package file ~/fuerte_workspace/sandbox/beginner_tutorials/manifest.xml
Creating package file ~/fuerte_workspace/sandbox/beginner_tutorials/CMakeLists.txt
Creating package file ~/fuerte_workspace/sandbox/beginner_tutorials/mainpage.dox

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

beginner_tutorials/manifest.xmlを見てみる。manifestsはROSに置いてパッケージがどのようんいビルド・実行・記述されるのかを定義するという重要な役割を果たしている。

では、ROSが今作成したパッケージを発見できることを確認してみる。新規ディレクトリが見つかるようにpathを変更してからrospack profileを実行するのが有効である。

$ rospack profile
$ rospack find beginner_tutorials 
  • YOUR_PACKAGE_PATH/beginner_tutorials

これに失敗した場合、ROSが作成したパッケージを発見できていないということであり、ROS_PACKAGE_PATHの問題である可能性がある。SVNまたはバイナリ(どちらかはROSをインストールした方法による)からのインストール時のセットアップ方法の記述箇所を参照すること。既存のパッケージパス外にあるパッケージを作成したり追加したりした場合、そのパスを含むようにROS_PACKAGE_PATH環境変数を修正する必要がある。fuerteのワークスペースでsetup.shを再読み込みすること。

パッケージのディレクトリに移動してみる。

$ roscd beginner_tutorials 
$ pwd
  • YOUR_PACKAGE_PATH/beginner_tutorials

First-order package dependencies

以前にroscreate-pkgを使用していた際、依存パッケージが少しだけ用意されていた。 これらのfirst-order依存パッケージはrospackツールにより再確認できる。

(2013年7月9日)バグが報告され、groovyのrospackでは既に修正されているが、パッケージに反映されるのは少し時間がかかるかもしれない。もし、次のコマンドに関してこれに類似した問題が出たらスキップしてもよい。

$ rospack depends1 beginner_tutorials 
  • std_msgs
    rospy
    roscpp

知っての通り、rospackコマンドはroscreate-pkgを実行する際の引数として用いた依存パッケージを出力する。 これらの依存パッケージはmanifestファイルに記録されている。manifestファイルの内容を確認してみる。

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

間接依存パッケージ

多くの場合、ある依存パッケージにもそれ自身の依存パーッケージが存在する。例えば、rospyには他の依存パッケージがある。

(2013年7月9日)バグが報告され、groovyのrospackでは既に修正されているが、パッケージに反映されるのは少し時間がかかるかもしれない。もし、次のコマンドに関してこれに類似した問題が出たらスキップしてもよい。

$ rospack depends1 rospy
  • roslib
    roslang

パッケージによっては非常に多数の間接依存パッケージがある場合がある。幸いrospackにより全ての入れ子になった依存パッケージを再帰的に決定することができる。

$ rospack depends beginner_tutorials
  • rospack
    roslib
    std_msgs
    rosgraph_msgs
    rosbuild
    roslang
    rospy
    cpp_common
    roscpp_traits
    rostime
    roscpp_serialization
    xmlrpcpp
    rosconsole
    roscpp

注意: Fuerteの場合は依存パッケージのリストは短くなる。

  • std_msgs
    roslang
    rospy
    roscpp

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

以前の例からrospyroscppの依存パッケージは何なのか疑問に思っているかもしれない。rospyroscppクライアントライブラリである。クライアントライブラリによってROSを通じて異なるプログラミング言語間で通信できるようになる。rospyはPythonのクライアントライブラリ、roscppはC++のクライアントライブラリである。

レビュー

これまで使ってきたコマンドをいくつか挙げておく。

  • roscreate-pkg = ros+create-pkg : ROSパッケージを作成するために必要な全てのファイルを作成する。
  • rospack = ros+pack(age) : ROSパッケージに関する情報を提示する。
  • rosstack = ros+stack : ROSスタックいn関する情報を提示する。

Wiki: ja/ROS/Tutorials/rosbuild/CreatingPackage (last edited 2013-07-23 04:41:14 by K.KOJIMA)