[omni.kit.loop-isaac] Isaac Loop Runner#
Version: 1.6.0
Overview#
The omni.kit.loop-isaac extension provides a custom loop runner for Isaac Sim that controls run-loop pacing and the dt value the loop dispatches to its preUpdate / update / postUpdate event streams. It replaces the default Kit loop runner with one that supports manual stepping mode and a fixed dt for deterministic frame timing. Timeline tick advance (omni.timeline) and physics stepping (omni.physx.*) are separate systems that consume the loop’s events; this extension does not own them directly.
This extension must be enabled during app startup by adding it as a dependency in your application’s .kit file.
Functionality#
Manual stepping mode: Enables explicit control over when simulation frames advance, allowing external code to step the simulation at a controlled rate
Fixed timestep control: Configurable step sizes for deterministic simulation behavior independent of wall-clock time
Rate limiting: Configurable rate limits for main, present, and rendering run loops (defaults: main and rendering at 120Hz, present at 60Hz)
External simulation time: Supports setting simulation time from external sources for synchronized multi-system simulations
Enable Extension#
The extension can be enabled (if not already) in one of the following ways:
Define the next entry as an application argument from a terminal.
APP_SCRIPT.(sh|bat) --enable omni.kit.loop-isaac
Define the next entry under [dependencies] in an experience (.kit) file or an extension configuration (extension.toml) file.
[dependencies]
"omni.kit.loop-isaac" = {}
Open the Window > Extensions menu in a running application instance and search for omni.kit.loop-isaac.
Then, toggle the enable control button if it is not already active.
Python API#
Isaac loop bindings
- class RunLoopRunner#
Bases:
pybind11_object- get_manual_mode(
- self: omni.kit.loop.bindings._loop.RunLoopRunner,
- name: str = '',
Gets the manual mode state for the run loop.
- Parameters:
name (
str) – The name of the run loop. If name is an empty string, returns the state of the first active run loop.- Returns:
True if manual mode is enabled, false otherwise.
- Return type:
bool
- get_manual_step_size(
- self: omni.kit.loop.bindings._loop.RunLoopRunner,
- name: str = '',
Gets the time step size (dt) for manual stepping mode.
- Parameters:
name (
str) – The name of the run loop. If name is an empty string, returns the step size of the first active run loop.- Returns:
The time step size in seconds.
- Return type:
double
- set_manual_mode(
- self: omni.kit.loop.bindings._loop.RunLoopRunner,
- enabled: bool = True,
- name: str = '',
Enables or disables manual stepping mode for the run loop.
- Parameters:
enabled (
bool) – Set to true to enable manual mode, false to disable.name (
str) – The name of the run loop. If name is an empty string, all active run loops are set.
- set_manual_step_size(
- self: omni.kit.loop.bindings._loop.RunLoopRunner,
- dt: float = 0.01667,
- name: str = '',
Sets the time step size (dt) for manual stepping mode.
- Parameters:
dt (
double) – The time step size in seconds.name (
str) – The name of the run loop. If name is an empty string, all active run loops are set.
- acquire_loop_interface(
- plugin_name: str = None,
- library_path: str = None,
Settings#
Other Settings#
The extension changes some settings of the application or other extensions, which are listed in the table below.
Application/extension setting |
Description |
Value |
|---|---|---|
|
Do not sync threads to the present thread. |
|
|
Set to true to enable rate limiting for the main run loop. |
|
|
Rate-limit frequency in Hz for the main run loop. |
|
|
Set to true to use a busy loop for the main run loop. |
|
|
Set to true to enable rate limiting for the present run loop. |
|
|
Rate-limit frequency in Hz for the present run loop. |
|
|
Set to true to use a busy loop for the present run loop. |
|
|
Set to true to enable rate limiting for the rendering run loop. |
|
|
Rate-limit frequency in Hz for the rendering run loop. |
|
|
Set to true to use a busy loop for the rendering run loop. |
|