物理マテリアルの追加パラメータ

AGXDynamicsプラグインを利用時には以下の物理マテリアル(物性)を利用することができます。

サンプル

AGXDynamicsPluginのマテリアルのサンプルが以下にあります。 パラメータ値によって動作結果が異なることを確認することができます。

  • choreonoid/samples/AGXDynamics/agxMaterialSample.cnoid

マテリアルの設定手順

AGXSimulatorでリンク間の摩擦係数、反発係数などは、以下の手順で調整することができます。

  1. マテリアルファイルにMaterial、ContactMaterialを記述

  2. ボディファイルにマテリアルファイルで定義した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: [ iterative, direct ]
    contactReductionMode: reduceGeometry
    contactReductionBinResolution: 3

Materialパラメータの説明

バルクマテリアル

パラメータ

デフォルト値

単位

意味

density

1000

kg/m3

double

密度。リンクの質量、慣性テンソル、重心の自動計算に利用されます。

youngsModulus

4.0e8

Pa

double

ヤング率。リンク(剛体)の硬さを表します。値が小さいとリンク同士が侵入しやすくなります。

viscosity

0.5

-

double

反発粘性。反発粘性のペアが反発係数となります。

spookDamping

0.075

s

double

スプークダンパ。リンク同士の侵入の緩和(拘束条件を満たす)に利用します。

poissonRatio

0.3

-

double

ポアソン比(2.27.0.0より非推奨)

サーフェスマテリアル

パラメータ

デフォルト値

単位

意味

roughness

0.5

-

double

表面粗さ。表面粗さのペアが摩擦係数となります。

surfaceViscosity

5e-09

-

double

表面粘性。接面方向に働く粘性です。表面粘性のペアがContactMaterialのsurfaceViscosityとなります。オイルなど濡れを表現する時に利用します。

adhesionForce

0.0

N

double

粘着力。形状が接触している時に法線方向に粘着力が働きます。接着剤のような振る舞いをさせたい時に利用します。

adhesivOverlap

0.0

m

double

粘着力有効距離。リンクの侵入量>有効距離となると粘着力が有効になります。

注釈

ContactMaterialが定義されているものについては、ContactMaterialのパラメータが利用されます。Materialのサーフェスマテリアルは利用されません。

ワイヤーマテリアル

パラメータ

デフォルト値

単位

意味

wireYoungsModulusStretch

6e10

Pa

double

引張ヤング率

wireSpookDampingStretch

0.075

s

double

引張スプークダンパ

wireYoungsModulusBend

6e10

Pa

double

曲げヤング率

wireSpookDampingBend

0.075

s

double

曲げスプークダンパ

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

副方向摩擦係数。摩擦モデルにoriented_box、oriented_scaled_box、constant_normal_force_oriented_box、oriented_iterativeのいずれかを指定した場合に、secondaryFriction>=0で有効となります。

surfaceViscosity

1.0e-8

-

double

表面粘性係数。摩擦拘束に対するコンプライアンスです。

secondarySurfaceViscosity

-1.0

-

double

副方向表面粘性係数。摩擦モデルにoriented_box、oriented_scaled_box、constant_normal_force_oriented_box、oriented_iterativeのいずれかを指定した場合に、secondaryFriction>=0で有効となります。

adhesionForce

0.0

N

double

粘着力

adhesivOverlap

0.0

m

double

粘着力有効距離

frictionModel

[ default, default ]

-

string
string
摩擦モデル: default(iterative), iterative, box, scaled_box, oriented_box, oriented_scaled_box, constant_normal_force_oriented_box, oriented_iterative
ソルバ : default(split), split, direct, iterative, direct_and_iterative

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%程度であり、ほとんどの状況では気にしなくて良いとの考えです。

注釈

摩擦モデルについてはChoreonoid 1.7で利用可能なものから追加されています。また、iterative, constant_normal_force_oriented_box については、それぞれ1.7までの cone, orientedBox に対応します。

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: