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

ROS ファイルシステム コンセプト: パッケージ | マニフェスト | スタック | スタック マニフェスト | msg | srv

ROS のソフトウェアはパッケージに集約されています.パッケージには便利なモジュールを構成する論理的な ROS ノードやROSから独立したライブラリ・データセット・設定ファイル・サードパーティ製ソフトウェア・その他が含まれています.これらのパッケージの目的はソフトウェアが簡便に再利用できるようにするための,簡単に使用できる機能を提供することです.一般的には,ROS パッケージは「十分な機能は便利だが,他のソフトウェアから使いにくくなるほどパッケージが重く難解になることは良くない」という,ゴルディロックス(訳注:絵本のタイトル.意味は”バランスの良い”)の思想を満たすことを一番に考えています.

パッケージは手作業でも roscreate-pkg といったツールを使っても簡単に作成することができます.ROS のパッケージはシンプルに ROS_ROOTROS_PACKAGE_PATH 以下に, manifest.xml を含んで存在します(ROS 環境変数を参照してください).パッケージは ROS スタックと統合されている場合もあります.

manifest.xml ファイルを読んだり書いたりするためには,ドキュメントのマニフェストの項を読んでください.

普通のファイルとディレクトリ

ROS パッケージはだいたい普通の構成をしています.そこには幾つかのディレクトリとファイルがあります.

  • bin/: コンパイル済みバイナリ

  • include/package_name: C++ ヘッダ (マニフェストに書き出されていることを確認してください)

  • msg/: メッセージ (msg) 型

  • src/package_name/: ソース ファイル.Python のソースは特に他のパッケージにエクスポートされます.

  • srv/: サービス (srv) 型

  • scripts/: 実行可能スクリプト

  • CMakeLists.txt: CMake ビルド ファイル (CMakeLists を参照してください)

  • manifest.xml: パッケージの マニフェスト

  • mainpage.dox: 多くのパッケージは各自の Doxygen のメインページをここに持っています.

コマンド-ライン ツール

パッケージは ROS 内部でファイルが統合されるときの,とても中心的な概念です.そのため ROS にはこれらを整理するための幾つかのツールが用意されています.これらは:

  • rospack: パッケージについての情報を検索します.ビルド システムrospack をパッケージを配置して,その依存関係をビルドするために使用しています.

  • roscreate-pkg: 新しくパッケージを作成します.

  • rosmake: パッケージとその依存関係をビルドします.

  • rosdep: パッケージの依存関係をシステムにインストールします.

  • rxdeps: グラフでパッケージの依存関係を表示します.

普通の Unix のシェルに,パッケージの扱いを助ける機能を追加する拡張があります.一番良く使われているのは rosbash で,これは普通の Unix のシェルに ros を語頭につけたものです.よく使われるのは,roscd で,これはパッケージやスタックを cd で言うディレクトリのように扱うためのものです.

roscd roscpp_tutorials

クライアント ライブラリのサポート

Python

Python では,roslib パッケージ内のroslib.packages モジュールを ROS パッケージについての情報を得るために使うことができます.例えば:

import roslib.packages

# 全てのパッケージをリスト化する(rospack list と同等)
roslib.packages.list_pkgs() 

# rospy_tutorials のファイル パスを取得する
roslib.packages.get_pkg_dir('rospy_tutorials')

# rospy_tutorials/talker.py のファイル パスを取得する
roslib.packages.find_node('rospy_tutorials', 'talker.py') 

C++

C++では,roslib パッケージ内のros::package を ROS パッケージについての情報を得るために使うことができます.例えば:

#include <ros/package.h>

...

  std::string path = ros::package::getPath("roslib");
  using package::V_string;
  V_string packages;
  ros::package::getAll(packages);

Wiki: ja/Packages (last edited 2010-01-07 17:20:49 by KentaYonekura)