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.
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:
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:
However, force feedback messages appear to be ignored silently.
Example tested:
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.