(訳注:最新の情報は原文を参照してください.)
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パッケージを作る
Contents
ROS ファイルシステムの紹介
ファイルシステム概念のてっとりばやいおさらい
パッケージ(Packages): パッケージはROSのコードを構成するソフトウエア構造の一単位です。各パッケージにはライブラリ、実行ファイルやスクリプト等何でも含まれます.
マニフェスト: マニフェストは パッケージ の説明です.これは パッケージ 間の依存関係を宣言するという,一番重要な役目があります.
スタック: スタックは高レベルのライブラリを形成する パッケージ の集合です.
スタック マニフェスト: これらは普通の マニフェスト と同じですが, スタック 用のものです.
ファイルシステムをみると,パッケージ と スタック が分かれていることが容易に分かります:
- 一つのパッケージは一つの manifest.xml ファイルがある一つのディレクトリです.
- 一つのスタックは一つの stack.xml ファイルがある一つのディレクトリです.
ファイルシステム ツール
ROS ではとても多くのコードが多くのパッケージやスタックと交差しながら広がっています.もし ls や cd のようなコマンドライン-ツールで操作するのであれば,うんざりしてしまうことでしょう.そこで ROS はあなたを助ける専用のツールを提供します.
rospack と rosstack の使用
rospack と rosstack は rospack の一部です.これらを使ってあなたはパッケージとスタックの情報を得ることができます.このチュートリアルでは find というパッケージかスタックへのパスを返すオプションのみカバーします.
使い方:
$ rospack find [package_name] $ rosstack find [stack_name]
例:
$ rospack find roscpp
実行例:
YOUR_INSTALL_PATH/share/roscpp
たとえば、もしあなたがUbuntuのバイナリインストールを使ったなら,以下のように表示されることでしょう.
/opt/ros/fuerte/share/roscpp
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を変えていなければ、以下のようになるはずです。
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 の使い方
rosls は rosbash の一部です. 普通の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 ツールで使用されています.
Contents
ファイルシステム概念のてっとりばやいおさらい
パッケージ(Packages): パッケージはROSのコードを構成するソフトウエア構造の一単位です。各パッケージにはライブラリ、実行ファイルやスクリプト等何でも含まれます.
マニフェスト(package.xml): マニフェストはパッケージの説明書です.パッケージ間の依存関係を明示し、パッケージのバージョン、ライセンス、メンテナンス担当者等といった付加的な情報を保存します
ファイルシステム ツール
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 のコマンド 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 の一部です. 普通の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 の中を自由に歩き回ることができるようになりました.次は,新しくパッケージを作ってみましょう.