Skip to content

Force Feedback on Haply Inverse3 from UR5e Wrist FT Sensor via WebSocket API #31

Description

@minku1219

Description

I am using a Haply Inverse3 + VerseGrip setup for teleoperation of a UR5e robot through ROS2 and a local Haply WebSocket bridge (ws://localhost:10001).

State streaming and teleoperation are working correctly:

I am now trying to enable haptic force feedback from the UR5e wrist force-torque sensor (/ur5e/force_torque_sensor_broadcaster/wrench) back to the Haply device.

Reference

I followed the Isaac Lab Haply teleoperation documentation and implementation:

Isaac Lab Docs:

https://isaac-sim.github.io/IsaacLab/main/source/how-to/haply_teleoperation.html

Isaac code uses:

haply_device.push_force(...)

which appears to work through the native SDK.

Current Issue

I cannot determine how to send force feedback through the WebSocket interface.

The following works correctly:

await ws.send(json.dumps({"type": "get_state"}))
response = await ws.recv()

However, force feedback messages appear to be ignored silently.

Example tested:

msg = {
    "type": "set_force",
    "forces": {
        "x": 0.0,
        "y": 0.0,
        "z": -1.0,
    }
}

await ws.send(json.dumps(msg))

Behavior:

No websocket error
No device-side error
No force feedback felt on Haply device

Additional Findings

The websocket bridge appears to support only a single realtime connection reliably.
Separate websocket connections for force feedback and state streaming cause instability and delayed controls.
Polling with:
{"type": "get_state"}

works correctly.

The websocket does not appear to auto-stream state unless explicitly requested.

Questions

Does the websocket bridge support force feedback at all?
If yes, what is the correct websocket message schema?
Is force feedback only available through the native Haply SDK (push_force)?
Is there any required mode/configuration to enable haptics on the device?
Is there an example available for bidirectional teleoperation with force feedback over websocket?
Environment
ROS2 Humble
UR5e
Haply Inverse3
VerseGrip
Python websocket client (websockets)
Isaac Lab reference implementation

Any guidance on the correct force feedback API/path would be greatly appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions