パラメータのチューニング方法 (AGX)


本プロジェクトの物理シミュレーションは AGX Dynamics (AGXUnity) を用いています。 そのため、Unity 標準の PhysX (Project Settings > Physics) や ArticulationBody の設定を変更しても、 AGX 側の挙動は原則として変化しません。

この章では、AGXUnity で調整すべき主要パラメータ(安定性、関節駆動、接触、土砂/地形、性能)をまとめます。

安定性・計算性能に関わる基本設定

Simulation Manager

AGXUnity のシミュレーション全体設定は AGXUnity.Simulation ゲームオブジェクトで管理されます。 特に次の項目は、安定性/性能に直結します。

項目

説明

Time Step

AGX の時間刻み。小さくすると安定する一方で計算コストが増加する。Unity 側の更新周期と整合するように設定する。

Auto Stepping Mode

FixedUpdate / Update / Disabled。通常は FixedUpdate を使用する。

Gravity

重力ベクトル。

Solver Settings

ソルバ設定は AGXUnity.SolverSettings から行います。 関節や接触が不安定(振動、貫通、滑りすぎ、収束しない)な場合は、ここを調整します。

項目

説明

Number Of Threads

AGX の使用スレッド数。性能に影響するが、増やしても常に速くなるとは限らない。

Resting Iterations

反復ソルバの反復回数。静止接触の安定性に影響する。

Dry Friction Iterations

乾性摩擦の反復回数。摩擦による滑り/停止の安定性に影響する。

PPGS Resting Iterations

Terrain/粒子などで使われる PPGS の反復回数。土砂/地形が不安定な場合に影響する。

Warm Start Direct Contacts

静的に近いシーンで接触の収束が改善することがある。

関節・アクチュエータのチューニング (AGX Constraint)

AGXUnity では関節やシリンダ等の駆動は AGXUnity.Constraint と、その Controller( LockController / TargetSpeedController 等)で実現されます。 本プロジェクトでは、これらを扱いやすくするためのラッパとして PWRISimulator.ConstraintControl を使用しています。

ConstraintControl の主要パラメータ

ConstraintControl は制御モードに応じて Controller を切り替え、指令値・最大力などを反映します。

項目

説明

controlType

Position / Speed / Force。Position は内部で LockController を、Speed/Force は内部で TargetSpeedController を使用しています。

controlValue

指令値(controlTypeに応じて角度/速度/力が設定できます)。

controlMaxForce

Controller が出せる力/トルク上限。大きいほど追従は良くなるが、振動・発散の原因にもなる。

Compliance

制御や拘束の「柔らかさ」。小さいほど硬く(強く)拘束されるが、安定性が下がる場合がある。

Damping

制御や拘束の減衰。振動を抑える方向に働く。

deadTime

指令入力から実際に反映するまでの遅れ(むだ時間)。制御系評価用。

振動/発散が出たときの対処方法

次の順で調整すると安定することが多いです。

  1. Simulation.TimeStep を小さくする

  2. SolverSettings の Iterations(Resting/DryFriction/PPGS)を増やす

  3. controlMaxForce を下げる(過大入力を抑える)

  4. Compliance を大きくする(硬すぎる拘束を緩める)

  5. Damping を増やす(減衰を入れて振動を殺す)

接触(摩擦・反発)パラメータのチューニング

摩擦や反発は、Unity の PhysicMaterial ではなく、AGXUnity の ShapeMaterial / ContactMaterial によって設定します。 マテリアルの組み合わせ(Material1/Material2)ごとに ContactMaterial を作成し、摩擦係数や接触剛性などを設定します。

ContactMaterial の主要パラメータ

項目

説明

Friction Coefficients

摩擦係数。値が大きいほど滑りにくい。

Surface Viscosity

摩擦方向の粘性(接触での摩擦に関するコンプライアンス相当)。

Youngs Modulus

接触の剛性(硬さ)。大きいほど硬いが、不安定になりやすいので注意。

Damping

接触のめり込み解消の速さに関係する。

Restitution

反発係数(跳ねやすさ)。

土砂・地形(Deformable Terrain)のチューニング

土砂・掘削は AGX Terrain / Granular によって表現されます。 調整対象は大きく次の3つです。

  • AGXUnity.Model.DeformableTerrain: 地形(掘削/変形を管理。視覚化はUnity Terrainを通して行われる)

  • AGXUnity.Model.DeformableTerrainProperties: 土砂生成・崩壊・締固め等の挙動の設定

  • AGXUnity.Model.DeformableTerrainShovelSettings: バケット/ブレード等の掘削モデルの設定

DeformableTerrainProperties

項目

説明

Deformation Enabled

掘削/崩壊/締固めなどの地形変形を有効にする。

Create Particles Enabled

掘削時に動的土砂粒子を生成するか。無効にすると処理が軽くなるが、土砂表現は簡略化される。

SoilParticleSizeScaling

動的土砂粒子のサイズスケーリング。大きくすると粒子数が減り、性能が改善する代わりに表現が粗くなる。

SoilMergeSpeedThreshold / SoilParticleMergeRate

粒子が地形へ戻る条件と速度。土砂が散らばり続ける/逆に消えすぎる場合に調整する。

DeformableTerrainShovelSettings

バケット/ブレードによる掘削で、抵抗が弱い/強すぎる、土砂が出ない/出すぎる等がある場合は、次を調整します。

項目

説明

PenetrationDepthThreshold

歯先が地形に潜り込んだ深さに応じた抵抗の立ち上がり。

PenetrationForceScaling / MaxPenetrationForce

掘削抵抗係数と最大値。

NoMergeExtensionDistance

バケット近傍で土砂が地形へマージしない領域の距離しきい値。土砂が「消える」ように見える場合に調整する。

トラブルシュート(よくある症状と対処)

症状

解消方法

関節が震える/発散する

TimeStep を下げる → Iterations を増やす → controlMaxForce を下げる → Compliance/Damping を調整

接触が沈み込みすぎる/貫通する

YoungsModulus や接触 Damping、ソルバ反復数を見直す(硬すぎても不安定になるので注意)

摩擦で滑りすぎる/引っかかりすぎる

FrictionCoefficientsDryFrictionIterations を見直す

土砂が重い(FPSが落ちる)

SoilParticleSizeScaling を上げる、粒子生成を抑える、 PPGS Resting Iterations を見直す