パラメータのチューニング方法 (AGX) =============================== 本プロジェクトの物理シミュレーションは AGX Dynamics (AGXUnity) を用いています。 そのため、Unity 標準の PhysX (``Project Settings > Physics``) や ``ArticulationBody`` の設定を変更しても、 AGX 側の挙動は原則として変化しません。 この章では、AGXUnity で調整すべき主要パラメータ(安定性、関節駆動、接触、土砂/地形、性能)をまとめます。 安定性・計算性能に関わる基本設定 -------------------------------- Simulation Manager ^^^^^^^^^^^^^^^^^^ AGXUnity のシミュレーション全体設定は ``AGXUnity.Simulation`` ゲームオブジェクトで管理されます。 特に次の項目は、安定性/性能に直結します。 .. list-table:: :header-rows: 1 :widths: 35 65 * - 項目 - 説明 * - Time Step - AGX の時間刻み。小さくすると安定する一方で計算コストが増加する。Unity 側の更新周期と整合するように設定する。 * - Auto Stepping Mode - ``FixedUpdate`` / ``Update`` / ``Disabled``。通常は ``FixedUpdate`` を使用する。 * - Gravity - 重力ベクトル。 Solver Settings ^^^^^^^^^^^^^^^ ソルバ設定は ``AGXUnity.SolverSettings`` から行います。 関節や接触が不安定(振動、貫通、滑りすぎ、収束しない)な場合は、ここを調整します。 .. list-table:: :header-rows: 1 :widths: 35 65 * - 項目 - 説明 * - 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 を切り替え、指令値・最大力などを反映します。 .. list-table:: :header-rows: 1 :widths: 35 65 * - 項目 - 説明 * - 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 の主要パラメータ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 :widths: 35 65 * - 項目 - 説明 * - 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 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. list-table:: :header-rows: 1 :widths: 35 65 * - 項目 - 説明 * - Deformation Enabled - 掘削/崩壊/締固めなどの地形変形を有効にする。 * - Create Particles Enabled - 掘削時に動的土砂粒子を生成するか。無効にすると処理が軽くなるが、土砂表現は簡略化される。 * - SoilParticleSizeScaling - 動的土砂粒子のサイズスケーリング。大きくすると粒子数が減り、性能が改善する代わりに表現が粗くなる。 * - SoilMergeSpeedThreshold / SoilParticleMergeRate - 粒子が地形へ戻る条件と速度。土砂が散らばり続ける/逆に消えすぎる場合に調整する。 DeformableTerrainShovelSettings ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ バケット/ブレードによる掘削で、抵抗が弱い/強すぎる、土砂が出ない/出すぎる等がある場合は、次を調整します。 .. list-table:: :header-rows: 1 :widths: 35 65 * - 項目 - 説明 * - PenetrationDepthThreshold - 歯先が地形に潜り込んだ深さに応じた抵抗の立ち上がり。 * - PenetrationForceScaling / MaxPenetrationForce - 掘削抵抗係数と最大値。 * - NoMergeExtensionDistance - バケット近傍で土砂が地形へマージしない領域の距離しきい値。土砂が「消える」ように見える場合に調整する。 トラブルシュート(よくある症状と対処) -------------------------------------- .. list-table:: :header-rows: 1 :widths: 40 60 * - 症状 - 解消方法 * - 関節が震える/発散する - ``TimeStep`` を下げる → ``Iterations`` を増やす → ``controlMaxForce`` を下げる → ``Compliance/Damping`` を調整 * - 接触が沈み込みすぎる/貫通する - ``YoungsModulus`` や接触 ``Damping``、ソルバ反復数を見直す(硬すぎても不安定になるので注意) * - 摩擦で滑りすぎる/引っかかりすぎる - ``FrictionCoefficients`` と ``DryFrictionIterations`` を見直す * - 土砂が重い(FPSが落ちる) - ``SoilParticleSizeScaling`` を上げる、粒子生成を抑える、 ``PPGS Resting Iterations`` を見直す