教程
每个教程都是一个独立的程序,用于演示 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-python-samples— 每个教程一个目录。
Inverse Service 的每个版本都会在两个代码库中打上相应的标签:请关注该分支 release/<version> 以确保始终使用与本文档对应的版本。
先决条件
- 逆向服务 正在运行(通过 Haply Hub ou via le简体中文(大陆) 独立安装程序) 在港口
10001. - 已检测到至少一台Haply 设备。每个教程针对特定的设备系列;请参见下表。
- Python 教程 :
pip install websockets(教程 04、05、06、07、08 和 09 还需keyboard,这在 Linux 上需要较高的权限;教程 08 和 09 同样需要requests). - C++ 教程 : CMake 3.15 及以上版本,以及适用于 nlohmann 变体的 C++11 编译器,适用于 Glaze 变体的 C++20 编译器(
-glz). LeCMakeLists.txt从示例存储库中检出第一级内容libhv,nlohmann/jsonetglaze通过 FetchContent:无需手动配置依赖项。
教程列表
| # | Nom | 设备 | 变体 | 您将学到什么 |
|---|---|---|---|---|
| 00 | 设备清单 | Tous | Py · C++ · C++ Glaze | HTTP 设备发现,请求仅限于当前会话 |
| 01 | 显示Inverse3 | Inverse3 | Py · C++ · C++ Glaze | WebSocket 状态传播、零开销连接维护、首次消息交换 |
| 02 | VerseGrip 展示 | 有线VG | Py · C++ · C++ Glaze | 方向的扩散,与……保持联系 probe_orientation, 四元数转欧拉角 |
| 03 | 无线VG显示屏 | WVG | Py · C++ · C++ Glaze | 按钮、电池、霍尔传感器 |
| 04 | 你好,Floor | Inverse3 | Py · C++ · C++ Glaze | 首要触觉效果:罚球弹簧 set_cursor_force |
| 05 | 位置控制 | Inverse3 | Py · C++ · C++ Glaze | 控制 set_cursor_position, 随机目标(C++)或长按WASD键移动(Python) |
| 06 | Combiné | Inverse3 WVG | Py · C++ · C++ Glaze | 多设备循环,基于四元数的向量方向控制光标 |
| 07 | 底座与安装 | Inverse3 | Py · C++ · C++ Glaze | 运行时替换 configure.basis, configure.preset et configure.mount ; 预设与编辑之间的相互排斥 |
| 08 | HTTP 远程配置 | Inverse3 | Py · C++ · C++ Glaze | 专用于 HTTP 的跨会话配置器:按配置文件发现会话,然后通过 REST 以 POST 方式交互式发送基础数据/预设/剪辑 |
| 09 | WS遥控器 | Inverse3 | Py · C++ · C++ Glaze | 实时工作区浏览器:发现 HTTP 会话和设备,然后分发 set_transform 每个周期通过 WebSocket |
| 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