(RtcHandleを用いたスクリプトによる起動方法については、コチラを参照ください。)
Linuxのブートプロセスとしてすでに起動している場合は、まず、killしたほうが無難です。
「$ sudo killall omniNames」を実行。(/var/log内、もしくは、カレントディレクトリ内に、"omni~~.log"が残っていれば削除した方が良いかもしれません。)
まず、ネームサーバーを起動してください。開発グループではデフォルトポート2809を使用しています。
「$ rtm-naming 2809」と実行し、ネームサービスを立ち上げます。
まず、eclipseを起動してください。(ただし eclipse を起動するディレクトリに rtc.conf をコピーしておいてください。eclipseプラグインであるInventGUI RTCがそれを参照するため。 )
RT System Editorパースペクティブを開いてください。
(前回の終了状態によっては、eclipseを起動したときに、InventGUI RTC のパースペクティブウィンドウが開くことがありますが、その場合、InventGUI が正常に動作しないことがあります。InventGUI のパースペクティブを終了し、かつ、RT System Editor において、InventGUI RTC をExitした上で、eclipseを再起動してください。)
新規ウィンドウを開き、パースペクティブから"GrxUI"を開いてください。RangeSensorRTCを使用の場合は、RangeSensorViewを開いて(任意)おいてください。
次に、新たにeclipseをもう1つ起動(workspaceは別のもの)し、パースペクティブから"InventGUI"を開いてください。
(*)OpenINVENT-4.0.0、OpenHRP3.1.0_beta4の環境において、同一eclipseから、GrxUIとInventGUIウィンドウが起動されると、javaのスレッドを共有が起こり、描画処理が遅くなる症状があるため、eclipseを別々に起動することを推奨しています。
その前に、Linuxでは、実行環境として環境変数 OPENHRPHOME 、OPENINVENTHOME を使用ますので、 使用環境にあわせて以下を例に/.bashrc にて設定してください。
また、必要に応じてrtc.confの設定と、使用するロボットモデルに合わせた「RTC名.conf」内のコンフィグレーションパラメータの設定を事前にしておいてください。
以降で、プロセスの起動を行いますが、以下の3パターンで行えます。
[1]shスクリプトで一括起動する。[2]必要となる各RTCを一つずつ起動する。[3]RtcHandleを用いたスクリプトによる起動。(次節の「Port間接続とパラメータ設定」の処理まで同時に行います。) |
ここでは、(1)のshスクリプトによる起動手順を示します。
まず、Script/ディレクトリに移動し、Linuxなら「./run_Openinvent_~~.sh」を実行してください。
これにより、以下が起動され、NameServiceに登録されます。
各RTCの【Port間を接続】するには、以下の3パターンで行えます。
[1]RtcHandleを用いたスクリプトによる接続。【前節の「プロセス起動」時に同時に実施済み。】(==>簡単確実、ただしOpenRTM-Python版のインストールとRtcHandleの事前設定の必要あり。) [2]接続情報が保存されたプロジェクトファイルをロードする。(==>添付のプロジェクトはネットワーク環境により読み込みに大変時間がかかる。)[3]全ポートをマニュアルで接続する。(==>数が多いので大変、人為的ミスが入る可能性あり。接続には「接続情報一覧」を参照のこと。) |
[1]が簡単に行えるのでお勧めです。ただ、[2]の場合でも、ご自身で既に接続情報をセーブしている場合は、それをRT System Editor上でOpen and Restoreにより読み込み(Openで読むと接続情報反映されない?)、必要なら、コンフィギュレーションパラメータを修正するという流れも便利です。
[2]の場合は、用意しているサンプルプロジェクトファイル(RT System Editor用)[Project/RtSystemEditor/RTSE_~~.xml]などをOpen and Restoreにより読み込むのだが、サンプルを作成保存したネットワーク環境が異なるため、ロードするのに長時間を要する可能性が高い。一度ロードできたら、その環境で上書き保存することを薦める。もしくは、一旦[1]のRtcHandleを使ったスクリプトによる起動を行うと、RtSystemEditor上でRTC群をドラッグ&ドロップすれば、自動的に全RTCが接続された状態になるので、この状態を「SAVE」するのをお勧めしたい。
[3]を行う場合、手動でポート同士のリンクを張り、各RTCのコンフィギュレーションパラメータを設定し、次回のためにsaveしておく。このとき、MotorControlとRobot(例:RefHw0)の間(RangeSensorRTC利用の場合は、RangeSensorとrobotの間も)のリンクは張られていてはいけない(ココはSimulationスタート時に自動で接続されます)。距離センサ用RTCを使用しない場合はObstacleDetection,BumpDetection,MapMaintenance,PanTiltControl,RangeSensorSimulatorRTCは不要です。ポートの接続については、サンプルプロジェクトファイルや、ドキュメントのポート情報(コチラ)を参照し、接続してください。数の多いサービスポートですが、名前にルール("[相手先RTC名]"+"[Prov] or [Cons](自分の相手に対する立場)")がありますので、そこから接続先を判断可能です。例を示しておきます。
| RTC | ポート名 | 向き | ポート名 | RTC |
|---|---|---|---|---|
| 【MapBuilder】 | InventGUIProv | プロバイダ <== コンシューマ | MapBuilderCons | 【InventGUI】 |
| 【MapBuilder】 | InventGUICons | コンシューマ ==> プロバイダ | MapBuilderProv | 【InventGUI】 |
各RTCの【コンフィグレーションパラメータ】を設定するには、以下の3パターンで行えます。
[1]RtcHandleを用いたスクリプトによる設定。【前節の「プロセス起動」時に同時に実施済み。】[2]接続情報が保存されたプロジェクトファイルをロードする。(Port接続処理と同時に、保存された時の値が優先的にセットされます。)[3]RTC毎にマニュアルで設定する。(==>手間がかかる) |
[1][2]のいずれかで用意をし、行いたいシミュレーションに応じて、必要な箇所のみ[3]をするのが一般的です。また、コンフィグレーションパラメータのセット単位で設定が便利です。
(*)OpenINVENT-4.0.0同封のロボットモデル利用の場合、コンフィグレーションパラメータセットがロボット毎に用意されてますので、指定ください。また、RangeSensorを使用する場合は、Obstacle/Bumpセンサーに対応した、RangeSensorSimulatorRTCのコンフィグレーションセットをご利用ください。(Obstacleセンサー:「TOP-URG」セット/Bumpセンサー:「URG」セット)
(*)上記の[2]の手順で行う場合、RtSystemEditor-1.0.0版の不具合により、「RTC名.conf」で用意したコンフィグレーションパラメータのセット情報で選択していた情報が復元できず、プロジェクトファイルロード時にエラーが出る場合(2010/03時点の公開バージョンにて)があります。その場合、全てデフォルトにセットされてしまうので、改めて手動でセットする必要がありますので、ご注意ください。
(*)サンプルプロジェクトのように接続すると位置姿勢推定(LocalizationRTC内)にてオドメトリを使用せず、シミュレーション位置姿勢値を使用します。オドメトリを使用したい場合はFAQのQ18を参照してからご判断ください。

