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」には二つのレーザーセンサーがあります。 シミュレートされたコンポーネントは、以下のモデルにプロキシーを提供します。
フィルタなしでは、これは多くのポートを備えた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つのシンボルを書き出す必要があります:
プロキシープラグインをコンパイルするには BUILD_PROXY_PLUGIN というCMake用のマクロを 使ってください。 RTCStagePlugin というCMakeファイルで提供されています。
RTC:Stageにはプラグインのサンプルがあります。 ${prefix}/share/rtcstage/examples/ に インストールされます。プロキシープラグインの作成についての詳細については、これらのサンプルを参照 してください。一般に、サンプルをコピーしソースを新しいモデルに合わせる用に修正する方が開発が早い でしょう。
RTC:Stageには二つのプラグインのサンプルがあります。 ${prefix}/share/rtcstage/examples/ にインストールされます。 ${prefix} はRTC:Stageがインストールされたフォルダです。 プラグインはCMakeでコンパイルすることができます。
このサンプルプラグインはStageのblobfinderセンサーモデルにプロキシーを提供します。必要なデータ型を 提供するためにプラグインでユーザのIDLファイルを使用するサンプルを示してます。
このプラグインはデフォルトの位置モデルプロキシーをカスタムプロキシーに取り替えて明示してます。 このプラグインによって提供されるプロキシーを読み込む事によって、デフォルトのpositionプロキシーは コンポーネント中で無視されます。新しいプロキシーは異なるデータ型を使用するため、モデルに代替 インターフェースを提供します。
例のrtc.confファイルは ${prefix}/share/rtcstage/examples/conf/ フォルダにインストールされています。
このソフトウェアは産業技術総合研究所で開発されています。承認番号はH23PRO-???? です。このソフトウェアは Lesser General Public License (LGPL) ライセンスとして 公開されてます。COPYING.LESSER を参照してください。