Heuristic:Isaac sim IsaacGymEnvs Factory Velocity Limits
| Knowledge Sources | |
|---|---|
| Domains | Robotics, Simulation |
| Last Updated | 2026-02-15 09:00 GMT |
Overview
Reduce Franka robot maximum velocity limits from defaults (1000.0 linear, 64.0 angular) to conservative values (1.0 linear, 2pi angular) to prevent CUDA errors in contact-rich Factory and IndustReal tasks.
Description
The default IsaacGym asset options allow very high maximum velocities (1000.0 m/s linear, 64.0 rad/s angular). In contact-rich manipulation tasks like Factory nut-bolt assembly and IndustReal peg insertion, these defaults cause the PhysX GPU solver to produce CUDA errors when rigid bodies achieve extreme velocities during contact events. Both `factory_base.py` and `industreal_base.py` explicitly override these defaults with conservative limits.
Usage
Apply this heuristic when creating contact-rich manipulation tasks, especially those involving tight-tolerance assembly operations (nut-bolt, peg-hole insertion, gear meshing). The reduced velocity limits prevent the PhysX GPU solver from encountering numerical instability during high-force contact events. This is particularly important when training policies that may apply large forces during exploration.
The Insight (Rule of Thumb)
- Action: Set `max_linear_velocity = 1.0` and `max_angular_velocity = 2 * math.pi` on Franka robot asset options.
- Value: Linear: 1.0 m/s (down from 1000.0 default). Angular: ~6.28 rad/s (down from 64.0 default).
- Trade-off: Policies cannot command extremely fast motions, which limits aggressive exploration but prevents simulation crashes. The reduced limits are still well above realistic robot velocities.
- Additional Control: Factory also clamps applied torques to +-100 Nm in the control module (`factory_control.py`).
Reasoning
During early RL training, exploration noise and random actions can cause the simulated robot to accelerate to extreme velocities, especially in contact-rich scenarios. When a rigid body reaches the PhysX solver's numerical limits, it triggers CUDA device-side assertion errors that crash the training process. The reduced velocity limits act as a physics-level safety constraint, capping velocities before the solver encounters numerical issues.
From `factory_base.py:124-126`:
franka_options.max_linear_velocity = 1.0
# default = 1000.0; reduced to prevent CUDA errors
franka_options.max_angular_velocity = 2 * math.pi
# default = 64.0; reduced to prevent CUDA errors
Same pattern in `industreal_base.py:123-131`:
franka_options.max_linear_velocity = 1.0
# default = 1000.0; reduced to prevent CUDA errors
franka_options.max_angular_velocity = (2 * math.pi
# default = 64.0; reduced to prevent CUDA errors
Torque clamping in `factory_control.py:174`:
torch.clamp(dof_torque, min=-100.0, max=100.0)
Additional numerical stability concern in `factory_control.py:387`:
# NOTE: Susceptible to undesirable behavior due to divide-by-zero
Related Pages
- Implementation:Isaac_sim_IsaacGymEnvs_FactoryBase_Init
- Implementation:Isaac_sim_IsaacGymEnvs_Factory_Control_Algorithms
- Implementation:Isaac_sim_IsaacGymEnvs_IndustReal_Sim_to_Real
- Principle:Isaac_sim_IsaacGymEnvs_Factory_Scene_Initialization
- Principle:Isaac_sim_IsaacGymEnvs_Robot_Controller_Configuration