# Install Wandelbots NOVA extension

> Learn how to install the Wandelbots NOVA extension (Omniservice) for NVIDIA Isaac Sim. Follow step-by-step instructions to set up your simulation environment with Wandelbots NOVA.

### Step 1: Ensure your system meets the system requirements

To work with NVIDIA Isaac Sim your system has to fulfill the following requirements:

| Item | Ideal | Minimum |
| - | - | - |
| Operating System | Windows 10/11, Ubuntu 20.04/22.04 | Windows 10/11, Ubuntu 20.04/22.04 |
| CPU | Intel Core i9, X-series or higher or AMD Ryzen 9, Threadripper or higher | Intel Core i7 (7th Generation), AMD Ryzen 5 |
| Cores | 16 | 4 |
| RAM | 64GB\* | 32GB\* |
| Storage | 1 TB NVMe SSD | 50GB SSD |
| GPU | RTX A6000 | GeForce RTX 3070 |
| VRAM | 48GB\* | 8GB |

Original source: [NVIDIA Isaac Sim documentation](https://docs.isaacsim.omniverse.nvidia.com/latest/installation/requirements.html)

### Step 2: Install NVIDIA Isaac Sim

Refer to the compatibility table in the [Wandelbots NOVA compatibility guide](/nova/latest/compatibility) to
check which version of NVIDIA Isaac Sim is supported by the latest Wandelbots NOVA.

Install the supported NVIDIA Isaac Sim version following its [original installation guide](https://docs.isaacsim.omniverse.nvidia.com/6.0.0/installation/index.html).

### Step 3: Install extensions

Refer to the compatibility table in the [Wandelbots NOVA compatibility guide](/nova/latest/compatibility) to
check which version of the Wandelbots NOVA extension is supported by the latest Wandelbots NOVA.

> **Info:** Installing the USD Schema extensions first is required to install the Wandelbots NOVA extension.

**Extension manager**

1. Within NVIDIA Isaac Sim, open the extension manager via `Window` → `Extensions`.
2. Locate `Wandelbots USD` and install the current version of the OpenUSD Schema extension. Activate it before proceeding to avoid trust issues.
3. Locate `Wandelbots NOVA` and install the current version of the NOVA extension.
4. If required, restart NVIDIA Isaac Sim so that all required dependencies are installed.

![NVIDIA Isaac Sim extension manager with Wandelbots NOVA extension](/assets/nova/omniservice/installation/isaac-sim-extension-manager.webp)

**Offline from GitHub Releases**

Use this path when the system has no internet access.

1. Download the source code archive (zip or tar.gz) from the respective GitHub Releases page:
   - Wandelbots [USD Schema extension GitHub releases](https://github.com/wandelbotsgmbh/wandelbots-openusd-schema-extension/releases)
   - Wandelbots [NOVA extension GitHub releases](https://github.com/wandelbotsgmbh/wandelbots-isaacsim-extension/releases)

2. Extract the archive and select the package matching your Isaac Sim version and operating system.

   | Isaac Sim | USD Schema package | NOVA extension package |
   | - | - | - |
   | Isaac Sim 5.0, 5.1 (Kit SDK 107.3, Python 3.11) | `107.3/exts/wandelbots.usd` | `packages/{your-os}_x86_64/cp311/exts/wandelbots.omni` |
   | Isaac Sim 6.0 (Kit SDK 110.0, Python 3.12) | `110.0/exts/wandelbots.usd` | `packages/{your-os}_x86_64/cp312/exts/wandelbots.omni` |

3. Open the extension manager in NVIDIA Isaac Sim via `Window` → `Extensions`.

4. Click the burger menu icon to open the extension search paths settings.

5. Add the path to the extracted `wandelbots.usd` folder as a new search path. Enable the extension and restart Isaac Sim if prompted.

6. Add the path to the extracted `wandelbots.omni` folder as a new search path. Enable the extension.

7. Restart NVIDIA Isaac Sim so that all required dependencies are loaded.

## Expose Isaac Sim remotely

If NVIDIA Isaac Sim is running on a remote machine, the extension API must be exposed via a publicly accessible address so that your Wandelbots NOVA instance can reach it.

Use [Microsoft DevTunnel](https://learn.microsoft.com/en-us/azure/developer/dev-tunnels/get-started?tabs=macos)
to create a secure tunnel:

> **Info:** The default port is 8011.

1. Install DevTunnel via winget package manager:
   ```bash
   winget install Microsoft.DevTunnel
   ```
2. Login with your Microsoft or GitHub account via the command line:
   ```bash
   devtunnel login
   ```
3. Start a tunnel exposing the Isaac Sim Extension API port:
   ```bash
   devtunnel host --allow-anonymous --port-numbers 8011
   ```
4. Access the API via the URL displayed in the terminal,
   e.g., `https://<tunnel-id>-8011.euw.devtunnels.ms/omniservice/api`.

## Connect Isaac Sim with Wandelbots NOVA

After successfully installing the Wandelbots NOVA extension, you can now connect and authenticate with Wandelbots NOVA from inside of NVIDIA Isaac Sim.

The connection process involves opening the Connected Instances window, signing in to your NOVA account,
adding your local Isaac Sim instance, and establishing the connection between your cloud instances and the simulation environment.

The following images show the complete step-by-step process for connecting to NOVA, from initial authentication through final
connection with your robots and articulations configured.

### Step 1: Authenticate

1. Go to the Wandelbots NOVA extension tab in Isaac Sim.
2. Use `Sign in` to authenticate with your Wandelbots NOVA account.

![Sign in to Wandelbots NOVA](/assets/nova/omniservice/installation/instances-sign-in.webp)

3. Complete the authentication in the browser.
   → The device confirmation dialogue is displayed.

![Authenticate with Wandelbots NOVA](/assets/nova/omniservice/installation/instances-authenticate.webp)

4. Confirm your device code.
   → After successful confirmation, the instances associated with your Wandelbots NOVA account will be listed in the extension.

![Connected Wandelbots NOVA instance](/assets/nova/omniservice/installation/instances-cloud-not-connected.webp)

### Step 2: Connect to cloud instance

After successful authentication, you can now connect to the robot articulation you want to work with on the cloud instances associated
with your account.

Each instance lists the available robot articulations in a dropdown.

1. Select the desired robot articulation from the dropdown.

![Select robot articulation](/assets/nova/omniservice/installation/instances-cloud-select-articulation.webp)

2. Click `Connect`.
   → After successful connection, the instance will display a green indicator and feature the selected articulation.

![Articulation selected and ready](/assets/nova/omniservice/installation/instances-cloud-selected-articulation.webp)

### Step 3: Add VM or bare-metal instance

You can also connect to a VM or bare-metal Wandelbots NOVA instance.

> **Info:** Note that while this section outlines how to connect a virtual machine, please contact Customer Success before attempting use of a VM to make sure it aligns with the needs of your project.

1. Use the `+` icon to display a field where you can enter the Wandelbots NOVA instance's host address.\
   Optionally, specify the port.

![Select robot articulation](/assets/nova/omniservice/installation/instances-add-custom-instance-filled.webp)

2. Click `Add`.
   → The NOVA instance will be displayed in the instance list under Custom Instances, featuring a green indicator that marks a successful connection.
3. Select the desired robot articulation from the dropdown.
4. Click `Connect`.
   → After successful connection, the instance will feature the selected articulation.

![Articulation selected and ready](/assets/nova/omniservice/installation/instances-cloud-and-custom.webp)

## Troubleshooting

### Step 1: Connection issues

If the NOVA instance displays a yellow or red indicator, or a notification, the NOVA instance is not reachable.
This can be due to an incorrect setup or outdated Wandelbots NOVA versions.

1. Open the Wandelbots NOVA instance and ensure that it is running and reachable.
2. Check that the firewall settings allow communication with the Wandelbots NOVA instance on the specified port.
3. Update the Wandelbots NOVA instance to the latest version.

![Old version notification](/assets/nova/omniservice/installation/instances-old-version.webp)

4. Create a cell on the Wandelbots NOVA instance in Setup.
5. Add a robot to the cell that the Isaac Sim extension can connect to.

![Custom instance without cell](/assets/nova/omniservice/installation/instances-custom-no-cell.webp)

6. Add a robot to the cell that the Isaac Sim extension can connect to.
7. Open Robot Pad once to initialize the robot connection on the Wandelbots NOVA instance.

![Custom instance without robot](/assets/nova/omniservice/installation/instances-custom-added-no-robot.webp)

### Step 2: Network issues

If connecting from a NOVA web app to the extension is not possible or the extension is unable to reach NOVA API endpoints,
ensure the network settings are configured the following way:

| Port | Protocol | Application | Description |
| - | - | - | - |
| 443 | TCP (HTTPS) | \*instance.wandelbots.io\* | General NOVA status requests |
| 443 | TCP (WSS) | \*instance.wandelbots.io\* | Motion group state streams |

To test the network configuration [this script](/scripts/test_nova_connection.py) can be executed on the NVIDIA Isaac Sim host.

Edit this part at the bottom of the script to match your instance setup:

```python
   main(
      host="abc.instance.wandelbots.io",
      access_token="123",
      secure=True,
      cell="cell",
      motion_group="0@ur10e",
   )
```

For execution you will need `requests` and `websockets`. If you are using the python version shipped with NVIDIA Isaac Sim all required packages should be present.

The following output is expected for a successful test:

```bash
$ isaac-sim-x.x/python.bat test_nova_connection.py
```

```
## Testing http connection to https://abc.instance.wandelbots.io/api/v2/cells/cell/motion-groups/0@ur10e/state
HTTP test succeeded
## Testing websocket connection to wss://abc.instance.wandelbots.io/api/v2/cells/cell/motion-groups/0@ur10e/state-stream?response_rate=32
Joint data: [0, -1.5709999799728394, -1.5709999799728394, -1.5709999799728394, 1.5709999799728394, -1.5709999799728394]
Joint data: [0, -1.5709999799728394, -1.5709999799728394, -1.5709999799728394, 1.5709999799728394, -1.5709999799728394]
Joint data: [0, -1.5709999799728394, -1.5709999799728394, -1.5709999799728394, 1.5709999799728394, -1.5709999799728394]
Joint data: [0, -1.5709999799728394, -1.5709999799728394, -1.5709999799728394, 1.5709999799728394, -1.5709999799728394]
Joint data: [0, -1.5709999799728394, -1.5709999799728394, -1.5709999799728394, 1.5709999799728394, -1.5709999799728394]
Websocket test succeeded
```
