<<TOC(4)>>

##= ROS ファイルシステムの紹介 =
== ファイルシステム概念のてっとりばやいおさらい ==
 * [[Packages|パッケージ]](Packages): パッケージはROSのコードを構成するソフトウエア構造の一単位です。各パッケージにはライブラリ、実行ファイルやスクリプト等何でも含まれます.
 * [[Manifest|マニフェスト]]([[catkin/package.xml|package.xml]]): マニフェストはパッケージの説明書です.パッケージ間の依存関係を明示し、パッケージのバージョン、ライセンス、メンテナンス担当者等といった付加的な情報を保存します

{{{{#!wiki blue/solid
<<SeeSaw()>>{{{  }}}<<SeeSaw(stacks, toshow="note about stacks")>>
{{{#!wiki seesaw/stacks section
## '''Note:''' [[rosbuild]] users might be wondering where stacks went, the concept of stacks was removed with catkin to simplify the growing code base and to support better distribution of packages. In [[catkin]] you can define [[catkin/migrating_from_rosbuild#Metapackages_and_the_Elimination_of_Stacks|metapackages]] to collect similar packages and multiple packages can reside in a single VCS repository. Those two features replace the functionality of stacks.
'''注釈:''' [[rosbuild]]のユーザはスタックがどこにいってしまったのかと驚くことでしょう. スタックの概念は, 増え続けるコードを単純化し, さらに優れたパッケージ配布の方法をサポートするために, catkinにより除去されました. [[catkin]]では, 類似のパッケージ群を収集deできる[[catkin/migrating_from_rosbuild#Metapackages_and_the_Elimination_of_Stacks|メタパッケージ]]を定義し, 複数のパッケージを一つのVCSレポジトリに存在させることができます. それらの二つの特徴はスタックの機能を置き換える結果となりました.
}}}
}}}}

== ファイルシステム ツール ==
ROSではコードがたくさんのROSパッケージとして展開されています.もし`ls` や `cd` のようなコマンドライン-ツールで操作するのであれば,うんざりしてしまうことでしょう.そこで ROS はあなたを助ける専用のツールを提供します

=== rospackを使う ===
`rospack`コマンドはパッケージの情報を取得できます.このチュートリアルでは findというパッケージのパスを返すオプションのみカバーします。

使い方:

{{{
$ rospack find [package_name]
}}}
例:

{{{
$ rospack find roscpp
}}}

例を実行すると、以下のように結果が返ります:

 . {{{
YOUR_INSTALL_PATH/share/roscpp
}}}

たとえば、もしあなたがUbuntuのバイナリインストールで環境構築していたら,以下のように表示されるでしょう

 . {{{
/opt/ros/hydro/share/roscpp
}}}


=== roscd を使う ===
`roscd`コマンドはroscd は rosbash の一部です.(cd)のようにパッケージのディレクトリへ移動できます.

使い方:

{{{
$ roscd [locationname[/subdir]]
}}}
例を実行してみましょう:

{{{
$ roscd roscpp
}}}
roscpp package ディレクトリへ移動したことを確認するために,Unix のコマンド [[http://ss64.com/bash/pwd.html|pwd]]を使用して,現在のワーキング ディレクトリを表示してみましょう

{{{
$ pwd
}}}
このように表示されるはずです:

 . {{{
YOUR_INSTALL_PATH/share/roscpp
}}}

この {{{YOUR_INSTALL_PATH/share/roscpp}}} と同じパスは先ほどの例の {{{rospack find}}} でも見ることができます.

ROSのほかのコマンドのようにroscdは、$ROS_PACKAGE_PATHの中のディレクトリ以下にあるROSのパッケージのみを探し出します。何が、$ROS_PACKAGE_PATHに登録されているかを見るには、以下のようにします:

{{{
$ echo $ROS_PACKAGE_PATH
}}}

$ROS_PACKAGE_PATHはROSパッケージがどこにあるかのディレクトリのリストを' : '(コロン)区切りで保持しています。典型的な$ROS_PACKAGE_PATHはこのようにみえるでしょう:

 . {{{
/opt/ros/hydro/share:/opt/ros/hydro/stacks
}}}
ほかの環境パスと同様に、$ROS_PACKAGE_PATHに' : '(コロン)を区切り文字として使うことでさらにディレクトリを追加することができます。

=== サブディレクトリ ===
{{{roscd}}} ではパッケージやスタックのサブディレクトリへ移動することもできます.

以下を実行してみましょう:

{{{
$ roscd roscpp/cmake
$ pwd
}}}
このように表示されるはずです:

 . {{{
YOUR_INSTALL_PATH/share/roscpp/cmake
}}}


=== roscd log ===
{{{roscd log}}} は ROS のログファイル保管フォルダへ移動します.まだ何のROSプログラムも実行していない場合,ログファイルはまだ存在しないというエラーが返るので注意して下さい.

すでに何かROSのプログラムを走らせていたら、以下を実行してみましょう:
{{{
$ roscd log
}}}

=== rosls を使う ===
`rosls` は [[rosbash]] の一部です. 普通の[[http://ss64.com/bash/ls.html|ls]] と同じように振る舞い、パッケージ名を引数にして実行し、結果は絶対パスではなく、パッケージ内の名前を直接リストアップします。

使い方:

{{{
$ rosls [locationname[/subdir]]
}}}
例:

{{{
$ rosls roscpp_tutorials
}}}
実行例:

 . {{{
cmake  package.xml  srv
}}}

=== タブ補完 ===
パッケージ名をすべてタイピングすることは煩雑な作業です.先ほどの {{{roscpp_tutorials}}} はかなり長い名前です.幸運なことに,一部のROSツールは[[http://en.wikipedia.org/wiki/Command_line_completion|タブ補完]]に対応しています.

以下のようにタイプして:

{{{
$ roscd roscpp_tut <<< ここでタブキーを押す >>>
}}}
'''タブ'''を押すと,コマンドラインは可能な限り不足分を埋めます:

 . {{{
$ roscd roscpp_tutorials/
}}}

{{{roscpp_tutorials}}} が今のところ{{{roscpp_tut}}}から始める唯一のROSパッケージなので、このように動作します。

次に以下のようにタイプして:

{{{
$ roscd tur <<< ここでタブを押す >>>
}}}
'''タブ'''を押すと,コマンドラインは可能な限り不足分を埋めます:

 . {{{
$ roscd turtle
}}}

しかしながら,この場合は {{{turtle_}}} から始まるパッケージがいくつかあります.

もう一度タブを押すと,{{{turtle_}}}から始まるすべてのROSパッケージが表示されます:

## . {{{
##turtle_actionlib/  turtlesim/         turtle_tf/
##}}}
 . {{{
turtle_actionlib/               turtlebot_dashboard/            turtlebot_panorama/
turtlebot/                      turtlebot_description/          turtlebot_rviz_launchers/
turtlebot_actions/              turtlebot_follower/             turtlebot_simulator/
turtlebot_apps/                 turtlebot_gazebo/               turtlebot_teleop/
turtlebot_bringup/              turtlebot_interactive_markers/  turtlebot_viz/
turtlebot_calibration/          turtlebot_msgs/                 turtlesim/
turtlebot_core_apps/            turtlebot_navigation/    
}}}

コマンドラインには,まだこのように表示されているはずです.

 . {{{
$ roscd turtle
}}}

{{{turtle_}}} の後に {{{s}}} をタイプし, '''タブ'''を押しましょう.

{{{
$ roscd turtles<<< ここでタブを押す >>>
}}}
ここでは {{{turtles}}} から始まるパッケージは一つしかないので,このように表示されるはずです:

 . {{{
$ roscd turtlesim/
}}}

== 復習 ==
あなたは ROS ツールの命名に規則があることに気付いたかもしれません:

 * rospack = ros + pack(age)
 * roscd = ros + cd
 * rosls = ros + ls

この命名規則は多くの ROS ツールで使用されています.