All Activateにより、すべてのRTCをアクティブ状態に遷移させる。ただし、MotorControlとRefHw0間(RangeSensorSimulatorRTC利用の場合は、RangeSensorSimulatorとRefHwの間、PanTiltControlRTC利用の場合は、PanTiltControlとRefHw間も)はまだ線が接続されず、また、MotorControlRTCとRangeSensorRTCはシミュレーションがSTARTされるまで、アクティブ状態(緑)になりません。
ここで、「RangeSensor0」はObstacleDetectionRTC用の距離センサー、「RangeSensor1」はBumpDetectionRTC用の距離センサー対応のRTCとなります。

InventGUIのMapBuilderタブを開き、地図生成用のパラメータを入力し、SETボタンをクリックする。(入力例は以下の図参照)
SETボタンをクリックすると、しばらく後、MapBuilderが生成した2D地図がInventGUIの下方サブウィンドウに表示される。 (ここで、MapBuilderがVRMLファイルを読み込めない場合は、GrxUIが起動(必要)しているかどうか、RT System Editor でMapBuilderのコンフィギュレーションパラメータで他のモデルを指定していないかなどをチェックすること。FAQ参照。 もしくは、挙動が不安定な場合もあり、もう一度SETボタンを押すと地図がロードされたり、一旦Deactivateしてもう一度Activateしてから再操作すると地図がロード出来るようになる場合もあり。また、地図がロード出来ても本来障害物であるべき位置が欠けていたりすることもあるので、同様の対処で解決することが多い。)
このプロセスは、パラメータを変えて何度でも繰り返すことができる。
InventGUIに表示された2D地図上にオレンジ色のスタートアイコンと青色のゴールアイコンを配置するか、左上のサブウィンドウで数値入力して、スタートとゴール位置姿勢を指定する。(入力例は以下の図参照)
設定した後に、左上のサブウィンドウ内のSETボタンをクリックすると、生成された経路が2D地図上に表示される。(ここで、経路表示が行われない場合は、下部サブウィンドウの Planned Trajectory のチェックをOFF/ONしてみる。)
このプロセスは、目的位置姿勢を変えて何度でも繰り返すことができる。
ただし、実際に移動動作のシミュレーションを行う場合は、後述するようにGrxUI内での移動ロボットモデルの位置姿勢とInventGUI上でのスタート位置姿勢が一致している必要がある。

