Issues with Simulation Consistency and Physics Jitter/Bouncing in AGV-Trailer Model

I am developing a simulation involving an AGV (lead vehicle) towing a trailer (rear vehicle) navigating an inclined plane (slope). I have encountered two specific issues that I need help with:

1. Inconsistency Between Simulation Runs The simulation behavior differs between the first and second time I press “Play.” Even without changing any parameters, the results are not reproducible across consecutive runs. What could be the potential causes for this inconsistency in Isaac Sim?

2. Abnormal Physics “Bouncing” or Jitter During the simulation, both the AGV and the trailer exhibit significant bouncing or jittering behaviors. This is most prominent around the 10-second mark. This type of physical instability would not happen in reality, and I have noticed that the default models in the Isaac Sim Assets do not have this issue. Which physics settings or properties (e.g., collision margins, mass properties, or joint constraints) should I check to resolve this?

Isaac Sim Version

5.1.0

model1.zip (11.6 KB)

Hi, Non-reproducible “Play” runs in Isaac Sim usually come from hidden randomness, changed initial conditions, or non-deterministic physics stepping, while strong bouncing/jitter is almost always due to poorly conditioned physics (scales, masses, collision geometry, joints, and solver settings).

1. Non-reproducible subsequent runs

Determinism expectations
- Isaac Sim/PhysX is deterministic only under strict conditions (same hardware, same version, same initial USD state, and fixed random seeds).
- Any procedural/Scripted reset that does not fully restore the initial state (poses, velocities, joint states) will cause run-to-run drift.

  • Reset vs. reload of the stage
    • If you press “Stop” then “Play” without reloading the USD or fully resetting all physics state, some things can carry over:
      • Residual linear/angular velocities on the AGV, trailer, or wheels.
      • Changed joint positions or drive targets from the previous run.
      • Contacts or sleeping state flags still set on some rigid bodies.
    • Prefer one of:
      • A scripted reset that explicitly:
        a) Sets all rigid bodies’ poses and zero velocities.
        b) Resets all articulation joint positions/velocities and drive targets.
      • Or reloading the stage/Isaac Lab environment between episodes (common in Isaac Lab training setups).

2. Diagnosing and reducing bouncing/jitter

Abnormal bouncing on an inclined plane is usually a combination of scale, collision, and solver configuration. Compare your AGV+trailer setup to a known-good Isaac Sim wheeled robot or pallet asset.

Key rigid-body and collision settings

Check these per rigid body (AGV chassis, trailer frame, wheels, hitch parts):

  • Units and scale
    • Confirm everything is in meters and kilograms.
    • Avoid extremely small or thin geometry (e.g., 1e4 m thick plates), which amplifies penetration and jitter.
  • Collision shapes and margins
    • Prefer simple primitives (box, capsule, cylinder) where possible instead of very detailed triangle meshes.
    • For collision properties (names may vary by UI vs Isaac Lab config), use reasonable offsets:
      • contact_offset around 1~2 cm relative to typical object sizes (e.g., 0.01-0.02 for a 1 m vehicle).
      • rest_offset small and usually <= 0 (e.g., 0 or a tiny positive value like 1e5).
    • Oversized contact_offset or large positive rest_offset can put objects perpetually “hovering” and oscillating between contact states.
  • Mass, inertia, damping
    • Ensure:
      • Total mass of AGV and trailer is realistic (tens or hundreds of kg, not 0.1 kg or 10,000 kg).
      • Inertia tensors are not extremely small, anisotropic, or manually set to unrealistic values.
    • If custom inertias were imported from CAD, try:
      • Letting Isaac Sim/PhysX auto-compute them once (if possible) to see if that stabilizes motion.
    • Increase damping slightly:
      • Linear damping: small positive value (e.g., 0.1-0.5).
      • Angular damping: similar magnitude.
    • Too little damping on a lightly loaded body on a slope can lead to long-lasting micro-oscillations.
  • Depenetration and velocity limits
    • max_depenetration_velocity too large can cause “kicks” when resolving overlaps; too small can cause bodies to remain stuck. The forum example uses a tiny value 0.01, which is very conservative.
    • Set reasonable max_linear_velocity and max_angular_velocity (e.g., 5~20 m/s, 50~100 rad/s), not huge defaults that allow wild impulses.

Joint and articulation configuration (AGV–trailer coupling and wheels)

The hitch joint and wheel joints are critical:

  • Joint types and limits
    • Use appropriate joint type for the hitch:
      • If you need yaw only: a revolute joint around vertical axis with limits set wide enough for expected articulation.
      • For more DoF (e.g., pitch + yaw), model as a small chain of joints, each with physically reasonable limits.
    • Extremely tight limits or misaligned axes can cause solver to fight constraints and create jitter.
  • Joint drives and stiffness
    • For any driven DOFs (e.g., wheel rotation or steering):
      • Keep stiffness and damping values in a physically realistic range.
      • Very high stiffness and low damping is a classic source of high-frequency oscillation.
    • If hitch joints are driven inadvertently (e.g., nonzero stiffness on a DOF that should be free), set them to zero stiffness or use a different joint mode.
  • Solver iterations
    • For bodies involved in tight contacts and constraints (AGV, trailer, wheels, hitch), increase:
      • solver_position_iteration_count (e.g., 16-64).
      • solver_velocity_iteration_count (e.g., 4-8).
    • Higher iteration counts improve constraint resolution and reduce jitter, especially on slopes or under towing loads.

Scene and slope configuration

  • Ground/slope collider
    • Ensure slope is a single, reasonably simple collider (e.g., one big box or simple mesh) rather than many small overlapping pieces.
    • Avoid coplanar or overlapping collision meshes under the wheels; multiple contact layers can cause chattering.
  • Friction
    • AGV and trailer tires vs slope:
      • Use realistic static and dynamic friction coefficients.
      • Extremely high friction and stiff joints can produce “stick-slip” jitter; too low friction leads to sliding and repeated micro-impacts.
  • Gravity and time step
    • Confirm gravity is the default (0.0, - 9.81) unless you have a reason to change it.
    • Use a small physics_dt (e.g., 0.005-0.01s) for a vehicle on a slope, especially if wheel contact patches are small.

3. Debugging tips

  • Step 1 - Compare with a working asset
    • Load an official Isaac Sim wheeled robot or AGV asset and place it on your same slope.
    • If that asset is stable there:
      • Incrementally replace pieces of your model (AGV body, wheels, trailer, hitch) with the reference asset’s components to see when jitter appears.
  • Step 2 - Simplify
    • Temporarily:
      • Replace wheels with simple boxes.
      • Replace the hitch with a fixed joint.
      • Run with low speeds and no control input.
    • If jitter disappears, re-introduce complexity piece-by-piece to isolate the cause (joint configuration vs collision vs mass).
  • Step 3 - Instrument reset
    • Create a simple Python reset function that:
      • Logs all initial poses, velocities, and joint states.
      • Sets them explicitly on every “Play” or episode reset.
    • Confirm that run 1 and run 2 start from bit-identical states.