教程
每个教程都是一个独立的程序,用于演示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> 请跟踪该分支。
先决条件
- 逆向服务但端口
10001正在执行的操作(Haply Hub或者独立安装程序(从其中之一启动)。 - 请确保已检测到至少一台设备。每个教程针对特定的设备系列。请参阅下表。
- Python 教程:
pip install websockets(在教程04、05、06、07、08、09中,还将keyboard是必需的。这在Linux中需要管理员权限。在教程08和09中,requests(也需要)。 - C++教程:nlohmann 版本需要 CMake 3.15 及以上版本以及支持 C++11 的编译器,而 Glaze(
-glz)版本需要支持 C++20 的编译器。示例代码库的顶级目录中的CMakeLists.txt但是,通过 FetchContentlibhv、nlohmann/json、glaze因此,无需手动配置依赖关系。
教程列表
| # | 姓名 | 设备 | 变体 | 可学习的内容 |
|---|---|---|---|---|
| 00 | 设备列表 | 任意 | Py · C++ · C++ Glaze | 通过HTTP进行设备检测、会话范围查询 |
| 01 | Inverse3 输出 | Inverse3 | Py · C++ · C++ Glaze | WebSocket 的状态流式传输、零开销的保持活动机制、基于首条消息的握手 |
| 02 | VerseGrip 输出 | 有线 VG | Py · C++ · C++ Glaze | 姿势流媒体,probe_orientation 基于“Keep Alive”的四元数到欧拉角的转换 |
| 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 | 复合 | Inverse3 WVG | Py · C++ · C++ Glaze | 多设备循环、基于四元数的 cursor 方向控制 |
| 07 | 基准与安装座 | Inverse3 | Py · C++ · C++ Glaze | configure.basis、configure.preset、运行时的 configure.mount 通过……进行覆盖。预设与挂载互斥 |
| 08 | HTTP 远程配置 | Inverse3 | Py · C++ · C++ Glaze | 专用于 HTTP 的跨会话配置器。通过配置文件检测会话,并可通过 REST 交互式地向 basis / preset / mount 发送 POST 请求 |
| 09 | WS 远程控制 | Inverse3 | Py · C++ · C++ Glaze | 实时工作区导航器:通过 HTTP 检测到会话和设备后,每帧通过 WebSocket 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