Skip to content

Latency-Nodes is an Isaac Sim extension providing latency simulation nodes for OmniGraph, designed to model realistic communication delays in robotic simulations.

License

Notifications You must be signed in to change notification settings

worv-ai/LatencyNodes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LatencyNodes

GitHub release (latest SemVer) GitHub license GitHub stars

GitHub issues GitHub pull requests GitHub forks GitHub last commit

Python Isaac Sim OmniGraph Extension


An Isaac Sim extension providing latency simulation nodes for OmniGraph to model realistic communication delays in robotic simulations.

Preview

Preview

Users could reproduce the preview simulation using examples of the worvai.nodes.latency_nodes!

Welcome for diverse and refined examples contributing to the community!

Overview

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.

Latency Nodes Preview

Key Benefits

  • 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

Features

Core Latency System

  • 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 & Visual Sensor Support

  • 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

System Architecture

  • 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

Version

Isaac Sim Version Support Status Notes
4.2.0 Not Supported Older release, APIs incompatible
4.5.0 Supported Fully tested and verified
5.0.0 Planned Compatibility under development

Installation

Prerequisites

  • NVIDIA Isaac Sim 4.5.0+ (2025.02 or later)
  • Python 3.10+
  • OmniGraph support

Method 1: Extension Manager (Recommended)

  1. Open Isaac Sim
  2. Navigate to Window > Extensions
  3. Search for "LatencyNodes"
  4. Click "Install"

Method 2: Manual Installation

  1. Clone this repository:

    git clone https://github.com/worv-ai/LatencyNodes.git
  2. Copy the extension to your Isaac Sim extensions directory:

    cp -r exts/worvai.nodes.latency_nodes ~/path/to/isaac-sim/extsUser
  3. Enable the extension in Isaac Sim Extension Manager

Quick Start

Basic Setup

  1. Create a new scene in Isaac Sim
  2. Open Action Graph (Window > Visual Scripting > Action Graph)
  3. Add LatencyNodes:
    • Right-click in the graph
    • Navigate to Add Node > LatencyNodes
    • Select your desired node

Camera Latency Example

For camera latency simulation:

  1. Add a Camera Data Capture node to capture rendered data
  2. Connect a Normal Distribution Sampler for variable latency
  3. Use Latency Controller to apply delays to the image data
  4. Connect ROS1 Publish Rendered Image to publish delayed images

See the examples directory for complete working examples.

Available Nodes

Core Latency Nodes

  • 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 & Visual Sensor Nodes

  • 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.

Architecture

Abstract Base Class Design

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

Adding New Distributions

To add a new distribution sampler:

  1. Create a new class inheriting from BaseLatencySampler
  2. Implement the internal_state() method
  3. Implement the sample_distribution() method with your distribution logic
  4. 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

Contributing

We welcome contributions! Please see our contributing guidelines Contribution Guideline.

License

This project is licensed under the Apache-2.0 License - see the LICENSE file for details.

Changelog

See CHANGELOG.md for version history and updates.

Acknowledgements

We would like to express our gratitude to the following:

  • NVIDIA Corporation for Isaac Sim and the Omniverse 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+)

About

Latency-Nodes is an Isaac Sim extension providing latency simulation nodes for OmniGraph, designed to model realistic communication delays in robotic simulations.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages