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_PRECISION を ON に設定します。
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でシミュレーションすることができます。