モデルの説明

 下図は概要で示したポンチ絵ですが、緑の6角形の箱(OpenINVENT-1.0.0の場合)がシミュレーションに必要なモデルです。いずれのモデルも、VRML記述をベースとしたOpenHRP3独自のVRML拡張記述にしたがっています。これは剛体であるリンクをジョイントで結合するモデルです。環境モデルはひとつのリンクとして記述しています。

(注)OpenHRP3が3.0系から3.1系にアップされるに伴い、ModelLoaderが大幅に改修されたようですので、お手元の自作のモデルなどで、古いバージョンで動作していたモデルファイルが3.1系では動作しなくなっているものがありますのでご注意ください。


[1]環境モデル

 テスト用に作成した簡易モデルの「EnvMapXX」、筆者らの実験環境をモデル化した「aist」があります。いずれもVRML形式での出力をサポートしている3Dモデラーを使って作成したVRMLファイルを、OpenHRP3用の雛形モデルファイルにinline関数で取り込んでいます。全体の構造がひとつのリンクとなり、fixedなジョイントにより世界座標系に関係づけられます。シミュレーションでは、他にOpenHRP3がサンプルとして用意しているlongfloorも使います。

 (*)環境モデルを自作する場合など、グリッドサイズと環境モデルで壁などの障害物の寸法を考慮願います。詳しくは、FAQのQ24を参照ください。

 (*)OpenINVENT-4.0.0/3.0.0のMapBuilderRTC内部の設計の都合上、環境モデルの親ジョイント名が「WAIST」である必要があります(この辺りは次期で改訂予定)。詳しくは、FAQのQ23を参照ください。


[1-1]EnvMapXX

 簡易な3Dモデラーを使って適当に作成したVRMLファイルをOpenHRP3用の雛形モデルファイルにinline関数で取り込むようにしただけの単純な構造をしています。どのような環境モデルがあるかは、こちらをごらんください。

 また、ver3.0.0以降では、床面の凹凸障害物検知シミュレーション用の「EnvSampleWithBumpAndObstacle」とMapBuilderRTCの地図データ蓄積と再利用機能テスト用の空の環境「EnvEmptyMap」が追加されました。


[1-2]aist

 建築概略図面をベースとして、不足情報については、人手で計測することにより商用3Dモデラーを用いて形状のモデルを作成しました。

今回はこの3D環境モデルをもとに2Dグリッド地図を生成することが主な目的でしたので細かい部分は省略しています。ただし、ビューシミュレータはこのモデルから視覚センサで得られる画像を合成しますので、必要に応じて細部の記述を加えたり、テクスチャ情報を追加する計画です。また、細部を省略しているとはいえ、全体でポリゴン数が7000を超えますので、シミュレーションにおいて移動ロボットと3D環境全体の間で干渉をチェックすると膨大な時間が必要になります。3D環境モデルをパーティションに分けて、移動ロボットが位置するパーティションとの間だけで干渉チェックできるような工夫も導入したいと考えています。


[2]移動ロボットモデル

 検証用の移動ロボットモデルとして、以下の3タイプを用意しています。いずれも実機の仕様と、時には実測に基づいてモデルを作成しています。差動駆動型で左右の駆動輪と複数のキャスターから構成されています。現状タイヤは正確な円ではなく、多角形で作成されており、ゴムタイヤのような形状が変化するような考慮がされていません。この辺りはシミュレータとモデル双方での今後の課題です。

 VRMLの構成は、基本的にメインのBODYをルートとして、rotateするジョイントにより左右の駆動輪がつながる木構造により記述しています。前方/後方のキャスターは、メインボディに垂直軸まわりにrotateするジョイントを介してリンクがつながり、その先に水平軸まわりにrotateするジョイントを介して車輪がつながっています。なお、JointIDをモデルファイル内で指定していますが、必ず、"左駆動輪:0/右駆動輪:1"である必要があります。


[2-1]リファレンスハードウェア2号機(RH2)/1号機(RH1)モデル [NEW!]

次世代ロボット知能化技術開発プロジェクトにて開発が行われている移動ロボット2号機/1号機です。(移動台車部に関しては、1号機と2号機では内部のモータ以外はほぼ形状や質量が変わっていないため、シミュレーションモデルは同一のものを使用しています。)

前方に駆動輪、後方に2つのキャスタをもつ構成で、前部中央に2つ搭載されているものが距離センサー(上:床面に対して並行、下:斜めに取り付けで床面の凹凸検知用)、さらに下部のセンサーはPanTilt台上に設置、また、前部の平らな位置にアームなどが接合できるよう想定されています。「RH2_withoutArm_withObstacleBumpSensor.wrl」はOpenINVENT-3.0.0以降のパッケージに含まれ、2つの距離センサーをRangeSensorRTCにてシミュレーション可能なモデルです。

【RH2/RH1パラメータ】
駆動輪半径車輪幅左右駆動輪中心間の距離ロボット中心から最遠部までの距離原点から車軸中心までの距離初期姿勢角度オフセット量車軸中心からの上部センサー取り付け高さ
10[cm]4.5[cm]44.1[cm]約45[cm]0.0[cm](原点と車軸中心が一致)0.0[deg]+5.5[cm]

 その他のパラメータ詳細は、VRMLモデル内のコメントや実際の値も参照ください。以下は、RH2のアーム付きの場合のモデルイメージです。

