跳转至主要内容

Haply Inverse SDK

该 Haply Inverse SDK 是一个基于WebSocket和HTTP的、面向Haply 触觉设备的跨语言接口——其中包括 Inverse3Inverse3x、 Minverse、VerseGrip和Wireless VerseGrip。该接口作为本地服务运行,负责设备识别、串行通信、安全监控和状态流传输——因此您的应用程序只需通过一个套接字使用 JSON 进行通信即可。

功能包括:

  • 设备识别与管理——列出已连接的Haply 设备,并通过HTTP-REST API自动对其进行配置。
  • 实时状态流——通过 WebSockets 以触觉控制所需的速率(多千赫兹量级)提供设备状态。
  • 指令处理——以高精度执行力和位置指令,以实现精准的力反馈。
  • 后台运行——作为本地服务运行,无需用户干预即可保持设备处于就绪状态。

使用Haply 集线器进行安装​

最简单的入门方式是 Haply Hub ——一款用于安装、运行、配置、测试和监控您的Haply 设备的桌面应用程序。该应用程序可将固件保持在最新状态,集成了Inverse Service,并包含演示程序,让您在编写任何代码之前就能对硬件进行测试。

Haply Hub

Haply Hub

下载最新版本的Haply Hub

下载并安装该集线器,连接您的设备,集线器将引导您完成任何固件更新。安装完成后,只要打开集线器,Inverse Service就会自动在后台运行。

您更倾向于自行安装吗?

您还可以将 Inverse Service 的特定版本(不包含 Hub)作为系统服务(Windows)或守护进程(Linux/macOS)进行安装。安装程序的链接和操作指南请参见“运行服务”部分。

简短示例​

连接到该服务,读取第一个Inverse3 的光标位置,并发送一个强度为零的Keepalive请求,以便该服务继续流式传输状态帧:

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)的完整教程——涵盖力反馈、位置控制、多设备设置、安装架/底座配置以及事件流——请参见“教程”页面。