Contents
ROS パッケージの作成
roscreate の使い方
パッケージを作成する前に roscreate-pkg コマンドラインツールがどのような働きをするのか見てみましょう.ここでは新規に ROS パッケージを作成します.全ての ROS パッケージは manifests・CMakeLists.txt・mainpage.dox・Makefile といった多くの似通ったファイル群で構成されています.roscreate-pkg は手作業で行うパッケージ新規作成において多くの退屈な手間を軽減します.また,ファイルやマニフェストを手作業で作成する上でよくある間違いを防ぎます.
新しいパッケージを現在のディレクトリで作成します:
$ roscreate-pkg [package_name]
パッケージの依存関係についても指定します:
$ roscreate-pkg [package_name] [depend1] [depend2] [depend3]
あたらしく ROS パッケージを作成する
ここでは ros_tutorials ディレクトリに入って,beginner_tutorials パッケージを作成します.これには一般的な ROS パッケージである std_msgs・roscpp・rospy と関連させます.
まず、~/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
ここで見られるように,rospack は roscreate-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 クライアント ライブラリ
先ほどの例が rospy と roscpp に依存していることが分かるでしょう.rospy と roscpp は ROS クライアント ライブラリです.クライアント ライブラリは 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のスタックに関係する情報を提供します。