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

Note: This tutorial assumes that you have completed the previous tutorials: ROS環境のインストールとセットアップ.
(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

ROSのファイルシステムを学ぶ

Description: このチュートリアルでは,ROSのファイルシステムのコンセプトについて知り,roscd や rosls ならびにrospackなどの専用のコマンドツールの使い方も学びます.

Tutorial Level: BEGINNER

Next Tutorial: ROSパッケージを作る

ROS ファイルシステムの紹介

ファイルシステム概念のてっとりばやいおさらい

  • パッケージ(Packages): パッケージはROSのコードを構成するソフトウエア構造の一単位です。各パッケージにはライブラリ、実行ファイルやスクリプト等何でも含まれます.

  • マニフェスト: マニフェストは パッケージ の説明です.これは パッケージ 間の依存関係を宣言するという,一番重要な役目があります.

  • スタック: スタックは高レベルのライブラリを形成する パッケージ の集合です.

  • スタック マニフェスト: これらは普通の マニフェスト と同じですが, スタック 用のものです.

ファイルシステムをみると,パッケージスタック が分かれていることが容易に分かります:

  • 一つのパッケージは一つの manifest.xml ファイルがある一つのディレクトリです.
  • 一つのスタックは一つの stack.xml ファイルがある一つのディレクトリです.


ROS/Tutorials/NavigatingTheFilesystem/filesystem_layout.png

ファイルシステム ツール

ROS ではとても多くのコードが多くのパッケージやスタックと交差しながら広がっています.もし lscd のようなコマンドライン-ツールで操作するのであれば,うんざりしてしまうことでしょう.そこで ROS はあなたを助ける専用のツールを提供します.

rospack と rosstack の使用

rospackrosstackrospack の一部です.これらを使ってあなたはパッケージとスタックの情報を得ることができます.このチュートリアルでは find というパッケージかスタックへのパスを返すオプションのみカバーします.

使い方:

$ rospack find [package_name]
$ rosstack find [stack_name]

例:

$ rospack find roscpp

実行例:

  • YOUR_INSTALL_PATH/share/roscpp

たとえば、もしあなたがUbuntuのバイナリインストールを使ったなら,以下のように表示されることでしょう.

  • /opt/ros/fuerte/share/roscpp

roscd の使用

roscdrosbash の一部です.(cd)のようにパッケージかスタックのディレクトリへ移動できます.

使い方:

$ roscd [locationname[/subdir]]

この例を実行してみてください:

$ roscd roscpp

roscpp package ディレクトリへ移動したことを確認するために,Unix のコマンド 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を変えていなければ、以下のようになるはずです。

  • YOUR_INSTALL_PATH/share:YOUR_INSTALL_PATH/stacks

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

サブディレクトリ

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

やってみましょう:

$ roscd roscpp/cmake
$ pwd

このように表示されるはずです:

  • YOUR_INSTALL_PATH/share/roscpp/cmake

roscd の特別な場合

roscd で移動できる, パッケージ でも スタック でもない特別な場所があります.

roscd を引数なしで実行する

roscd を引数なしで実行すると, $ROS_WORKSPACE へ移動します.(この移動先はパッケージやスタックではありません。)やってみましょう:

$ roscd
$ pwd

このように表示されるはずです:

  •  /home/user/fuerte_workspace

このパスは $ROS_WORKSPACE で宣言されたものと同じです.やってみましょう.

$ echo $ROS_WORKSPACE

Fuerteより前のROSのヴァージョンでは、$ROS_ROOTでした。

roscd log

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

やってみましょう:

$ roscd log

rosls の使い方

roslsrosbash の一部です. 普通のls と同じように振る舞い、指パッケージやスタック、よく使うディレクトリのパスではなく、それらの名前を引数にして実行します。

使い方:

$ rosls [locationname[/subdir]]

例:

$ rosls roscpp_tutorials

実行例:

  • bin  cmake  manifest.xml  srv

タブ補完

パッケージ名をすべてタイピングすることは煩雑な作業です.先例の roscpp_tutorials はかなり長い名前です.幸運なことに,一部のROSツールはタブ補完に対応しています.

タイピングし始めて:

$ roscd roscpp_tut <<< ここでタブキーを押す >>>

タブを押すと,コマンドライン入力の不足分を埋めます:

  • $ roscd roscpp_tutorials/

この働きは,roscpp_tutorials が現在 ROS パッケージの中で唯一 roscpp_tut から始まっているからです.

タイピングし始めて:

$ roscd tur <<< ここでタブを押す >>>

タブを押すと,コマンドラインは可能な限り不足分を空白を埋めます:

  • $ roscd turtle

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

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

  • turtle_actionlib/  turtlesim/         turtle_tf/

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

  • $ roscd turtle

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

$ roscd turtles<<< ここでタブを押す >>>

ここでは turtles から始まるパッケージは一つしかないので,このように表示されるはずです:

  • $ roscd turtlesim/

復習

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

  • rospack = ros + pack(age)
  • rosstack = ros + stack
  • roscd = ros + cd
  • rosls = ros + ls

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

ファイルシステム概念のてっとりばやいおさらい

  • パッケージ(Packages): パッケージはROSのコードを構成するソフトウエア構造の一単位です。各パッケージにはライブラリ、実行ファイルやスクリプト等何でも含まれます.

  • マニフェスト(package.xml): マニフェストはパッケージの説明書です.パッケージ間の依存関係を明示し、パッケージのバージョン、ライセンス、メンテナンス担当者等といった付加的な情報を保存します

Show    note about stacks

注釈: rosbuildのユーザはスタックがどこにいってしまったのかと驚くことでしょう. スタックの概念は, 増え続けるコードを単純化し, さらに優れたパッケージ配布の方法をサポートするために, catkinにより除去されました. catkinでは, 類似のパッケージ群を収集deできるメタパッケージを定義し, 複数のパッケージを一つのVCSレポジトリに存在させることができます. それらの二つの特徴はスタックの機能を置き換える結果となりました.

ファイルシステム ツール

ROSではコードがたくさんのROSパッケージとして展開されています.もしlscd のようなコマンドライン-ツールで操作するのであれば,うんざりしてしまうことでしょう.そこで 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 のコマンド 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 を使う

roslsrosbash の一部です. 普通のls と同じように振る舞い、パッケージ名を引数にして実行し、結果は絶対パスではなく、パッケージ内の名前を直接リストアップします。

使い方:

$ rosls [locationname[/subdir]]

例:

$ rosls roscpp_tutorials

実行例:

  • cmake  package.xml  srv

タブ補完

パッケージ名をすべてタイピングすることは煩雑な作業です.先ほどの roscpp_tutorials はかなり長い名前です.幸運なことに,一部のROSツールはタブ補完に対応しています.

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

$ roscd roscpp_tut <<< ここでタブキーを押す >>>

タブを押すと,コマンドラインは可能な限り不足分を埋めます:

  • $ roscd roscpp_tutorials/

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

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

$ roscd tur <<< ここでタブを押す >>>

タブを押すと,コマンドラインは可能な限り不足分を埋めます:

  • $ roscd turtle

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

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

  • 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 ツールで使用されています.

これであなたは ROS の中を自由に歩き回ることができるようになりました.次は,新しくパッケージを作ってみましょう.

Wiki: ja/ROS/Tutorials/NavigatingTheFilesystem (last edited 2015-10-13 13:16:16 by s_ktr)