RTC:Stage - 日本語

はじめに

RTC:StageはOpenRTM-aist用のRTコンポーネントです。 Stage というシミュレータの 仮想空間へのアクセスを提供します。仮想空間のモデルは他のコンポーネントで 操作することが可能で、仮想空間内のデータを他のコンポーネントで使うことも可能です。 大きな仮想空間でもコンポーネントを使いやすい小さいサイズにフィルタリングする 機能も提供しています。 また、コンポーネントの生成や追加によりシミュレータ側で新しいモデルを作成す る事が可能なプラグイン機能もサポートしてます。

本コンポーネントの特徴の一つは、コンポーネントのポートが自動的に仮想空間に対応 づけられることです。仮想空間に複数のロボットがあっても、コンポーネント側で別々の ポートにより操作することが可能です。また、ポートの名前も設定することが可能です。 ポート名 を参照してください。

条件

RTC:StageはOpenRTM-aistのC++版と Stage v4 が必要です。

RTC:Stageは CMake を使います。CMake 2.6以上が必要です。

プラグインを使う場合はGNUの libtool にあるlibltdlが 必要です。

Stage自体はWindowsでは使えないので、コンポーネントはLinuxもしくは、MacOS Xが必要です。

インストール

インストーラ

現在、インストーラはありません。

ソースから

ソースを使う場合は以下の手順でインストールしてください。

  • ソースをダウンロードして解凍してください:

    tar -xvzf rtcstage-2.0.0.tar.gz
  • 解凍されたフォルダに入ってください:

    cd rtcstage-2.0.0
  • build フォルダを作ってください:

    mkdir build
  • `` build`` フォルダに入ってください:

    cd build
  • CMakeを実行してください:

    cmake ../
  • エラーが出無い場合、makeを実行してください:

    make
    
  • make install でコンポーネントをインストールしてください。選択された インストール場所に書き込み権限があるかを確認してください:

    ``make install``
  • インストールする場所はccmakeを実行して CMAKE_INSTALL_PREFIX を 設定することで変更が可能です。

    ccmake ../

ここまでで、コンポーネントが使えるようになりました。コンフィグレーションは次のセクションを 参照してください。

RTC:Stageは rtcstage_standalone を実行( ${prefix}/bin に インストールされます)することでスタンドアローンモードで実行することができます。 あるいは、 librtcstage.so を初期化関数の rtc_init を利用して、 マネージャにロードすることができます。このライブラリは ${prefix}/lib または ${prefix}/lib64 にインストールされます。

コンフィグレーション

RTC:Stageは仮想空間と一致するポートをダイナミックに作るため特別な起動方法を 使います。このため、コンフィグレーションはRTSystemEditorやrtshellによってではなく、 rtc.confなどのコンフィグレーションファイルでパラメータを設定する必要があります。

コンポーネントのコンフィグレーションを設定するために、以下のようなファイルを作ってください:

configuration.active_config: simple

conf.simple.world_file: /usr/local/share/stage/worlds/simple.world
conf.simple.gui_x: 640
conf.simple.gui_y: 480
conf.simple.limit_models:

一つのファイルで複数のコンフィグレーションセットを設定することができます。 上記ファイルの最初の行では、起動時のコンフィグレーションセットを指定してます。 ファイルに正しい名前をつけ(例: stage.conf )、 rtc.conf に以下の行を 追加してください:

Simulation.RTC_Stage.config_file: stage.conf

本コンポーネントで使えるコンフィグレーションパラメータについては、 以下のテーブルを参照してください。

パラメータ 意味
world_file ロードするワールドファイルです。Stageの説明書を参照してください。Stageをインストールする時、サンプルワールドファイルがインストールされます。
gui_x シミュレータのウィンドウの幅です。
gui_y シミュレータのウィンドウの高さです。
limit_models モデルのフィルターです。 モデルフィルタ を参照してください。
plugins プロキシープラグインです。 プラグインプロキシー を参照してください。

ポート

コンポーネントは 初期化される時 に提供するポートをダイナミックに作ります。

ポート名

