教程
每个教程都是一个独立的程序,用于演示 Inverse Service 的某项功能。我们提供了三种语言版本供您并排比较,以便您对比各种编程风格,并选择最适合您项目的技术栈:
- Python — 最简短、最简单的入门方式(
websockets+json) - C++ (nlohmann/json)— 兼容 C++11,JSON 在运行时进行解析
- C++ (Glaze)— 采用 C++20 的现代实现,支持编译时反射和无需内存分配的语法分析,推荐用于实时触觉反馈回路
源代码将发布在两个公开的示例代码库中:
- haply — 每个教程对应一个目录,其中包含 nlohmann/json(C++11)和 Glaze(C++20)的实现版本。Glaze 版本的构建目标后缀为
-glz. - haply-inverse-python-samples— 每个教程一个目录。
Inverse Service 的每个版本都会在两个代码库中设置一个相应的标签。请关注该分支 release/<version>,以便保持与本文档相匹配的版本。
先决条件
- Der 逆向服务 正在运行(通过 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). Die(简体中文(大陆))CMakeLists.txt在示例仓库的根目录下加载libhv,nlohmann/jsonundglaze关于 FetchContent — 无需手动配置依赖项。
教程列表
| # | 名称 | 设备 | 变体 | 您将学到什么 |
|---|---|---|---|---|
| 00 | 设备列表 | Beliebig | Py · C++ · C++ Glaze | HTTP 设备的识别、基于会话的查询 |
| 01 | 期号Inverse3 | Inverse3 | Py · C++ · C++ Glaze | WebSocket 状态流、无强制保持连接、通过首条消息进行握手 |
| 02 | VerseGrip 版本 | VG(有线) | Py · C++ · C++ Glaze | 寻址流,通过 Keepalive probe_orientation, 四元数 → 欧拉角 |
| 03 | 《Wireless VG》期刊 | WVG | Py · C++ · C++ Glaze | 按键、电池、霍尔传感器 |
| 04 | 你好,博登 | 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.mount; 预设和安装之间的互斥关系 |
| 08 | HTTP 远程配置 | Inverse3 | Py · C++ · C++ Glaze | 仅限 HTTP:跨会话配置器——根据配置文件查找会话,并通过 REST(POST)交互式设置基础设置/预设/挂载 |
| 09 | WS-遥控器 | Inverse3 | Py · C++ · C++ Glaze | 实时工作区导航器:识别 HTTP 会话和设备,随后流式传输 set_transform 通过 WebSocket 进行 pro Takt 操作 |
| 10 | 事件 | — | Py · C++ · C++ Glaze | 监听端口 10020 上的事件流,按级别/名称进行过滤 |
Tipp — 触觉循环的基准
教程 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