(訳注:最新の情報は原文を参照してください.)
Contents
ROS のソフトウェアはパッケージに集約されています.パッケージには便利なモジュールを構成する論理的な ROS ノードやROSから独立したライブラリ・データセット・設定ファイル・サードパーティ製ソフトウェア・その他が含まれています.これらのパッケージの目的はソフトウェアが簡便に再利用できるようにするための,簡単に使用できる機能を提供することです.一般的には,ROS パッケージは「十分な機能は便利だが,他のソフトウェアから使いにくくなるほどパッケージが重く難解になることは良くない」という,ゴルディロックス(訳注:絵本のタイトル.意味は”バランスの良い”)の思想を満たすことを一番に考えています.
パッケージは手作業でも roscreate-pkg といったツールを使っても簡単に作成することができます.ROS のパッケージはシンプルに ROS_ROOT か ROS_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);