Bulletプラグイン

概要

Bulletについて

Bullet Physics は、オープンソース(zlibライセンス)の物理計算ライブラリです。ゲームや映像制作の分野で広く利用されてきた実績があり、ロボティクス分野でもPythonバインディングのPyBulletを通じて学習研究等に広く使われています。

Bulletは剛体・ソフトボディの汎用物理エンジンですが、多関節のロボットを扱うための機能として、Featherstone法に基づいて関節座標系で運動方程式を解くマルチボディ(btMultiBody)系の機能も備えています。

Bulletプラグインについて

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

本プラグインはBulletのマルチボディダイナミクス機能に基づいて実装されており、多関節ロボットをAISTシミュレータ等と同様に関節座標系で安定に扱うことができます。Choreonoidで扱う標準的なボディモデルをそのまま利用でき、位置制御・速度制御・トルク制御のいずれの方式にも対応しています。

また本プラグインは、PhysXプラグインと共通の履帯(クローラ)デバイスである PiecewiseRigidContinuousTrack (区分剛体無限軌道)に対応しており、クローラ型ロボットの履帯シミュレーションを行うことができます。詳細は 無限軌道(クローラ)の区分剛体シミュレーション を参照してください。

注釈

以前のバージョンのChoreonoidに含まれていたBulletプラグインは10年以上前の実験的な実装のままとなっていましたが、バージョン2.5.0において、現行バージョンのBulletに合わせて一から実装し直され、実用的に使用できるプラグインとなりました。

セットアップ

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

Ubuntuの場合、 依存パッケージのインストール で使用するパッケージインストールスクリプトにBulletのパッケージ(libbullet-dev)も含まれているため、そちらの手順に従っていれば既にインストールされています。個別にインストールする場合は、以下のコマンドを実行します。

sudo apt install libbullet-dev

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

独自にビルドしたBulletライブラリを使用したい場合は、CMakeの BULLET_DIR 変数にそのインストール先ディレクトリを設定します。Windowsで本プラグインを利用する場合は、Bulletをソースからビルド・インストールした上で、この方法で指定してください。なおBulletを倍精度(double precision)でビルドしたものを使用する場合は、CMakeで BULLET_USE_DOUBLE_PRECISIONON に設定します。

Bulletシミュレータの利用

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

対応機能

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

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

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

  • リンクの速度・加速度・駆動トルク(力)の状態出力(対応するプロパティで有効化)

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

  • 追加拘束(extra joint)( 追加拘束の設定

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

  • PiecewiseRigidContinuousTrackデバイスによる履帯シミュレーション( 無限軌道(クローラ)の区分剛体シミュレーション

  • モデルに設定された等価ロータ慣性のシミュレーション(仮想ギア付きロータリンクによる。 ロータ慣性の設定 参照)

プロパティ

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

プロパティ

デフォルト値

意味

重力

0 0 -9.80665

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

ソルバ

逐次インパルス

拘束ソルバを「逐次インパルス」「MLCP (Dantzig)」から選択します。

ソルバ反復回数

50

ソルバの最大反復回数です。

接触ERP

0.2

接触のめり込みを補正する際のERP(Error Reduction Parameter)です。0〜1の範囲で指定します。

位置ゲイン

1.0

位置指令で関節を駆動する際のモータ拘束のゲインです。0〜1の範囲で指定します。

速度ゲイン

1.0

速度指令で関節を駆動する際のモータ拘束のゲインです。0〜1の範囲で指定します。

並進ダンピング

0.0

剛体の並進運動に適用するダンピング係数です。

回転ダンピング

0.0

剛体の回転運動に適用するダンピング係数です。

衝突マージン

0.001 [m]

Bulletの衝突形状に適用するマージンです。

動的オブジェクトへのGImpactメッシュ適用

false

動く物体の凹形状メッシュをGImpactメッシュとして扱います。無効時は凸形状に変換されます。

内部エッジの平滑化

true

メッシュの内部エッジに起因する不自然な接触反力を抑制します。

自己干渉

false

ボディモデル内の自己干渉をデフォルトで有効にします。

ロータ慣性

true

モデルに等価ロータ慣性が設定されている場合に、仮想的なギア付きロータリンクを用いてその影響をシミュレートします。

デフォルトロータギア比

100.0

ロータ慣性のシミュレーションにおいて、モデルにギア比の情報がない場合に使用するギア比です。

速度出力

false

リンクの速度をシミュレーション結果として出力します。

加速度出力

false

リンクの加速度をシミュレーション結果として出力します。

駆動エフォート出力

false

関節の駆動に実際に使用されたトルク(直動関節の場合は力)を、関節のエフォート値として書き戻します。

サンプル

Bulletプラグインを利用できるサンプルプロジェクトとして、履帯シミュレーションのサンプルが choreonoid/sample/PiecewiseRigidContinuousTrack/ ディレクトリに用意されています。これらのサンプルにはBulletシミュレータとPhysXシミュレータの両方が含まれており、使用するシミュレータを選択してシミュレーションを実行できます。サンプルの内容については PhysXプラグイン のサンプルの節を参照してください。

また、Choreonoidに付属する一般のシミュレーションサンプル( sample/SimpleController/ 等)についても、プロジェクト内のシミュレータアイテムをBulletシミュレータに差し替えることで、多くのものをBulletでシミュレーションすることができます。