ポート名は仮想空間を反映し、それらがどのモデルにアクセスを提供するかを示します。例えば、 仮想空間に「r0」という名前のロボットがあれば、そのロボットの速度コントロール、 オドメトリ出力、幾何学サービスなどへのアクセスを提供するポートが作られます。これらのポートはすべて 接頭辞に「r0_」が付きます。ポートがどのように作成されるかの例については、 以下のテーブルを参照してください。特殊文事(「.」と「:」)が「_」 に取り替えられることに注意してください。

モデル種類 モデル名 ポート名
Robot r0 r0_vel_control
Laser r0.laser:0 r0_laser_0_ranges
Camera r0.camera:1 r0_camera_1_image

モデルプロキシー

RTC:Stageコンポーネントは、仮想空間に含まれているモデルへのアクセスを提供する ためにモデルプロキシーを使用します。仮想空間のモデルのインスタンスはそれぞれコンポーネント のモデルプロキシーのインスタンスに直接対応付けられます。いくつかのプロキシーはコンポーネントに よって提供されています。これらはStageでサポートされている最も人気なモデルをカバーします。 これらは以下のテーブルで述べられています。

プロキシーが提供されていないStageのモデルを使用したい場合、プラグインプロキシーを 作ることが可能です。詳細については プラグインプロキシー を参照してください。

プロキシー ポート データ形 ポートの意味
Actuator vel_control TimedDouble アクチュエータの速度制御。
pos_control TimedDouble アクチュエータの位置制御。
state ActArrayState アクチュエータの現在の状態。
current_vel TimedDouble アクチュエータの現在の速度。
svc GetGeometry2D アクチュエータの位置とサイズの取得。
Camera control TimedPoint2D パンとティルトに対するコントロール。
image CameraImage カメラからのイメージ(RGBA)。
depth CameraImage カメラからの深さイメージ(8ビット)。
svc GetGeometry2D カメラの位置とサイズの取得。
Fiducial fiducials Fiducials 現在検知されたfiducialのリスト。
svc GetGeometry2D Fiducialセンサーの位置とサイズの取得。
Gripper state GripperState グリッパーの状態。
svc GetGeometry2D グリッパーの位置とサイズの取得。
  GripperControl グリッパーの開閉。
Laser ranges RangeData レンジデータ。
intensities IntensityData インテンシティーデータ。
svc GetGeometry2D レーザの位置とサイズの取得。
Position vel_control TimedVelocity2D ロボットの速度制御。
pose_control TimedPose2D ロボットの位置制御。
current_vel TimedVelocity2D ロボットの現在の速度。
odometry TimedPose2D ロボットの現在のオドメトリー。
svc GetGeometry2D ロボットの位置とサイズの取得。
  SetOdometry2D ロボットの現在のオドメトリーの設定。

モデルフィルタ

多くのモデルのシミュレーションを行う場合、プロキシーされたモデル、そしてコンポーネントによって提供 されるポートの数は収集不可能になるかもしれません。これを回避するために、ユーザはコンポーネントの コンフィグレーションでモデル名フィルタを指定することができます。コンポーネントはフィルタに 含まれたモデルのプロキシーだけを作成します。

フィルタのフォーマットはコンマによって区切られたストリングのリストです。それぞれのストリングが フィルタです。モデル名は、プロキシーが作成されるために少なくとも一つのフィルタと一致する必要 があります。ワイルドカード(「*」)はフレキシブルなフィルタを指定するために使用することができます。 フィルタフォーマットを以下のテーブルに示します。

フィルター 影響
filter モデル名が全て一致。
*filter モデル名の最後のストリングが一致。
filter* モデル名の先頭のストリングが一致。
*filter* モデル名の一部のストリングが一致。
filter1*,filter2* 二つのフィルター。

例えば、2台のロボット、「r0」及び「r1」を含んでいるシミュレーションを考慮してください。 「r0」にはレーザーセンサー及びカメラがあります。「r1」には二つのレーザーセンサーがあります。 シミュレートされたコンポーネントは、以下のモデルにプロキシーを提供します。

  • r0
  • r0.camera:0
  • r0.laser:0
  • r1
  • r1.laser:0
  • r1.laser:1

