概况
每个教程都是一个独立的程序,用于演示 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、08、09 还需 keyboard,这在 Linux 系统上需要提升权限;教程 08 和 09 同样需要 requests).
- C++ 教程: nlohmann 变体需要 CMake 3.15 及以上版本和 C++11 编译器,Glaze 变体则需要 C++20 编译器(-glz) 变体。示例仓库的顶级目录 CMakeLists.txt 取回 libhv, nlohmann/json和 glaze 通过 FetchContent 实现——无需手动配置依赖项。
教程列表
| # | 名称 | 设备 | 变体 | 您将学到的内容 |
|---|---|---|---|---|
| 00 | 设备列表 | 任意 | Py·C++·C++ Glaze | 通过HTTP检测外设,请求仅限于会话 |
| 01 | 打印 Inverse3 | Inverse3 | Py·C++·C++ Glaze | WebSocket状态持续推送,无需手动保持连接,首次消息即建立连接 |
| 02 | 打印VerseGrip | 有线VG | Py·C++·C++ Glaze | 按层级分布, probe_orientation keepalive,quaternion Euler |
| 03 | 无线打印VG | WVG | Py·C++·C++ Glaze | 按钮、电池、霍尔效应传感器 |
| 04 | Bonjour Floor | Inverse3 | Py·C++·C++ Glaze | 首次触觉效果-set_cursor_force处罚弹簧 |
| 05 | 位置控制 | Inverse3 | Py·C++·C++ Glaze | set_cursor_position命令,随机目标(C++)或通过按住WASD键移动(Python) |
| 06 | 组合 | Inverse3 WVG | Py·C++·C++ Glaze | 多设备循环,通过四元数转换控制光标方向 |
| 07 | 基础和支撑 | Inverse3 | Py·C++·C++ Glaze | configure.basis、 configure.preset 和执行时间configure.mountRemplacements;预配置和安装之间的互斥排除 |
| 08 | 通过HTTP进行远程配置 | Inverse3 | Py·C++·C++ Glaze | 仅HTTP会话配置器:通过配置文件检测会话,通过POST/预设/REST进行交互 |
| 09 | WS遥控器 | Inverse3 | Py·C++·C++ Glaze | 实时工作区浏览器:检测HTTP会话和设备,然后通过WebSocket每tick连续发布set_transform |
| 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
