跳过至主要内容

Haply Inverse SDK

Haply Inverse SDK 是Haply的触觉设备(Inverse3、Inverse3x、Minverse、VerseGrip以及Wireless VerseGrip)提供的一种语言无关的 WebSocket + HTTP 接口。它作为本地服务运行,负责处理设备检测、串行通信、安全性监控和状态流传输,因此应用程序只需通过套接字使用 JSON 进行通信即可。

主要功能如下:

  • 设备检测与管理— 通过 HTTP REST API,自动列出并配置已连接的 Haply 设备。
  • 实时状态流— 通过 WebSocket 以触觉控制速率(数 kHz)传输设备状态。
  • 命令处理— 为了实现精确的触觉反馈,以高保真度执行力和位置命令。
  • 后台运行— 作为本地服务运行,无需用户操作即可保持设备处于就绪状态。

Haply 在 Hub 上的安装​

最简单的入门方法是,Haply 使用 Hub 。这是一款用于安装、运行、配置、测试和监控 Haply 设备的桌面应用程序。它能帮助您保持固件处于最新状态,内置 Inverse Service,并提供演示程序,让您在编写任何代码之前就能验证硬件。

Haply Hub

Haply Hub

Haply 下载 Hub 的最新版本

请下载并安装 Hub,然后连接设备。Hub 将引导您进行固件更新。安装完成后,当 Hub 处于打开状态时,Inverse Service会自动在后台运行。

您希望进行独立安装吗?

您也可以不使用 Hub,直接将 Inverse Service 的特定版本安装为系统服务(Windows)或守护进程(Linux/macOS)。有关安装程序的链接和操作步骤,请参阅“运行服务”。

快速示例​

连接到服务,读取第一个 Inverse3 的光标位置,并发送一个强度为零的保持活动信号,以确保服务继续流式传输状态帧:

import asyncio, json, websockets

async def main():
# Connect to the Haply Inverse service WebSocket
async with websockets.connect("ws://localhost:10001") as ws:
# Read the first state frame to discover the device id
first_state = json.loads(await ws.recv())
device_id = first_state["inverse3"][0]["device_id"]

# Build a zero-force keepalive command targeting that device
keepalive = {"inverse3": [{
"device_id": device_id,
"commands": {"set_cursor_force": {"vector": {"x": 0, "y": 0, "z": 0}}}
}]}

# Realtime loop: one send per tick, then read the resulting state
while True:
await ws.send(json.dumps(keepalive))
state = json.loads(await ws.recv())
pos = state["inverse3"][0]["state"]["cursor_position"]
print(f"pos: {pos}")

asyncio.run(main())
警告

更改力值时,请务必小心。如果突然设置过大的力值,可能会导致设备损坏或引发意外操作。

备注

有关消息的信封、端口和内容类型的规则,请参阅JSON 规范页面。

其他示例​

有关使用 Python、C++(nlohmann)和 C++(Glaze)编写、涵盖力反馈、位置控制、多设备配置、mount/basis 设置以及事件流处理的高功能教程,请参阅教程页面。