フィルタなしでは、これは多くのポートを備えたRTC:Stageのインスタンスを生産します。ユーザが単に 利用可能なモデルの一部だけに興味を持っていれば、適切なフィルタによってプロキシーの数を制限することが できます。以下のテーブルは、異なるフィルタストリングでプロキシー されたモデルの例を示します。

フィルタ 作成されたプロキシー
r0 r0
r0* r0, r0.camera:0, r0.laser:0
*camera:0 r0.camera:0
*:0 r0.camera:0, r0.laser:0, r1.laser:0
*laser* r0.laser:0, r1.laser:0, r1.laser:1
r0.laser*,r1.laser* r0.laser:0, r1.laser:0, r1.laser:1
r1,*laser:0 r0.laser:0, r1, r1.laser:0, r1.laser:1

プラグインプロキシー

Stageシミュレータはモデルプラグインを書くことをサポートします。これらは、新しいデバイスタイプが Stage自体を修正せずに、容易にシミュレートすることを可能にするため、シミュレーションでの機能の追加 を提供します。多くのロボット開発者がこの方法で新しい装備を実装したいと思うかもしれません。 そのようなモデルはRTC:Stageではデフォルトではサポートされません。サポートをするために、モデル プラグインに合うプロキシープラグインを作成しなければなりません。プロキシープラグインも ModelPosition モデルのようなStageに組み込まれたモデルのために作成することができます。また、 RTC:Stageに含まれたプロキシーを無視する、新しいプロキシーも作成することができます。

プロキシープラグインは ModelProxy インターフィースのインプリメンテーションを提供します。 それは、このインターフェースの抽象メソッドを実装しなければならず、RTC:Stageコンポーネントに ポートを関連付けるために重要です。されに、それはこれらのポートとシミュレーションの間のデータを やり取りするために重要です。

されに、プロキシープラグインは2つのシンボルを書き出す必要があります:

  • GetProxyType - プラグインのモデル種類を返す。
  • ProxyFactory - プラグインのインスタンスを作成する.

プロキシープラグインをコンパイルするには BUILD_PROXY_PLUGIN というCMake用のマクロを 使ってください。 RTCStagePlugin というCMakeファイルで提供されています。

RTC:Stageにはプラグインのサンプルがあります。 ${prefix}/share/rtcstage/examples/ に インストールされます。プロキシープラグインの作成についての詳細については、これらのサンプルを参照 してください。一般に、サンプルをコピーしソースを新しいモデルに合わせる用に修正する方が開発が早い でしょう。

プラグインの例

RTC:Stageには二つのプラグインのサンプルがあります。 ${prefix}/share/rtcstage/examples/ にインストールされます。 ${prefix} はRTC:Stageがインストールされたフォルダです。 プラグインはCMakeでコンパイルすることができます。

  • cd ${prefix}/share/rtc\_stage/examples/blobfinder/
  • mkdir build
  • cd build
  • cmake ../
  • make

Blobfinderプロキシー

このサンプルプラグインはStageのblobfinderセンサーモデルにプロキシーを提供します。必要なデータ型を 提供するためにプラグインでユーザのIDLファイルを使用するサンプルを示してます。

Positionプロキシー

このプラグインはデフォルトの位置モデルプロキシーをカスタムプロキシーに取り替えて明示してます。 このプラグインによって提供されるプロキシーを読み込む事によって、デフォルトのpositionプロキシーは コンポーネント中で無視されます。新しいプロキシーは異なるデータ型を使用するため、モデルに代替 インターフェースを提供します。

例のrtc.confファイルは ${prefix}/share/rtcstage/examples/conf/ フォルダにインストールされています。

Changelog

2.0

  • Updated to support Stage 4.
  • The Laser proxy was removed as it no longer exists in Stage. Use the Ranger proxy instead.

License

このソフトウェアは産業技術総合研究所で開発されています。承認番号はH23PRO-???? です。このソフトウェアは Lesser General Public License (LGPL) ライセンスとして 公開されてます。COPYING.LESSER を参照してください。