# Connect IO signals with OmniGraph nodes

> Use OmniGraph Nodes in NVIDIA Isaac Sim with Wandelbots NOVA to simulate and connect IO signals. Add logic to your scenes using Action Graph for dynamic event-based control.

Video: [/video/omniservice/ogn/ogn\_io\_demo\_scene.webm](/video/omniservice/ogn/ogn_io_demo_scene.webm)

The Wandelbots NOVA extension supports Action Graph, a visual scripting tool that adds logic to your NVIDIA Isaac Sim scenes.
Action Graph uses [OmniGraph nodes](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph.html) to enrich scenes with actions and
reactions triggered by events.

With Action Graph, you can manipulate prim attributes to

- Toggle a conveyor belt,
- Change the emission of a texture (e.g., simulating a traffic light),
- Use trigger volumes to write the state of an IO on collision shape contact and many more.

## Quickstart

### Step 1: Learn NVIDIA Isaac Sim Action Graph basics

Before using Wandelbots NOVA nodes, make sure you're familiar with the Action Graph [fundamentals](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph.html).

### Step 2: Prepare simulation environment

To use one of the provided nodes, add a robot from the asset pack available in the NOVA Cloud [downloads](/nova-cloud/downloads)
or from Wandelbots' GitHub.
This robot serves as the configuration source for all data provided by the node.

Video: [/video/omniservice/ogn/ogn\_set\_robot.webm](/video/omniservice/ogn/ogn_set_robot.webm)

### Step 3: Connect robot controller with NVIDIA Isaac Sim

Our OmniGraph Nodes require a established connection between Wandelbots NOVA and NVIDIA Isaac Sim.
Therefore please [connect your NVIDIA Isaac Sim instance with Wandelbots NOVA](/simulation/introduction) with the Connected Instances feature.

**Tab 1**

### Step 4: Use Robot Controller IOs

> **Virtual IOs:** Please note that only virtual input signals can be manipulated in the simulation. Physical input signals are read-only.

You can interact with robot controller IOs in your simulation using e.g. the Python SDK.

Alternatively you can also download the Signals App from the Store and set up IO signals via the Setup app. This allows you to trigger IOs without coding.

![Setup signals in Wandelbots NOVA.](/assets/nova/omniservice/ogn/ogn_setup_signals.webp)

Setup signals in Wandelbots NOVA.

![Manage signals within the Setup App in Wandelbots NOVA.](/assets/nova/omniservice/ogn/ogn_setup_signals_app.webp)

Manage signals within the Setup App in Wandelbots NOVA.

**Tab 2**

### Step 5: Use Bus IOs

> **Bus IOs configuration:** To use Bus IOs in your simulation, make sure to [add a Bus IO device and configure the respective Bus IOs in the Setup app beforehand.](/nova/latest/communication-protocols/profinet)

After setting up everything correctly, you can then use e.g. the Python SDK or within the Setup app to trigger Bus IOs in your simulation. The simulation then will react based on your set up action graph similar to robot controller IOs.

![Setup ProfiNET device in Wandelbots NOVA](/assets/nova/omniservice/ogn/ogn_setup_profinet.webp)

Setup ProfiNET device in Wandelbots NOVA

### Step 6: Dive deeper into OmniGraph Nodes

