> This page is for version Release 3.0 (default).
> For other versions, use one of these documentation indexes:
> - Release 3.0 (default): https://docs.nvidia.com/isaaclab/3.0/llms.txt
> - Release 2.3: https://docs.nvidia.com/isaaclab/2.3/llms.txt
> - Release 2.2: https://docs.nvidia.com/isaaclab/2.2/llms.txt
> - Release 2.1: https://docs.nvidia.com/isaaclab/2.1/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/isaaclab/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/isaaclab/_mcp/server.

# Setting up Haply Teleoperation

The Haply Inverse3 and VerseGrip let you command an end-effector pose and feel
contact forces from the simulation. This guide connects [Haply Devices](https://haply.co/) to Isaac
Lab for haptic teleoperation.

## Overview

Using Haply with Isaac Lab involves the following components:

* **Isaac Lab** simulates the robot environment and streams contact forces back to the operator

* **Haply Inverse3** provides 3-DOF position tracking and force feedback in the operator's workspace

* **Haply VerseGrip** adds orientation sensing and button inputs for gripper control

* **Haply SDK** manages WebSocket communication between Isaac Lab and the Haply hardware

This guide will walk you through:

* [System Requirements](/isaaclab/3.0/isaac-lab/setting-up-haply-teleoperation#system-requirements)
* [Installation](/isaaclab/3.0/isaac-lab/setting-up-haply-teleoperation#installation)
* [Device Setup](/isaaclab/3.0/isaac-lab/setting-up-haply-teleoperation#device-setup)
* [Running the Example](/isaaclab/3.0/isaac-lab/setting-up-haply-teleoperation#running-the-example)
* [Troubleshooting](/isaaclab/3.0/isaac-lab/setting-up-haply-teleoperation#troubleshooting)

## System Requirements

### Hardware Requirements

* **Isaac Lab Workstation**

  * Ubuntu 22.04 or Ubuntu 24.04

  * Hardware requirements for 200Hz physics simulation:

    * CPU: 8-Core Intel Core i7 or AMD Ryzen 7 (or higher)
    * Memory: 32GB RAM (64GB recommended)
    * GPU: RTX 3090 or higher

  * Network: Same local network as Haply devices for WebSocket communication

* **Haply Devices**

  * Haply Inverse3 - Haptic device for position tracking and force feedback
  * Haply VerseGrip - Wireless controller for orientation and button inputs
  * Both devices must be powered on and connected to the Haply SDK

### Software Requirements

* Isaac Lab (follow the [installation guide](/isaaclab/3.0/isaac-lab/installation))
* Haply SDK (provided by Haply Robotics)
* Python 3.12+
* `websockets` Python package (automatically installed with Isaac Lab)

## Installation

### 1. Install Isaac Lab

Follow the Isaac Lab [installation guide](/isaaclab/3.0/isaac-lab/installation) to set up your environment.

The `websockets` dependency is automatically included in Isaac Lab's requirements.

### 2. Install Haply SDK

Download the Haply SDK from the [Haply Devices](https://haply.co/) website.
Install the SDK software and configure the devices.

### 3. Verify Installation

Test that your Haply devices are detected by the Haply Device Manager.
You should see both Inverse3 and VerseGrip as connected.

## Device Setup

### 1. Physical Setup

* Place the Haply Inverse3 on a stable surface
* Ensure the VerseGrip is charged and paired
* Position yourself comfortably to reach the Inverse3 workspace
* Keep the workspace clear of obstacles

### 2. Start Haply SDK

Launch the Haply SDK according to Haply's documentation. The SDK typically:

* Runs a WebSocket server on `localhost:10001`
* Streams device data at 200Hz
* Displays connection status for both devices

### 3. Test Communication

You can test the WebSocket connection using the following Python script:

```python
import asyncio
import websockets
import json

async def test_haply():
    uri = "ws://localhost:10001"
    async with websockets.connect(uri) as ws:
        response = await ws.recv()
        data = json.loads(response)
        print("Inverse3:", data.get("inverse3", []))
        print("VerseGrip:", data.get("wireless_verse_grip", []))

asyncio.run(test_haply())
```

You should see device data streaming from both Inverse3 and VerseGrip.

## Running the Example

The Haply teleoperation example showcases robot manipulation with force feedback using
a Franka Panda arm.

### Basic Usage

```bash
# Ensure Haply SDK is running
isaaclab example haply-teleoperation --websocket_uri ws://localhost:10001 --pos_sensitivity 1.65
```

The example will:

1. Connect to the Haply devices via WebSocket
2. Spawn a Franka Panda robot and a cube in simulation
3. Map Haply position to robot end-effector position
4. Stream contact forces back to the Inverse3 for haptic feedback

### Controls

* **Move Inverse3**: Controls the robot end-effector position
* **VerseGrip Button A**: Open gripper
* **VerseGrip Button B**: Close gripper
* **VerseGrip Button C**: Rotate end-effector by 60°

### Advanced Options

Customize the example with command-line arguments:

```bash
# Use custom WebSocket URI
isaaclab example haply-teleoperation --websocket_uri ws://192.168.1.100:10001

# Adjust position sensitivity (default: 1.0)
isaaclab example haply-teleoperation --websocket_uri ws://localhost:10001 --pos_sensitivity 2.0
```

### Example Features

* **Workspace Mapping**: Haply workspace is mapped to robot reachable space with safety limits
* **Inverse Kinematics**: Inverse Kinematics (IK) computes joint positions for desired end-effector pose
* **Force Feedback**: Contact forces from end-effector sensors are sent to Inverse3 for haptic feedback

## Troubleshooting

### No Haptic Feedback

**Problem**: No haptic feedback felt on Inverse3

Solutions:

* Verify Inverse3 is the active device in Haply SDK
* Check contact forces are non-zero in simulation (try grasping the cube)
* Ensure `limit_force` is not set too low (default: 2.0N)

## Next Steps

* **Customize the example**: Modify the workspace mapping or add custom button behaviors
* **Implement your own controller**: Use [HaplyDevice](https://isaac-sim.github.io/IsaacLab/release/3.0.0/source/api/lab/isaaclab.devices.html#isaaclab.devices.HaplyDevice) in your own scripts

For more information on device APIs, see [HaplyDevice](https://isaac-sim.github.io/IsaacLab/release/3.0.0/source/api/lab/isaaclab.devices.html#isaaclab.devices.HaplyDevice) in the API documentation.