Users could reproduce the preview simulation using examples of the worvai.nodes.latency_nodes
!
Welcome for diverse and refined examples contributing to the community!
The LatencyNodes extension provides a comprehensive set of OmniGraph nodes
for Isaac Sim that enable realistic latency simulation in robotic systems. These nodes allow developers to model communication delays, sensor latencies, camera data delays, and network-induced delays that are common in real-world robotic applications.
Users can apply latency to robotic systems using the provided nodes with Latency Controller
, various Latency Samplers
, and specialized Camera Nodes
for visual sensor simulation. The extension also supports easy customization by allowing users to add their own distribution samplers by inheriting from the base class.
- Simulate realistic communication latencies in robotic systems
- Model variable delays using statistical distributions
- Camera latency simulation with actual image data processing
- ROS integration for camera data publishing with latency
- Easy integration with existing Isaac Sim workflows
- Performance-optimized queue-based delay implementation
- ForEach loop integration for efficient batch processing
- Enhanced Latency Controller: Implements time-based delay queues with ForEach loop integration for efficient batch processing
- Multiple Distribution Samplers: Generate variable latencies using different statistical distributions:
- Normal Distribution Sampler: Gaussian distribution for typical scenarios
- GEV Distribution Sampler: Generalized Extreme Value for modeling extreme latency events
- Exponential Distribution Sampler: Exponential distribution for network-like delays
- Camera Data Capture: Captures actual rendered image data from render products
- ROS1 Camera Helper with Latency: Modified ROS1CameraHelper with built-in latency control
- ROS1 Publish Rendered Image: Publishes image data with applied latency to ROS topics
- Render Product Latency Controller: Specialized latency control for render products
- Multiple Data Types: Support for RGB, depth, and other sensor data types
- Extensible Architecture: Abstract base class (ABC) design for easy addition of new distributions
- Configurable Parameters: Adjustable delay times and distribution parameters
- Statistical Tracking: Built-in statistics (min, max, count, history) for all samplers
- Isaac Sim Integration: Native OmniGraph nodes for seamless workflow integration
- ROS Integration: Native support for ROS1 publishing with latency simulation
Isaac Sim Version | Support Status | Notes |
---|---|---|
4.2.0 | Older release, APIs incompatible | |
4.5.0 | Fully tested and verified | |
5.0.0 | Compatibility under development |
- NVIDIA Isaac Sim 4.5.0+ (2025.02 or later)
- Python 3.10+
- OmniGraph support
- Open Isaac Sim
- Navigate to
Window > Extensions
- Search for "LatencyNodes"
- Click "Install"
-
Clone this repository:
git clone https://github.com/worv-ai/LatencyNodes.git
-
Copy the extension to your Isaac Sim extensions directory:
cp -r exts/worvai.nodes.latency_nodes ~/path/to/isaac-sim/extsUser
-
Enable the extension in Isaac Sim Extension Manager
- Create a new scene in Isaac Sim
- Open Action Graph (
Window > Visual Scripting > Action Graph
) - Add LatencyNodes:
- Right-click in the graph
- Navigate to
Add Node > LatencyNodes
- Select your desired node
For camera latency simulation:
- Add a Camera Data Capture node to capture rendered data
- Connect a Normal Distribution Sampler for variable latency
- Use Latency Controller to apply delays to the image data
- Connect ROS1 Publish Rendered Image to publish delayed images
See the examples directory for complete working examples.
- Latency Controller: Enhanced time-based delay queue with ForEach integration
- Normal Distribution Sampler: Gaussian latency generation
- GEV Distribution Sampler: Extreme value latency modeling
- Exponential Distribution Sampler: Network-style delay simulation
- Camera Data Capture: Captures actual rendered image data
- ROS1 Camera Helper with Latency: ROS camera publishing with built-in latency
- ROS1 Publish Rendered Image: Image publishing with latency to ROS topics
- Render Product Latency Controller: Specialized render product latency control
For detailed node descriptions and usage examples, see Extension Documentation.
All distribution samplers inherit from BaseLatencySampler
, which provides:
- Common Interface: Standardized methods across all samplers
- Statistics Tracking: Built-in min/max/count/history tracking
- Error Handling: Robust error handling and validation
- Extensibility: Easy to add new distributions
To add a new distribution sampler:
- Create a new class inheriting from
BaseLatencySampler
- Implement the
internal_state()
method - Implement the
sample_distribution()
method with your distribution logic - Implement the
compute()
method to handle input/output specific to your distribution
Example:
class OgnMyDistSampler(BaseLatencySampler):
@staticmethod
def sample_distribution(**kwargs) -> float:
# Your distribution sampling logic here
return your_random_value
We welcome contributions! Please see our contributing guidelines Contribution Guideline.
This project is licensed under the Apache-2.0 License - see the LICENSE file for details.
See CHANGELOG.md for version history and updates.
We would like to express our gratitude to the following:
- NVIDIA Corporation for
Isaac Sim
and theOmniverse
platform that makes this extension possible - Pixar Animation Studios for the
Universal Scene Description (USD)
framework - OmniGraph for providing the visual scripting framework that enables our latency simulation nodes
Author: kickthemoon0817 (kickthemoon0817@gmail.com)
Version: 0.3.0
Isaac Sim Compatibility: 4.5.0 (2025.02+)