RH2

[RH2/RH1]モデルはX軸正方向を姿勢角度0[deg]とし、ロボット原点が車軸中心と一致しているためMotorControlでの補正は不要です。(正確にはコンフィグのオフセット値を"0"にする必要あり。)

(*移動台車にアームとセンサーが付いているモデルを複数用意していますが、アームを制御するRTCは用意してませんので、参照用としています。通常は、「~withoutArm~」のモデルをご利用ください。)


[2-2]リファレンスハードウェア0号機(RH0)モデル

次世代ロボット知能化技術開発プロジェクトにて開発が行われている移動ロボット0号機です。中央に駆動輪、前方後方に計4つのキャスタをもつ構成で、中央上部にある筒状のものは、将来そこに乗せるべきアームなどが接合できるよう想定されています。「RH0_withRangeSensor_main.wrl」はOpenINVENT-2.0.1以降のパッケージに含まれるRangeSensorRTCにて使用可能なモデルです。

【RH0パラメータ】
駆動輪半径車輪幅左右駆動輪中心間の距離ロボット中心から最遠部までの距離原点から車軸中心までの距離初期姿勢角度オフセット量車軸中心からのセンサー取り付け位置
10[cm]2.5[cm]44.45[cm]37.5[cm]Y方向に+4.5795[cm]+90.0[deg]+15.4205[cm]

なお、上表のように、オドメトリで原点として使用する「車軸の中心位置」と「モデルの原点」が一致していません。 このため、OpenHRP3からのSimulation位置データを使用する際に整合が取れないため、MotorControl内で補正(SimulatedOffset値)を行います。詳細は、以下の説明とMotorControlマニュアルを参照ください。


[2-3]PowerBotモデル(センサー未搭載モデルのみ)

 PowerBotはMobileRobotics社の移動ロボットです。前方(図の右側)が駆動輪、後方(図の左側)がキャスタとなり、前方の台の上にある赤いシリンダ型のものがセンサになります。「power_bot90withURGSensor.wrl」では、距離センサをシミュレーションするためのVision_Sensorを組み込んでいます。power_botXXのXXは車輪を何角形で近似したかを示します。詳しくはFAQのQ5をごらんください。

【PowerBotパラメータ】
駆動輪半径車輪幅左右駆動輪中心間の距離ロボット中心から最遠部までの距離原点から車軸中心までの距離初期姿勢角度オフセット量車軸中心からのセンサー取り付け位置
13.5[cm]9[cm]66[cm]50[cm]0.0[cm](原点と車軸中心が一致)+90.0[deg]+35.0[cm]


[2-4]【注意】ロボットモデルの姿勢角度とロボット中心について

現状、[RH0][PowerBot]モデルは、OpenHRP3のY軸正方向を姿勢角度が0[deg]となるようにVRMLで記述作成されています。そのため、本来X軸正方向を姿勢角度が0[deg]と考えているOpenINVENT内部で扱う座標系と90[deg]ずれているため、シミュレーションの位置姿勢を利用する場合には、MotorControlで補正を行っています。また、[RH0]モデルはモデルの原点が駆動輪の車軸中心に対し、Y正方向(ロボット進行方向)にあるため、こちらもOpenHRP3側とOpenINVENTで整合をとるために補正が必要になります。

詳細はMotorControlマニュアル、またはFAQのQ16を参照ください。通常は、X軸正方向を進行方向にとり、モデルの原点が車軸中心と一致するようなモデルの作成を推奨します。


[2-5]【注意】センサー取り付け位置と内部パラメータについて[NEW]

ロボットに搭載された距離センサーにより、障害物などの位置を検知する訳ですが、距離センサーからその時のレーザが干渉した方向と長さ情報が得られ、それを座標系における位置に換算する際に、その時点のセンサー原点の相対位置が必要です。そのため、ロボットの位置姿勢は自明であるため、その原点からどれだけの位置に取り付けてあるかをオフセット値(Vertical_Off/Horizontal_Off)としてObstacleDetectionRTCのコンフィグパラメータで事前に設定しておく必要があります。

詳細はObstacleDetectionマニュアルを参照ください。


[2-6]【注意】RTC側での移動ロボットモデル情報のLoadについて

現状、OpenHRP3にてシミュレーションする場合、内部の「ModelLoader」により、VRMLで作成したモデル情報が読み込まれますが、RTC側(特にOdometryによる自己位置推定)で利用する上では、ModelLoaderよりロボット情報を取得する機能がありません(今後の課題となります)。現状は、Odometry/DriveControl/MotorControlのディレクトリ内にある「RTC名.conf」というファイル内に数パターンのロボットモデルに関するパラメータをセットで用意しています。これらはRTCのコンフィグレーションパラメータとして利用されますので、利用するモデルに合わせて事前に(INACTIVE時に)セットしてください。なお、シミュレーションモデル用と実機用の2パターンを用意しています。

また、GlobalPathPlanning/LocalPathPlanningRTC双方にて、「dmin」というパラメータで、計画経路を作成する上で必要となる、"ロボットモデルの中心から一番遠い部分までの最大長半径(m)"の値を指定する必要があります。こちらはコンフィグレーションで変更可能です。