跳至主要内容
版本:3.5.x

教程

每个教程都是一个独立的程序,用于演示 Inverse Service 的某项功能。我们同时提供了三种语言版本,以便您比较不同的编程风格,并选择最适合您项目的技术栈:

  • Python — 最短、最简单的切入点(websockets + json)
  • C++ (nlohmann/json)— 可移植的 C++11,运行时解析的 JSON
  • C++ (Glaze)— 支持编译时反射和零分配解析的现代 C++20,推荐用于实时触觉反馈循环

源代码发布在两个公开的示例仓库中:

  • haply — 每个教程对应一个目录,其中包含 nlohmann/json(C++11)和 Glaze(C++20)两种实现。构建目标具有一个 -glz Glaze 变体的后缀。
  • haply— 每个教程一个目录。

Inverse Service 的每次发布都会在两个仓库上都添加一个对应的标签:请按照 release/<version> 请将分支保持在与本文档对应的版本上。

先决条件

  • "(《世界人权宣言》) 逆向服务 正在运行(无论是通过 Haply Hub独立安装程序) 在端口 10001.
  • 已检测到至少一台Haply 。每个教程针对特定的设备系列——请参见下表。
  • Python 教程: pip install websockets (教程 04、05、06、07 还需 keyboard(这在 Linux 系统上需要提升权限)。
  • C++ 教程: nlohmann 变体需要 CMake 3.15 及以上版本和 C++11 编译器,Glaze 变体则需要 C++20 编译器(-glz) 变体。示例仓库的顶级目录 CMakeLists.txt 取回 libhv, nlohmann/jsonglaze 通过 FetchContent 实现——无需手动配置依赖项。

教程列表

#名称设备变体您将学到什么
00设备列表任何Py · C++ · C++ GlazeHTTP 设备发现、会话范围查询
01打印Inverse3Inverse3Py · C++ · C++ GlazeWebSocket 状态流、零强制保持活动、首条消息握手
02打印 VerseGrip《连线》游戏版Py · C++ · C++ Glaze迎新直播, probe_orientation keepalive, 四元数 → 欧拉角
03打印 无线 VGWVGPy · C++ · C++ Glaze按钮、电池、霍尔传感器
04你好,FloorInverse3Py · C++ · C++ Glaze第一种触觉效果 — set_cursor_force 罚球弹簧
05位置控制Inverse3Py · C++ · C++ Glazeset_cursor_position 控制方式:随机目标(C++)或按住WASD键移动(Python)
06合计Inverse3 WVGPy · C++ · C++ Glaze多设备循环,四元数到方向的光标驱动
07底座与支架Inverse3Py · C++ · C++ Glazeconfigure.basis, configure.preset,以及运行时 configure.mount 覆盖;预设与挂载之间的互斥
08远程配置(即将推出)任何Py通过 HTTP 进行远程设备配置;基于配置文件的会话发现
10活动Py · C++ · C++ Glaze端口 10020 上的事件流监听器,支持级别/名称过滤

提示 — 对触觉反馈循环进行基准测试

教程 10(事件)的设计初衷是与其他任何教程配合使用。通过 --no-hide-rate 启用后,它会打印该服务的 system-rate-report 该事件包含设备的实际时钟频率。请比较同一教程中 Python、C++(nlohmann)和 C++(Glaze)版本的时钟频率,以观察序列化开销对约 4 kHz 控制环路的影响。

# Terminal 1 — pick a tutorial variant
./04-haply-inverse-hello-floor # C++ nlohmann
./04-haply-inverse-hello-floor-glz # C++ Glaze
python 04-haply-inverse-hello-floor.py # Python

# Terminal 2 — watch the rate
./10-haply-inverse-events --no-hide-rate