Q27.「Export」ボタンを押しても現在の地図情報がMapBuilderRTCから作成されない。(OpenINVENT-4.0.0)
【Ans】OpenINVENT-4.0.0のInventGUIに「Export」ボタンが用意されましたが、少なくとも、InventGUI,MapMaintenance,MapBuilderRTCがACTIVE状態にあることが前提です。さらに、MapMaintenanceが保持している地図のグリッド単位での障害物確率情報を送る処理において、その総グリッド数[=GridNumberX*Y*Z]に上限(32767個まで)があります。これを越えるような場合には「Export」ボタンを押しても何も処理されません。
Q26.ロボットの3次元位置姿勢について
【Ans】OpenINVENT-3.0.0のInventGUIより、「OriginZ」の入力欄が用意されましたが、全体としてロボットの位置姿勢には、「X,Y」のみしか考慮されていませんのでご注意ください。例えば、2階建て環境モデルの2階にあるロボットの高さを考慮した位置姿勢などは扱えません。現在のところ、基本的にロボットは床面(高さ「0.0[m]」)にあると想定しています。
Q25.前回MapBuilderRTCで利用し蓄積したMapデータを、ロードしても何も表示されない。(OpenINVENT-3.0.0以降、OpenHRP3.1.0_beta2にて)
【Ans】詳細はRTCのドキュメントを参照頂くとして、前回のデータを利用するには、「環境モデルファイル名」と「InventGUIの2DMapBuilderタブでの入力値」が前回と全く同じ必要があります。ご注意ください。
Q24.自作した環境モデルをMapBuilderで指定すると、InventGUIにて想定したグリッド位置以外にも障害物として表示される。(OpenINVENT-3.0.0以降、OpenHRP3.1.0_beta2にて)
【Ans】環境モデルを自作する場合など、ご注意いただきたいのですが、MapBuilder->InventGUIと2Dグリッド情報を生成する際に、グリッド境界値付近での計算結果が不安定になります。例えば、グリッドサイズが0.2[m]の場合に、環境モデルで0.2[m]の壁を用意した際、浮動小数点演算の影響で1つのグリッドに収まらず、隣のグリッドまで壁と判断(つまり0.4[m]の壁と同義)される場合があります。これらを考慮し、例えば壁の幅を「0.1999[m]」とするなど、対処をお願いします。
Q23.自作した環境モデルをMapBuilderで指定すると、InventGUIでパラメータを指定しても何も表示されない。(OpenINVENT-3.0.0以降、OpenHRP3.1.0_beta2にて)
【Ans】まず、OpenHRP3のGrxUIが起動(正確にはModelLoaderやCollisionDetectorなどのライブラリ)されているのが前提です。MapBuilderRTC内部では、環境モデルと仮boxモデルをOpenHRP3のライブラリを使用して干渉チェックをして、干渉する箇所をInventGUIに表示するような処理をするのですが、環境モデル側の親ジョイント名が「WAIST」固定のもののみ扱ってます。この辺りは次期で改訂予定ですが、現時点では環境モデルを合わせる必要があります。合わせていない場合、干渉チェックがされず、壁や障害物も何もない地図情報としてInventGUIに表示されてしまいます。
Q22.OpenHRP3のRangeSensorによるシミュレーションを行うと、時間を追うごとに徐々に重くなり、ほとんどシミュレーションが進まなくなる。(OpenINVENT-3.0.0以降、OpenHRP3.1.0_beta2にて)
【Ans】メモリにセンシング情報が溜まって一杯になってしまうことが原因のようです。OpenINVENTパッケージのGrxUI用のサンプルプロジェクトをご覧ください、「useDisk」という項目が「true」としてある箇所があります。これは、センシング情報などをメモリではなくDiskに落とす指定で、デフォルトは「false(メモリ)」になっているようです。GrxUIの画面操作でこの指定の変更が出来ないようなので、一旦プロジェクトファイルを作成した後に手修正を入れる必要があります。その後再度シミュレーションをすると、負荷が軽くなる場合があります。ただし、テンポラリーなファイルに書き込むことになるため、RangeSensorを使った「長い」シミュレーションをを行うと、そのファイルサイズが「数ギガバイト以上」になることがあり、ディスクを圧迫する場合もありますので、この点はご注意ください。
Q21.ロボットが途中で走行を停止したのを再開させたい。(OpenINVENT-3.0.0以降、OpenHRP3.1.0_beta2にて)
【Ans】DriveControlRTCでは、停止指令や障害物に近すぎる、経路が無い場合などに停止するような「0.0」速度指令を出す機能を有しています。経路が生成された場合は自動的に走行復帰しますが、障害物(Obstacle/Bump)に近くて停止した場合、その障害物が消えた場合やBump障害物検知による停止指令の場合は、InventGUIで「GO」ボタンを手動で押すまで走行が再開されないようにしています。
Q20.MapBuilderのmakeに失敗する。(OpenINVENT-2.0.1以降、OpenHRP3.1.0_beta2にて)
【Ans】MapBuilderではOpenHRP3のModelLoader/CollisionDetectorなどのライブラリを利用して3DVRMLモデルから2D地図を生成しています。そのため、OpenHRP3のライブラリをmake時にリンクするのですが、OpenHRP3.1.0_beta以降のインストールにおいて、cmakeで「CMAKE_INSTALL_PREFIX」をデフォルトの"/usr/local"から変更した場合は、MapBuilderのMakefileでも修正(CXXFLAGS部分)が必要になります。具体的には、PREFIXで"/usr"などとした場合は、"/usr/include/OpenHRP-3.1/hrpCorba"としてください。
Q19.シミュレーションをSTARTした際に、GrxUIの表示がトビトビでカクカクと進むような現象がある。(OpenINVENT-2.0.1、OpenHRP3.1.0_beta2にて)
【Ans】OpenHRP3.1.0_beta2のGrxUIとInventGUIを同一eclipseから起動している可能性が有ります。その場合、javaのスレッドを共有が起こり、処理が遅くなることが判っています。eclipseを別々に2つ起動し、GrxUIとInventGUIが別のスレッドを使用するようにしてください。
Q18.オドメトリエラーがシミュレーションされない。(オドメトリエラーにより想定される、計画経路からの大幅なズレが発生しない)
【Ans】MotorControlRTCからLocalizationRTCに直接接続しているサービスポートの接続を切ると、OdometryRTCにおいて車輪の回転角度から計算したオドメトリを位置姿勢推定に使用するようになります。ただし、現状のOpenHRP3では、特に旋回時に、多面体剛体で表現したタイヤと床面の間に、現実には起こり得ない極端なスリップなどが発生するため、オドメトリエラーが過剰に発生する傾向にあります。この影響を排除するために、MotorControlRTCからLocalizationRTCにサービスポートを直接接続すると、OpenHRP3から受け取った実際の位置姿勢を、オドメトリに優先して使用するようにしています。この状態は完璧な自己位置姿勢推定が存在する場合のシミュレーションといえます。もし、オドメトリエラーを考慮したシミュレーションを再現されたい場合には、当接続を外して実行してください。
Q17.自作したセンサーを搭載の移動ロボットモデルをシミュレーションさせると、センサーの表示ががずれたところに表示されてしまう。
【Ans】モデルの作成においてモデルの原点をどこにとるかが重要です。通常は2輪駆動の車軸中心に原点が来るモデルを想定し、RTC側でオドメトリ計算などをしていますが、サンプルのRH0などは車軸中心と原点が約4cmずれています。そのため、シミュレーション上で取得した距離データ情報をRTC内部での位置情報とマージする際に常にずれが生じます。この場合、約4cm分をオフセットとして初期補正する必要があります。MotorControlのマニュアルを参照ください。コンフィグパラメータで角度のずれを補正可能です。
Q16.自作した移動ロボットモデルをシミュレーションさせると、InventGUI上で”CurrentPosition”と初期姿勢がずれてしまう
【Ans】モデルの作成において、軸をどのように定義するか(例えば、X軸正方向を正の進行方向となるように車輪などを配置しているかどうか)によって、シミュレーションでの位置姿勢が異なります。通常X軸正方向を進行方向となることを想定しRTCが作成されていますが、サンプルのRH0などはY軸正方向を進行方向としています。この場合90度のずれを初期補正する必要があります。MotorControlのマニュアルを参照ください。コンフィグパラメータで角度のずれを補正可能です。
Q15.全RTCを"All Deactivate"とやっても、なかなか色が[緑]->[青]に遷移しない。
【Ans】Corba関連で遅くなっているのですが、各RTCのプロパティを見ると、"INACTIVE"となっているはずですので、問題はありません。もし、気になるようでしたら、InventGUIをeclipseのpluginとしてインストールしたもの通常使用しますが、InventGUI/をjavaのプロジェクトとして、eclipseにimportし、そこから「実行」とやることでもInventGUIのウィンドウが起動されます。こちらを使用していると、標記現象の発生が抑えらる場合があると報告されています。
Q14.InventGUIの地図表示において、特に壁などの障害物をセンシングする際に、障害物の存在確率を表す<グラデーションの変化が激しく、その都度、軌道が再生成されてしまい、ロボットがなかなか進まない。もしくは、なかなか障害物と判定されず、そのまま走行し障害物に衝突してしまう。
【Ans】ObstacleDetection,MapMaintenaceのマニュアルを参考にし、確率の変化パラメータや障害物と認定するスレッショルド値などを変更してください。(コンフィグレーションパラメータ)
Q13.障害物検知が不安定で、本来無いところに存在するようにInventGUIに表示される、
【Ans1】シミュレーション中はGrxUIのウィンドウにフォーカスが当たるようにしておいてください。センシング情報の取得が出来ず、誤差を含んだ処理が発生することが考えられます。
【Ans2】LocalizationRTCにMotorControlからシミュレーション位置姿勢データをDataPortで送るように接続してください。現状、OdometryRTCからのオドメトリでの自己位置姿勢推定データによるローカライズでは現在位置とシミュレーション上での位置姿勢(特に旋回した後の姿勢角)にズレが大きく生じるため、別の位置に障害物があると算出されてしまいます。
【Ans3】ObstacleDetectionとMotorControlのコンフィグに、センサーの取り付け位置に関するパラメータがありますので、RtSystemEditorでロードするプロジェクトファイルでの値などに誤り(モデルとのズレ)がないか確認してください。
Q12.全RTCをActivateしシミュレーションを一度行った後に、もう一度シミュレーションを行う場合に、センサーが表示されない。((株)セックの距離センサーRTCの場合)
【Ans】(株)セック版の距離センサRTCを使用する場合、終了時において、先に全RTCをDeactivateしてからシミュレーションを停止してください。先にシミュレーションを停止させる場合には、シミュレーション停止後に、全RTCもDeactivateされている必要がありますが、URGSensorSimulatorRTCのみ、OpenHRP3のtickに従い動作しているため、ステータスがActivateのままとなっています。ここで、他のRTCをActivateせず、もう一度シミュレーションのSTART/STOPを行ってみると、INACTIVEに遷移しますので、それから、再度全RTCをAllActivateしシミュレーションを行ってください。
Q11.送信データに抜けがないか確認したい。
【Ans】一部DataPortにてデータ受信をするRTCではCallbackでのデータ取得確認機能を有しています。RTCのヘッダファイルにて、「#define CALLBACK_DEBUG 0」となっている部分を"1"にしてmakeし直して実行すると、端末上にデータ取得のデバッグが出力されます。
Q10.[複数の異なるOSのPCで、RTCを分散起動させてシミュレーションさせたい。
【Ans】OpenINVENT-1.0.1を使い、Linux(Ubuntu-7.10),Windows(XP,Vista)で動作させる場合の例を以下に記します。
(0)【準備】 Linuxで動作中のJAVA版RTC(OpenINVENTでは、InventGUIなど)をローカル以外のNameServerへ登録するには、"corba.endpoint"を指定する必要がありますが、2009/03/23に公開された「OpenRTM-aist-Java-0.4.2」をインストールしてご利用ください。
(1)【RTC分散例】Linux側 [NameServer, GrxUI, MotorControl, MapBuilder, InventGUI, URGSensorSimulator] Windows側[GlobalPathPlanning, LocalPathPlanning, DriveControl, ObstacleDetection]
(2)【"rtc.conf"編集】 まず、Windows側のRTCの"rtc.conf"内の、「"corba.nameservers: ネームサーバ(Linux側)のIPアドレス:ポート番号"」部分をこのように変更します。次に、Linux側で起動のInventGUIの"rtc.conf"内に「"corba.endpoint: Linux側のIPアドレス:"」(最後の「:」必要)を追加します。(今回、InventGUIはNameServerがあるローカル環境で起動しているのでendpointは不要のはずですが、他のPC(orOS)から飛んでくるRTCと接続させる場合endpoint無しだと、データの受け取りがうまくいかない現象があり、endpointをつけると正常に動作することから、このようにしています。ローカルのPCでInventGUIとやりとりするRTCが全て起動されていればendpoint記述は不要です。)
この状態で全RTCを起動し、通常時と同様の操作を行えば、シミュレーションが動作します。
(*1)逆に、Windows側にNameServerを立てることも可能ですが、UrgSensorSimulatorのWindows版が無い(OpenINVENT-1.0.1公開時点で)ため、距離センサーを用いたシミュレーションは出来ません。(GrxUI,URGSensorSimulator,MapBuilder,MotorControlはNameServerがある側で起動が必要です。) また、Linux側にてJAVA版のRTCを起動し、別のPCのNameServer上に飛ばす場合は、"rtc.conf"にendopointの記述が必要です。(Windows側で起動しているJAVA版RTCを飛ばす場合は不要)
(*2)Windows側にNameServerを立てる場合、Linux側からJava版以外のRTCを飛ばしても、NameServiceViewに表示されない場合、「rtm-naming.bat」の”set OMNIORB_USEHOSTNAME=localhost”の行をremでコメントアウトすると、表示されるようになる場合があります。
Q9.MapComp に必要なVRMLファイルの場所を「Map.sh」で指定したのに、それが使われない。または、エラーが発生する。
まず、ver2.0.0以降、「Map.sh」は無くなりました。
【Ans1】MapComp に必要なVRMLファイルの場所は、コンフィギュレーションパラメータによっても指定しており、こちらが優先します。よって、MapBuilder.confを書き換えても、RT System Editor にて、以前セーブした rtclink.xml ファイルをリストアすると、古いコンフィギュレーションパラメータの値が使われてしまいます。
【Ans2】OpenHRP3のバージョンが更新されて以降、再makeをしていない可能性からエラーとなっている場合があります。
【Ans3】OpenHRP3のバージョンとMApBuilder(OpenINVENT)のバージョンには密接な関係があり、OpenHRP3.0系ではMapBuilder-1.0系(OpenINVENT-1.0系)、OpenHRP3.1系ではMapBuilder-2.0系(OpenINVENT-2.0系)のみの対応となっていますのでご確認ください。
Q8. InventGUIの"2DMapBuilder"の「SET」ボタンを押しても地図がロードされない
【Ans1】上述の原因と同じで、「Map.sh」で指定したMapがrtclink.xml ファイルによる値で別のMAPにされてしまっているのに、妥当でない入力値を入れて「SET」を押した場合。
【Ans2】InventGUIが複数起動されており、RtSystemEditor(RtcLink)でMapBuilderと接続しているInventGUICompと、eclipseで開いている画面のInventGUICompが異なる場合がある。具体的には、eclipseを起動した端末で、"InventGUIComp0"の「0」以外の番号のもの起動しているようであれば注意が必要。回避策としては、起動しているeclipseにて(2つのウィンドウがあるものと推定)開いているInventGUIのパースペクティブを一旦閉じる(RtSystemEditorなどに変更する)。その後、再度eclipseを起動し、どちらか片方のウィンドウのパースペクティブのみ「InventGUI」に変更する。eclipse起動端末を見ると、"InventGUIComp0"のみになるはずである。
Q7. Eclipse plugin を同名の新しいものに差し替えたのに、古いpluginが実行される。
【Ans】古いpluginがキャッシュされているためです。eclipse -clean として eclipse を起動すればキャッシュをクリアしてから eclipse が走りますので、新しい plugin が実行されるでしょう。
Q6. シミュレーションのタイムステップはどのくらいが良いのか?
【Ans】MotorcontrolRTC/DriveControlRTCの"TimeStep"コンフィグレーション値、GrxUIでの"integration Step","Control Time"など時刻を設定する箇所が複数ありますが、推奨は"0.002(2[msec])"です。それ以外ではシミュレーションの積分の誤差やオドメトリによる自己位置推定する際の近似計算で大きく誤差がでる可能性があります。なお、それ以外の値を使う時でも、GrxUIの"integration Step"値とMotorControlRTCの"TimeStep"値は揃えるようにしてください。DriveControlRTCの"TimeStep"値は「0」という値にしておけば、MotorControlRTCから来たデータのTimeStampより内部でTimeStep値を計算するので、データ欠落などがある場合にも正確なシミュレーション結果が得られるはずです。
Q5. Powerbotモデルの20/90/360などの数値は何を表していますか?
【Ans】 Powerbot用のモデルでは、車輪を作成する上で、正確なシリンダ型で作成出来ないため、円を多角形に近似しています。その多角形が20/90/360角形で作成しているという違いがあります。より円に近い360角形の方が良さそうですが、ポリゴン標記のモデルで床との接触などがあり、ものすごくシミュレーションに時間がかかってしまいます。逆に、20角形ですと走行時に多少ガタツキが出てSlipなども発生するため、自己位置推定がずれる可能性もあります。推奨は90角形の車輪のモデルです。
Q4. シミュレーションが遅過ぎて、シミュレーション時間がなかなか進まない。
【Ans1】いずれかのRTCが死んでる可能性があります。何らかの設定ミスや妥当でない値を使っている可能性があります。
【Ans2】モデルの「干渉チェック」が多すぎる場合が考えられます。通常、床とロボットモデルのみの干渉チェックが望まれます。それ以外に例えば環境モデルの壁と床にも干渉チェックを入れていると、環境モデルの壁の数が多いほど、毎回その分の計算が入りシミュレーションに時間がかかりすぎる場合があります。
【Ans3】 スペックのそれほど高くないPCですと、全RTCの起動とeclipse,GrxUIの起動で負荷がかかりすぎになることがあります。複数台のPCに分散処理させ、NameServerを1箇所にするような方法もあります。
Q3. RtcHandle内の"openinvent.py"を起動すると、いくつかのRTCは認識するが、"is not alive"などのメッセージが出力されるRTCがあり、正常動作しない。
【Ans】 omniが「localhost:2809」として起動しているか?OpenRTM-aist-0.4.2-c++のパッチを当てているか?IDLをomniidlでコンパイルしたか?など、環境構築で抜けがある可能性が高いので、もう1度確認ください。もしくは、存在しないディレクトリ内のRTCを起動させようとしてる、または起動していないRTCのハンドルを取得しようとする場合にも同現象があります。
Q2. 自分で作成したロボットモデルを用いてシミュレーションすると正常に動作しない。
【Ans】作成するロボットモデルは、DriveControlを使用する上では、差動駆動型のロボットの必要があり、駆動輪2輪のjoint番号が「左:0番」「右:1番」である必要があります。さらに、DriveControlで自己位置推定をする上で、ロボットの車輪の半径や車軸の長さなどを"model.conf"というファイルに設定する必要があり、これを怠ると、全く違うロボットモデルの自己位置推定になってしまうので注意が必要です。
Q1. データポートを持つRTCがシミュレーション開始と同時に死んでしまう。
【Ans】データポートを接続しているリンクが2重になっている可能性があります。RT System Editor あるいはRtcLink 上で、死んでしまうRTCのデータポートに接続されているリンクを少し移動させてみて、2重になっていないかチェックしてください。2重になっている場合は、1重になるように余分なリンクを削除してください。