シミュレータアイテム¶
基本概念 で述べたように、Choreonoidでは物理エンジンは「シミュレータアイテム」として提供され、どのシミュレータアイテムを用いる場合でも共通の枠組みでシミュレーションを行うことができます。本ページでは、利用可能なシミュレータアイテムの一覧と、シミュレータアイテムに共通のプロパティについて解説します。また、Choreonoid標準のシミュレータアイテムである「AISTシミュレータ」については、その固有のプロパティについても本ページで解説します。
利用可能なシミュレータアイテム¶
Choreonoid本体では、物理エンジンに対応するシミュレータアイテムとして以下のものが提供されています。
シミュレータアイテム |
物理エンジン |
利用可能条件 |
概要 |
|---|---|---|---|
AISTシミュレータ |
独自エンジン(内蔵) |
標準で利用可能 |
Choreonoid標準のシミュレータアイテムです。詳細は AISTシミュレータ を参照してください。 |
PhysXシミュレータ |
標準で利用可能 |
NVIDIA社が開発しているオープンソースの物理エンジンPhysXを利用します。エンジンのソースコードがChoreonoid本体に同梱されており、デフォルトのビルドで利用可能となります。詳細は PhysXプラグイン を参照してください。 |
|
MuJoCoシミュレータ |
標準で利用可能 |
Google DeepMindが開発しているオープンソースの物理エンジンMuJoCoを利用します。エンジンのビルド済みライブラリがChoreonoid本体に同梱されており、デフォルトのビルドで利用可能となります。詳細は MuJoCoプラグイン を参照してください。 |
|
Bulletシミュレータ |
Bulletプラグイン |
オープンソースの物理計算ライブラリBulletを利用します。Bulletがインストールされた環境ではデフォルトでBulletプラグインがビルドされ、利用可能となります。詳細は Bulletプラグイン を参照してください。 |
|
ODEシミュレータ |
ODEプラグイン |
オープンソースの動力学計算ライブラリODEを利用します。ODEがインストールされた環境ではデフォルトでODEプラグインがビルドされ、利用可能となります。詳細は ODEプラグイン を参照してください。 |
|
AGXシミュレータ |
AGX Dynamicsプラグイン |
スウェーデンのAlgoryx社が開発している商用物理エンジンAGX Dynamicsを利用します。利用にあたってはAGX Dynamicsのライセンスが必要です。詳細は AGX Dynamicsプラグイン を参照してください。 |
いずれのシミュレータアイテムも、 シミュレーションプロジェクトの作成 で解説している手順でワールドアイテムの子アイテムとして配置することで使用できます。同じプロジェクトに複数のシミュレータアイテムを配置しておき、シミュレーションごとに使用するものを切り替えることも可能です。
どのシミュレータアイテムを使うべきかについては、まずは標準のAISTシミュレータの使用をおすすめします。その上で、シミュレーション対象や目的によっては他の物理エンジンの方が適する場合もありますので、精度や安定性、計算速度等に課題がある場合は、他のシミュレータアイテムも試してみるとよいでしょう。各エンジンの特性については上記の各解説ページも参考にしてください。
注釈
物理計算を行う上記のシミュレータアイテムとは別に、シミュレーション機能を補完する サブシミュレータ も存在します。その代表的なものとして、カメラや距離センサ等の視覚センサをシミュレートする「GLビジョンシミュレータ」があります。これはどのシミュレータアイテムとも組み合わせて使用できます。詳細は 視覚センサのシミュレーション を参照してください。
シミュレータアイテム共通のプロパティ¶
以下のプロパティはシミュレータアイテムの基盤部分で定義されているもので、全てのシミュレータアイテムで共通に利用できます。
プロパティ |
デフォルト値 |
意味 |
|---|---|---|
時間分解能タイプ |
タイムステップ |
シミュレーションの時間分解能の指定方法を「タイムステップ」「フレームレート」「タイムバー」から選択します。「タイムバー」を選択した場合は、タイムバーに設定されているフレームレートが使用されます。 |
タイムステップ |
0.001 [s] |
シミュレーションの1ステップに対応する時間です。時間分解能タイプが「タイムステップ」のときに表示されます。値を小さくするとシミュレーションの精度や安定性が向上しますが、計算時間は増加します。 |
フレームレート |
1000 [Hz] |
1秒あたりのステップ数です。時間分解能タイプが「フレームレート」のときに表示されます。 |
実時間同期 |
オン(補償型) |
シミュレーションの進行を実時間と同期させるかどうかの設定です。詳細は 実時間との同期 を参照してください。 |
時間範囲 |
無制限 |
シミュレーションを実行する時間の範囲を「無制限」「指定時間」「タイムバー範囲」から選択します。詳細は 時間範囲の設定 を参照してください。 |
時間長 |
300 [s] |
時間範囲が「指定時間」のときのシミュレーション時間長です。記録モードが「末尾」のときの記録期間の長さとしても使用されます。 |
能動制御期間のみ |
false |
これをtrueにすると、コントローラが能動的に制御を行っている期間のみシミュレーションを実行します。すなわち、全てのコントローラが制御を終了した時点でシミュレーションも終了します。 |
記録モード |
末尾 |
シミュレーション結果の記録方法を「全て」「末尾」「オフ」から選択します。詳細は シミュレーション結果の記録 を参照してください。 |
全リンク位置の記録 |
true |
シミュレーション結果として全リンクの位置姿勢を記録します。falseの場合はルートリンクの位置姿勢と関節角のみを記録し、メモリ使用量を抑えることができます。その場合、他のリンクの位置姿勢は再生時に順運動学計算で再現されます。 |
デバイス状態の記録 |
true |
センサやライト等のデバイスの状態もシミュレーション結果として記録します。詳細は デバイス状態の記録 を参照してください。 |
干渉データの記録 |
false |
シミュレーション中に検出された物体間の干渉データを記録します。記録した干渉データは結果の再生時に利用できます。 |
コントローラスレッド |
true |
コントローラの処理を物理計算とは別のスレッドで実行します。 |
コントローラオプション |
(空文字列) |
コントローラに渡すオプションのテキストです。内容の解釈は各コントローラの実装に依存します。 |
シーンビュー編集モードをブロック |
false |
これをtrueにすると、シミュレーション実行中はシーンビューを編集モードに切り替えられなくなります。シミュレーション中の誤操作を防ぎたい場合に有効にします。 |
注釈
上記に加えて、各シミュレータアイテムでは固有のプロパティが定義されています。それらについては本ページのAISTシミュレータの節および各シミュレータプラグインの解説ページで説明しています。
AISTシミュレータ¶
AISTシミュレータ(AISTシミュレータアイテム)はChoreonoid標準のシミュレータアイテムで、Choreonoid本体に内蔵された独自の物理エンジンによりシミュレーションを行います。このエンジンは関節でつながれたリンク系(多関節ロボット)を関節座標系で厳密に扱う手法(Featherstone法をベースとした順動力学計算)を用いており、多関節ロボットのシミュレーションを安定かつ高精度に行うことができます。接触力の計算には拘束ベースの手法を用いており、摩擦や反発を含む接触挙動をシミュレートできます。
バージョン2.5.0では本エンジンに大幅な改良が施され、特に多数の物体が接触し合うシーンにおける計算性能(スケーラビリティ)が向上しています。主な改良点は以下のとおりです。
接触力計算の内部構造の改良(疎行列構造の導入等)による高速化
接触点数の削減機能の導入(リンクペアあたりの最大接触点数の設定)
干渉検出の並列化への対応
プリミティブ形状(ボックス、球、円柱等)同士の干渉を解析的に検出する機能の導入
反発係数への対応
追加拘束(extra joint)の機能拡充( 追加拘束の設定 参照)
AISTシミュレータはメインメニューの「ファイル」-「新規」-「AISTシミュレータ」で生成できます。
AISTシミュレータのプロパティ¶
AISTシミュレータアイテムでは、共通のプロパティに加えて以下のプロパティが利用できます。
プロパティ |
デフォルト値 |
意味 |
|---|---|---|
動力学モード |
順動力学 |
「順動力学」では物理法則に従った動力学計算を行います。「運動学」では物理計算は行わず、関節への指令値をそのまま反映した運動学的な動作を再現します。 |
積分モード |
半陰オイラー |
数値積分の手法を「半陰オイラー」「ルンゲクッタ」から選択します。通常は半陰オイラーで問題ありません。 |
重力加速度 |
0 0 -9.80665 |
重力加速度ベクトルです [m/s^2]。 |
最小摩擦係数 |
0.0 |
接触計算で使用する摩擦係数の下限値です。マテリアル設定等で与えられた摩擦係数はこの値以上に制限されます。 |
最大摩擦係数 |
100.0 |
接触計算で使用する摩擦係数の上限値です。 |
接触間引き距離 |
0.005 [m] |
近接する接触点を間引く際の距離の閾値です。この距離以内にある接触点は集約され、計算量が削減されます。 |
接触間引き深度 |
0.05 [m] |
接触点の間引きを行う際の深さ(めり込み量)の閾値です。 |
収束判定誤差基準 |
0.001 |
接触力計算における反復解法の収束判定の誤差基準です。0を設定すると収束判定を行わず、常に最大反復計算回数だけ反復します。 |
最大反復計算回数 |
10 |
接触力計算における反復解法の最大反復回数です。値を大きくすると精度が向上する場合がありますが、計算時間は増加します。 |
干渉検出スレッド数 |
0 |
干渉検出を並列処理するスレッド数です。0の場合は並列化を行いません。多数の物体が存在するシーンでは、並列化により干渉検出を高速化できます。 |
プリミティブ形状干渉検出 |
ワールドアイテムの設定に従う |
ボックスや球等のプリミティブ形状同士の干渉を、メッシュに変換せず解析的に検出する機能の設定です。「ワールドアイテムの設定に従う」「有効」「無効」から選択します。この機能を用いると、プリミティブ形状間の接触をより高速かつ高精度に処理できます。 |
最大接触点数 |
4 |
リンクペアあたりの接触点数の上限です。検出された接触点がこの数を超える場合は、代表的な接触点に削減されます。0を設定すると削減を行いません。 |
接触補正深度 |
0.00025 [m] |
接触のめり込みを補正する際の目標深度です。 |
接触補正速度係数 |
5.0 |
接触のめり込みを補正する際の補正速度に関する係数です。 |
駆動トルク/力出力 |
false |
これをtrueにすると、各シミュレーションステップにおいて関節の駆動に実際に使用されたトルク(直動関節の場合は力)が、関節のエフォート値として書き戻されます。これによりコントローラから駆動トルクを参照したり、記録データとして確認したりすることができます。 |
運動学歩行モード |
false |
動力学モードが「運動学」のときに、足裏の接地状態に基づいて支持脚を切り替えながら、二足歩行動作を運動学的に再現するモードです。 |
2Dモード |
false |
物体の運動を2次元平面内に拘束してシミュレーションを行います。 |
旧加速度センサモード |
false |
加速度センサの出力を旧仕様と同じにする後方互換用のモードです。通常は使用しません。 |
接触に関するパラメータ(摩擦係数や反発係数等)は、 接触マテリアル の機構によりモデル(マテリアル)ごとに設定することもできます。
注釈
AISTシミュレータの干渉検出には、Choreonoid本体の干渉検出器であるAISTCollisionDetectorが使用されます。上記の「干渉検出スレッド数」「プリミティブ形状干渉検出」はこの干渉検出器の動作に関する設定です。干渉検出に関するワールドアイテム側の設定については 干渉検出 も参照してください。