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_msgsと roscpp、 rospyを依存パッケージとする。
まず、 ~/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 クライアント ライブラリ
以前の例からrospyとroscppの依存パッケージは何なのか疑問に思っているかもしれない。rospyとroscppはクライアントライブラリである。クライアントライブラリによってROSを通じて異なるプログラミング言語間で通信できるようになる。rospyはPythonのクライアントライブラリ、roscppはC++のクライアントライブラリである。
レビュー
これまで使ってきたコマンドをいくつか挙げておく。
- roscreate-pkg = ros+create-pkg : ROSパッケージを作成するために必要な全てのファイルを作成する。
- rospack = ros+pack(age) : ROSパッケージに関する情報を提示する。
- rosstack = ros+stack : ROSスタックいn関する情報を提示する。