Read through the sections below to get started with OmniGraph nodes (OGN). For additional resources, see [further reads](#further-reads).

## Robot controller IOs

Wandelbots NOVA provides a set of OmniGraph nodes to interact with robot controller signals in NVIDIA Isaac Sim.

Interact with the IOs of the robot controller used in your simulation.
The Wandelbots NOVA extension provides three nodes to interact with robot controller IOs in Action Graph:

**Tab 1**

### On IO Change Node

`On IO Change` provides an interface to trigger graph actions if the selected IO value changes.

![OGN On IO Change Isaac Sim node](/assets/nova/omniservice/ogn/ogn_on_io_change_example.webp)

This examples shows how an IO change triggers a `write` to a shared `enable_conveyor` variable and the change of a prim attribute
based on truthfulness.

#### Inputs

The node needs a running timeline to serve the requested IO data as well as a controller which is fetched from the robot controller
root from the scene graph. The IO describes the IO which will be watched.

![OGN node input](/assets/nova/omniservice/ogn/ogn_input.webp)

#### Outputs

The outputs are limited by the provided IO type.
Make sure to connect the right output value type as this is the only one which gets updated.

![OGN On IO Change Isaac Sim node](/assets/nova/omniservice/ogn/ogn_on_io_change.webp)

**Tab 2**

### Read IO Node

`Read IO` provides access to the current state of the selected IO.

![OGN On IO Change Isaac Sim node](/assets/nova/omniservice/ogn/ogn_read_io_example.webp)

This example shows how the IO value can be read every tick.
The value then can be stored for later usage or to manipulate prims from the scene graph.

#### Inputs

The node needs a running timeline to serve the requested IO data as well as a controller which is fetched from the robot controller
root from the scene graph. The IO describes the IO which will be watched.

![OGN node input](/assets/nova/omniservice/ogn/ogn_input.webp)

#### Outputs

The outputs are limited by the provided IO type.
Make sure to connect the right output value type as this is the only one which gets updated.

![OGN On IO Change Isaac Sim node](/assets/nova/omniservice/ogn/ogn_read_io.webp)

**Tab 3**

### Write IO Node

`Write IO` allows the graph to manipulate the value of the selected **virtual** IO.

![OGN On IO Change Isaac Sim node](/assets/nova/omniservice/ogn/ogn_write_io_example.webp)

This example shows a trigger event which is attached to a physics trigger volume, like a light barrier.
`Enter` or `Leave` triggers the gate variable to be set which then changes the IO configured in `Write IO`.

#### Inputs

The node needs a running timeline to write an IO state as well as a controller which is fetched from the robot controller root
from the scene graph. The IO describes the IO which will be written to.

![OGN node input](/assets/nova/omniservice/ogn/ogn_input.webp)

#### Outputs

The inputs/outputs are limited by the provided IO type.
Make sure to connect the right value type as this is the only one which gets read or updated.

![OGN On IO Change Isaac Sim node](/assets/nova/omniservice/ogn/ogn_write_io.webp)

## Bus IOs

Wandelbots NOVA provides a set of OmniGraph nodes to interact with Bus signals, e.g., Profinet, in NVIDIA Isaac Sim.

Bus IOs are used to communicate with external devices via fieldbus protocols like Profinet.
The Wandelbots NOVA extension provides three nodes to interact with Bus IOs in Action Graph:

**Tab 1**

### On Bus IO Change Node

The `On Bus IO Change` node provides an interface to trigger graph actions if the selected IO value changes.

#### Inputs

The node needs a running timeline to serve the requested Bus IO data as well as a controller which is fetched from the robot controller root
from the scene graph. The IO describes the IO which will be watched.

![OGN node input](/assets/nova/omniservice/ogn/ogn_write_bus_io_inputs.webp)

#### Outputs

The outputs are limited by the provided IO type.
Make sure to connect the right output value type as this is the only one which gets updated.

![OGN On Bus IO Change Isaac Sim node](/assets/nova/omniservice/ogn/ogn_on_bus_io_change.webp)

**Tab 2**

### Read Bus IO Node

`Read Bus IO` provides access to the current state of the selected Bus IO.

#### Inputs

The node needs a running timeline to serve the requested Bus IO data as well as a controller which is fetched from the robot controller root
from the scene graph. The IO describes the IO which will be watched.

![OGN node input](/assets/nova/omniservice/ogn/ogn_read_bus_io_inputs.webp)

#### Outputs

The outputs are limited by the provided Bus IO type. Make sure to connect the right output value type as this is the only one which gets updated.

![OGN On Bus IO Change Isaac Sim node](/assets/nova/omniservice/ogn/ogn_read_bus_io.webp)

**Tab 3**

### Write Bus IO Node

`Write Bus IO` allows the graph to manipulate the value of the selected **virtual** IO.

#### Inputs

The node needs a running timeline to write an IO state.
It requires the information about the service which is fetched from the robot controller root from the scene graph.
The Bus IO describes the Bus IO which will be written to.

![OGN node input](/assets/nova/omniservice/ogn/ogn_write_bus_io_inputs.webp)

#### Outputs

The inputs/outputs are limited by the provided Bus IO type.
Make sure to connect the right value type as this is the only one which gets read or updated.

![OGN Write Bus IO outputs](/assets/nova/omniservice/ogn/ogn_write_bus_io.webp)

## Further reads

- [omni.graph.action\_nodes](https://docs.omniverse.nvidia.com/kit/docs/omni.graph.action_nodes/latest/Overview.html)
- [OGN reference](https://docs.omniverse.nvidia.com/kit/docs/omni.graph.docs/latest/dev/ogn/ogn_reference_guide.html)
- [Omnigraph Extension](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph.html)

Learn more on [data exchange with NOVA](/simulation/data-exchange).

Some of your questions have been left unanswered? Try out the search function or [visit the FAQ page](/simulation/faq).
