AGXBreakableJoint

AGXBrekableJointはAGX Dynamicsをつかったジョイントで、一定の条件を満たすとジョイントが破壊(無効化)されます。 実装にはAGX DynamicsのHinge、Prismatic、LockJointを利用しています。

../_images/breakable_joint.png

サンプル

サンプルを使った利用方法の説明をします。サンプルプロジェクトは以下にあります。 DoubleArmを操作し、ドアを掴みながら引くとヒンジ拘束がなくなりドアが外れる様子を確認することができます。

  • プロジェクトファイル: chorenoid/sample/AGXDynamics/agxBreakableJoint.cnoid

  • ボデイファイル: chorenoid/sample/AGXDynamics/agxBreakableJoint.body

破壊条件

冒頭で説明しました通り、AGXBreakableJointでは一定の条件を満たすと破壊がトリガーされます。 その条件は以下の2種類で、breakTypeパラメータで指定します。

  • 一定時間一定以上の力を受け続けた時(breakType: force)

../_images/breakable_joint_breaklimitforce.png
  • 受けた力積が閾値を超えた時(breakType: impulse)

../_images/breakable_joint_breaklimitimpulse.png

breakTypeは力の受け方で使い分けをします。 例えば、ヒンジで取り付けられたドアを取り外すようなシーン ではforceが適しています。 一方でドリルで周期的に衝撃を受けるものについては一定以上の力を受け続けることは難しいため、impulseが適しています。

記述方法

AGXBrekableJointは以下のように記述し、利用します。

links:
  -
    name: Door
    parent: PillarL
    jointType: free
    elements:
      -
        type: AGXBreakableJointDevice
        link1Name: PillarL
        link2Name: Door
        jointType: revolute
        jointRange: [ 0, 180 ]
        position: [ 0, 0, 0 ]
        jointAxis: [ 0, 0, 1 ]
        jointCompliance: 1e-6
        breakType: force
        period: 3.0                 # 3sec以上
        breakLimitForce: 3000       # 3000N以上の力を
        validAxis: [0, 1, 0]        # Y軸方向にかけると破壊
  1. AGXBreakableJointで接続したいリンクをlinkNameに設定します

  2. 関節タイプをjointTypeに設定します

  3. 関節の位置と軸をpositionとjointAxisに設定します

  4. breakTypeで破壊のタイプを設定します

  • breakType: forceの場合、breakLimitForceとperiodを設定します

  • breakType: impulseの場合、breakLimitImpulseを設定します

  1. 必要に応じてバネの硬さ、ダンピングをjointCompliance、jointSpookDampingに設定します

  2. 必要に応じてvalidAxisを設定します。validAxisは関節軸のどの軸をbreakLimitの計算に利用するかを指定することができます。例えば、下図ではvalidAxisを[0, 1, 0]とすることで、XZ軸方向のに加えられた力は考慮しないということになります。

../_images/breakable_joint_validaxis.png

パラメータの説明

以下にパラメータの説明をします。

パラメータ

デフォルト値

単位

意味

type: AGXBreakableJointDevice

-

-

string

AGXBreakableJointを使うことの宣言

link1Name

-

-

string

リンク名

link2Name

-

-

string

リンク名

jointType

-

-

string

関節タイプ: revolute, prismatic, fixed

position

[ 0, 0, 0]

m

Vec3

link1の座標系からみた関節位置

jointAxis

[ 0, 0, 1]

-

Unit Vec3

関節軸

jointRange

[ -inf, inf ]

m or deg

Vec2

関節可動範囲

jointCompliance

1e-8

m/N

double

関節コンプライアンス

jointSpookDamping

0.33

s

double

関節スプークダンパ

breakType

force

-

string

破壊タイプ: force、impulse

breakLimitForce

double_max

N

double

関節破壊の力閾値

period

0

s

double

時間閾値

breakLimitImpulse

double_max

Ns

double

関節破壊の力積閾値

offsetForce

0

N

double

オフセット力

validAxis

[ 1, 1, 1 ]

-

3要素シーケンス

X, Y, Z軸のどの方向を有効にするかを指定。対応する成分に1を指定するとその軸方向の力をみるようになる

signedAxis

[ 0, 0, 0 ]

-

3要素シーケンス

X, Y, Z軸について、力の閾値の符号を設定する。0 だと±両方、1だとプラスのみ、-1だとマイナス方向のみとなる