すでにモデル情報などをプロジェクトとしてセーブしている場合、あるいはサンプルプロジェクト(Project/GrxUI/GrxUI~~.xmlなど)を使用する場合は、それをLoad Projectする。
新たにプロジェクトを作成する場合は次のことに注意する。
距離センサのシミュレーションを行う場合はRange Sensorを搭載した移動ロボットモデルを1番目にロードする。(推奨)
3D環境モデルと床モデル(longfloor.wrlなど)をロードする。
必要に応じて、障害物モデル(obstacle.wrl/bump.wrlなど)をロードする。
コントローラの設定など行う。
移動ロボットと床モデルの間に干渉チェックペアを設定する。
移動ロボットと3D環境モデルの間の干渉チェックペアの設定は任意。(複雑な環境モデルの場合は、常に干渉チェックの計算が入り負荷がかかるため)
再利用のために名前をつけてプロジェクトとしてSave Projectしておく。
ロードした移動モデルの位置姿勢とInventGUI上でのスタート位置姿勢は次の関係を満たす必要がある。
(GrxUI上でのX座標) = (InvenGUI上でのX座標) + (3D地図作成時のパラメータorigin(X))
(GrxUI上でのY座標) = (InvenGUI上でのY座標) + (3D地図作成時のパラメータorigin(Y))
(GrxUI上でのZ座標) = (InvenGUI上でのZ座標) + (3D地図作成時のパラメータorigin(Z))(現在は、OriginZ=0.0のみ可)
(GrxUI上での姿勢[rad]) = (InvenGUI上での姿勢[deg])(deg->radに変換)
(注)RangeSensorを使用したシミュレーションの場合は、一旦作成したプロジェクトファイル内の「useDisk」のvalueを「true」にすることをお勧めします。詳しくはFAQのQ22をご覧ください。
以下は、既存のサンプルプロジェクトを読みこんで、3Dビューを調整したところ。(RangeSensorViewの表示と、ItemViewのセンサー表示部を選択することで、3DView上にセンシング領域を表示している状態。操作方法については、OpenHRP3のWebマニュアル「ユーザーズマニュアル」の「RangeSensor」の項を参照ください。)
(*下図は、センサーが取り付けられている階層例。Obstacle/Bumpの2つのセンサーが「URGSensor0/1」という名前であります。)

下図が、GrxUIでサンプルプロジェクトをロードした後の状態。


ここで、ようやくMotorControlとRefHw0の間(RangeSensorSimulatorRTC利用の場合は、RangeSensorSimulatorとRefHwの間、PanTiltControlRTC利用の場合は、PanTiltControlとRefHw間も)の結合が張られ、MotorControlとRangeSensor、PanTiltControlがアクティブ状態(緑)になる(ただし、RefHw0は青色のまま)。また、InventGUIには、距離センサーからのセンシング情報が2つ扇形のビーム(形状はObstacleDetectionRTC[紫色]/BumpDetection[水色]各々でフィルタリングしたもの)として表示される。
また、RangeSensorView領域にセンシング計測結果が表示される。

これで、DriveControlでの速度指令がstartし、移動ロボットの走行シミュレーションがスタートする。以下が、走行開始後の例。

(注)GrxUIに表示されているセンシング領域(ここでは、Bumpセンサー)と、InventGUIの表示しているセンシング情報の領域が異なっていますが、これは、RangeSensorRTCやObstacleDetectionRTC/BumpDetectionRTCでフィルタリングされた結果がInventGUIに表示されているためです。
全てのRTCの色が青色になる。
この時点で前回のシミュレーションの様子を保存(画像や動画)をしたり出来る。
この時に、InventGUIの前回の描画がリフレッシュされます。
*この手順で終了しない場合、次回のeclipse起動が正常に行われない場合がありますので注意ください。(AllDeactivate,シミュレーションの停止の順序はどちらが先でもOKです。)