物理マテリアルの追加パラメータ¶
AGXDynamicsプラグインを利用時には以下の物理マテリアル(物性)を利用することができます。
サンプル¶
AGXDynamicsPluginのマテリアルのサンプルが以下にあります。 パラメータ値によって動作結果が異なることを確認することができます。
- choreonoid/samples/AGXDynamics/agxMaterialSample.cnoid
マテリアルの設定手順¶
AGXSimulatorでリンク間の摩擦係数、反発係数などは、以下の手順で調整することができます。
- マテリアルファイルにMaterial、ContactMaterialを記述
- ボディファイルにマテリアルファイルで定義したMaterialを設定
マテリアルファイルと記述方法¶
マテリアルファイルは摩擦係数や反発係数などの物性を記述したリストファイルです。
このファイルは材質(Material)について、同じまたは異なる材質の接触物性(ContactMaterial)を記述することができます。
ここで定義した材質名をBodyファイルに記述することで、モデルに材質を設定することができます。
マテリアルファイルはワールドアイテムのプロパティに設定することで、読み込まれます。
デフォルトでは
choreonoid/share/default/materials.yaml
が設定されており、自動的に読み込まれます。materials:
-
name: Ground
roughness: 0.5
viscosity: 0.0
-
name: agxMat5
density: 1.0
contactMaterials:
-
materials: [ Ground, agxMat5 ]
youngsModulus: 1.0e5
restitution: 0.1
spookDamping: 0.08
friction: 0.416667
surfaceViscosity: 1.0e-8
adhesionForce: 100
adhesivOverlap: 0.2
frictionModel: [ cone, direct ]
contactReductionMode: reduceGeometry
contactReductionBinResolution: 3
Materialパラメータの説明¶
バルクマテリアル¶
パラメータ | デフォルト値 | 単位 | 型 | 意味 |
---|---|---|---|---|
density | 1000 | kg/m3 | double | 密度。リンクの質量、慣性テンソル、重心の自動計算に利用されます。 |
youngsModulus | 4.0e8 | Pa | double | ヤング率。リンク(剛体)の硬さを表します。値が小さいとリンク同士が侵入しやすくなります。 |
poissonRatio | 0.3 | - | double | ポアソン比 |
サーフェスマテリアル¶
パラメータ | デフォルト値 | 単位 | 型 | 意味 |
---|---|---|---|---|
viscosity | 0.0 | - | double | 反発粘性。反発粘性のペアが反発係数となります。 |
spookDamping | 0.075 | s | double | スプークダンパ。リンク同士の侵入の緩和(拘束条件を満たす)に利用します。 |
roughness | 0.5 | - | double | 表面粗さ。表面粗さのペアが摩擦係数となります。 |
surfaceViscosity | 5e-09 | - | double | 表面粘性。接面方向に働く粘性です。表面粘性のペアがContactMaterialのsurfaceViscosityとなります。オイルなど濡れを表現する時に利用します。 |
adhesionForce | 0.0 | N | double | 粘着力。形状が接触している時に法線方向に粘着力が働きます。接着剤のような振る舞いをさせたい時に利用します。 |
adhesivOverlap | 0.0 | m | double | 粘着力有効距離。リンクの侵入量>有効距離となると粘着力が有効になります。 |
注釈
ContactMaterialが定義されているものについては、ContactMaterialのパラメータが利用されます。Materialのサーフェスマテリアルは利用されません。
ContactMaterialパラメータの説明¶
パラメータ | デフォルト値 | 単位 | 型 | 意味 |
---|---|---|---|---|
youngsModulus | 2.0e8 | Pa | double | ヤング率 |
restitution | 0.0 | - | double | 反発係数。0:完全非弾性衝突、1:完全弾性衝突 |
spookDamping | 0.075 | s | double | スプークダンパ |
friction | 0.5 | - | double | 摩擦係数 |
secondaryFriction | -1.0 | - | double | 副方向摩擦係数。摩擦モデルorientedBox指定時にsecondaryFriction>=0で有効となります。 |
surfaceViscosity | 1.0e-8 | - | double | 表面粘性係数。摩擦拘束に対するコンプライアンスです。 |
secondarySurfaceViscosity | -1.0 | - | double | 副方向表面粘性係数。摩擦モデルorientedBox指定時にsecondaryFriction>=0で有効となります。 |
adhesionForce | 0.0 | N | double | 粘着力 |
adhesivOverlap | 0.0 | m | double | 粘着力有効距離 |
frictionModel | [ default, default ] | - | string
string
|
摩擦モデル: default(cone), cone, box, scaledBox, orientedBox
ソルバ : default(split), split, direct, iterative, iterativeAndDirect
|
contactReductionMode | default | - | string | 接触点削減方式: default(reduceGeometry), reduceGeometry, reduceALL, reduceNone |
contactReductionBinResolution | 0 | - | uint8_t | 接触点削減ビン解像度。0の場合はAGXSimulatorアイテムのパラメータを利用します。 |
primaryDirection | [ 0, 0, 0 ] | Unit vector | Vec3 | 摩擦モデルorientedBox指定時の主要方向ベクトル |
referenceBodyName | - | - | string | 摩擦モデルorientedBox指定時の参照Body名 |
referenceLinkName | - | - | string | 摩擦モデルorientedBox指定時の参照Link名 |
注釈
AGXDynamicsは動摩擦係数、静止摩擦係数の区別がありません。実際、値の差は10-20%程度であり、ほとんどの状況では気にしなくて良いとの考えです。
ContactMaterialが定義されていない場合¶
全てのMaterialのペアの物性がContactMaterialに記述されているのが望ましいのですが、難しいと思います。
ContactMaterialが設定されていない場合にはMaterialに記述されているパラメータついて以下の式に従って値を算出します。
Materialにもパラメータが設定されていない場合にはデフォルト値が適用されます。
- youngsModulus = (m1.youngsModulus * m2.youngsModulus)/(m1.youngsModulus + m2.youngsModulus)
- restitution = sqrt((1-m1.viscosity) * (1-m2.viscosity))
- spookDamping = max(m1.spookDamping, m2.spookDamping)
- friction = sqrt(m1.roughness * m2.roughness)
- surfaceViscosity = m1.surfaceViscosity + m2.surfaceViscosity
- adhesionForce = m1.adhesionForce + m2.adhesionForce
ボディファイルのマテリアルの記述方法¶
ボディファイルのマテリアルの記述方法について説明します。
重心、質量、慣性はmassTypeで直接指定か密度を使った自動計算を選択することができます。
デフォルトはmassです。
massType: mass # 直接指定
massType: density # 密度を使った自動計算
また、材質はmaterialでマテリアルファイルに定義されているマテリアルか直接指定を選択することができます。
デフォルトはマテリアルファイルに定義されているDefaultまたはdefualtです。
material: Default # デフォルトマテリアル
material: Ground # マテリアル
material: useLinkInfo # 直接指定
以下は記述例です。
注釈
現在のところ、densityを使った重心、質量、慣性テンソルの計算結果はAGXDynamics内部で保持しており、ChorenoidのリンクやGUIから取得、確認することはできません。
従来記法¶
- 従来のChoreonoidの記法です
- 記載されいているcenterOfMass, mass, inertiaを利用します
- Materialはdensityを除いて、defaultとなります
- ContactMaterialはdefault vs xxxxx となります
links:
-
name: box1
centerOfMass: [ 0, 0, 0 ]
mass: 1.0
inertia: [
0.02, 0, 0,
0, 0.02, 0,
0, 0, 0.02 ]
マテリアルファイルの利用(推奨)¶
- densityを含むマテリアルファイルに記述されたパラメータを使います
links:
-
name: box1
massType: density # 密度を利用して重心、質量、慣性テンソルを自動計算する
material: steel # マテリアルファイルのsteelを利用
density: 1.0 # densityが記述されている場合はsteelのdensityを
# オーバライドして、直接記述されているものを利用します
従来記法+マテリアルリストの利用(推奨)¶
- massType: massで直接記述されている重心、質量、慣性テンソルを利用します
- その他のマテリアルパラメータはマテリアルファイルのsteelを利用します
links:
-
name: box1
massType: mass # 直接記述された重心、質量、慣性テンソルを利用する
centerOfMass: [ 0, 0, 0 ]
mass: 1.0
inertia: [
0.02, 0, 0,
0, 0.02, 0,
0, 0, 0.02 ]
material: steel # マテリアルファイルのsteelを利用
直接記述(非推奨)¶
- material: useLinkInfoとするとボディファイルに記述されたMaterialのパラメータを利用することができます
- ContactMaterialが定義されていない場合 に従ってContactMaterialの値が計算されます
links:
-
name: box1
massType: density
material: useLinkInfo
density: 1.0
youngsModulus:
poissonRatio:
viscosity:
spookDamping:
roughness:
surfaceViscosity:
adhesionForce:
adhesivOverlap:
全記述(非推奨)¶
- すべてが記述されている場合です
- どのパラメータが利用されているのか判別がしずらいのでおすすめしません
links:
-
name: box1
massType: density # 密度を利用して重心、質量、慣性テンソルを自動計算する
centerOfMass: [ 0, 0, 0 ]
mass: 1.0
inertia: [
0.02, 0, 0,
0, 0.02, 0,
0, 0, 0.02 ]
material: steel # materialリストを利用
density: 1.0 # 記述されたdensityを利用
youngsModulus: # 以下は使用されない
poissonRatio:
viscosity:
spookDamping:
roughness:
surfaceViscosity:
adhesionForce:
adhesivOverlap: