ODEプラグイン

概要

ODEについて

Open Dynamics Engine (ODE) は、オープンソースの剛体動力学計算ライブラリです。物理エンジンとしては長い歴史を持つもののひとつで、ロボティクス分野を含む様々な用途で利用されてきた実績があります。

ODEプラグインについて

ChoreonoidのODEプラグインは、ODEをChoreonoidの物理エンジンとして利用するためのプラグインです。シミュレータアイテムとして「ODEシミュレータ」を提供し、他の物理エンジンのシミュレータアイテムと同様の手順で利用することができます。

バージョン2.5.0では本プラグインにも改良が施され、コンタクトマテリアルへの対応や自己干渉・追加拘束(extra joint)への対応など、シミュレータアイテムとしてのひととおりの機能が利用できるようになっています。

なお、デフォルトでビルドされるPhysXプラグインやMuJoCoプラグインの物理エンジンと比較すると、ODEは機能・性能の面で見劣りする部分もあります。特に理由がなければまずはそれらのエンジンやAISTシミュレータの使用を検討するのがよいですが、ODEでの挙動を確認したい場合や、ODEを前提とした既存資産がある場合などに本プラグインを活用できます。

セットアップ

ODEプラグインのビルドと利用にあたっては、ODEライブラリをインストールしておく必要があります。

Ubuntuの場合は、以下のコマンドでインストールできます(Choreonoidのパッケージインストールスクリプトを使用している場合はインストール済みです)。

sudo apt install libode-dev

ODEがインストールされている環境では、ChoreonoidのCMake設定時にODEが自動で検出され、CMakeオプション BUILD_ODE_PLUGIN がデフォルトで ON となります。そのため通常のビルド手順に従うだけでODEプラグインもビルドされます。ODEがインストールされていてもプラグインをビルドしたくない場合は、このオプションを明示的に OFF にしてください。

Windowsでのビルド

WindowsでODEプラグインを利用する場合は、まずODEライブラリをソースからビルド・インストールします。ODEのソースアーカイブは Bitbucket内のダウンロードページ からダウンロードできます。

ダウンロードしたアーカイブを展開し、ODEのソースディレクトリで以下のコマンドを実行します。

cmake -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release -- -m
cmake --install build --config Release --prefix c:/local/ODE

この操作により、"C:\local\ODE" 以下にビルド済みのODEライブラリがインストールされます。インストール先はデフォルトでは "C:\Program Files\ODE" となっており、そちらにインストールしてもOKです(その場合は管理者権限が必要です)。

これらのディレクトリにODEがインストールされていれば、Choreonoid本体のCMake設定時にODEが自動で検出され、 BUILD_ODE_PLUGIN がデフォルトでONとなります。それ以外のディレクトリにインストールした場合は、CMakeの ODE_DIR 変数にそのディレクトリを設定してください。

ODEシミュレータの利用

ODEプラグインが読み込まれていると、シミュレータアイテムとして「ODEシミュレータ」が利用可能となります。メインメニューの「ファイル」-「新規」-「ODEシミュレータ」で生成し、 シミュレーションプロジェクトの作成 で解説されている手順でワールドアイテムの子アイテムとして配置することで使用できます。基本的な使い方は他のシミュレータアイテムと共通です。

対応機能

ODEシミュレータは以下の機能に対応しています。

  • アクチュエーションモード: トルク指令(JointEffort)、速度指令(JointVelocity)

  • 力センサ、加速度センサ、角速度センサ(レートジャイロ)のシミュレーション

  • 接触マテリアル による摩擦係数・反発係数の設定

  • ボディモデル内の自己干渉(モデル側の設定に従います)

  • 追加拘束(extra joint)。異なるボディ間にまたがる拘束にも対応( 追加拘束の設定

  • 表面速度(surface velocity)による疑似的なクローラやコンベアのシミュレーション

なお、位置指令(JointDisplacement)によるアクチュエーションには対応していません。位置制御を行う場合は、コントローラ側でPD制御等によりトルク指令または速度指令に変換してください。

プロパティ

ODEシミュレータアイテムでは、 シミュレータアイテム共通のプロパティ に加えて、以下の固有のプロパティが利用できます。

プロパティ

デフォルト値

意味

ステップモード

反復(quick step)

動力学計算のステップ方法を選択します。「反復(quick step)」は反復法によるソルバ(dWorldQuickStep)を使用し、高速に計算できます。「Big matrix」は直接法によるソルバ(dWorldStep)を使用し、精度は高いですが計算コストが大きくなります。

干渉検出空間タイプ

シンプル

ODEの干渉検出で使用する空間データ構造を「シンプル」「ハッシュ」「スイープ&プルーン」から選択します。物体数が少ない場合はシンプルで十分であり、物体数が多い場合は他のタイプの方が高速になることがあります。

重力加速度

0 0 -9.80665

重力加速度ベクトルです [m/s^2]。

摩擦係数

1.0

接触の摩擦係数です。コンタクトマテリアルで摩擦係数が設定されている物体間には、そちらの値が使用されます。

関節範囲拘束

false

モデルの関節可動範囲をODEの関節リミットとして設定し、可動範囲を超えないように拘束します。

軸慣性をリンク慣性に加算

false

モデルに設定された等価ロータ慣性を、関節軸まわりのリンク慣性に加算することで近似的に反映します( ロータ慣性の設定 参照)。

グローバルERP

0.4

ODEワールド全体のERP(Error Reduction Parameter)です。拘束誤差を補正する割合を0〜1の範囲で指定します。

グローバルCFM

1.0e-10

ODEワールド全体のCFM(Constraint Force Mixing)です。拘束を柔らかくする度合いを指定します。

反復回数

50

ステップモードが「反復(quick step)」のときのソルバ反復回数です。

SOR係数

1.3

反復法ソルバのSOR(逐次過緩和)係数です。0.1〜1.9の範囲で指定します。

深度補正速度制限

true

接触のめり込みを補正する速度に上限を設けます。

最大深度補正速度

0.01 [m/s]

めり込み補正速度の上限値です。「深度補正速度制限」が有効なときに使用されます。

接触面駆動間引き深度

0.005 [m]

表面速度による駆動(疑似クローラ等)において、めり込み深さがこの値を超える接触点には駆動を適用しないようにする閾値です。0を設定するとこの間引きを行いません。

2Dモード

false

物体の運動を2次元平面内に拘束してシミュレーションを行います。

ワールドアイテムの干渉検出器を使用

false

ODE内蔵の干渉検出機能の代わりに、ワールドアイテムで選択されている干渉検出器を使用します。

サンプル

ODEプラグイン専用のサンプルは特に用意されていませんが、Choreonoidに付属する一般のシミュレーションサンプル( sample/SimpleController/ 等)について、プロジェクト内のシミュレータアイテムをODEシミュレータに差し替えることで、多くのものをODEでシミュレーションすることができます。