跳过至主要内容

教程

每个教程都是一个独立的程序,用于演示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 但是,通过 FetchContent libhv、nlohmann/json、glaze 因此,无需手动配置依赖关系。

教程列表​

#姓名设备变体可学习的内容
00设备列表任意Py · C++ · C++ Glaze通过HTTP进行设备检测、会话范围查询
01Inverse3 输出Inverse3Py · C++ · C++ GlazeWebSocket 的状态流式传输、零开销的保持活动机制、基于首条消息的握手
02VerseGrip 输出有线 VGPy · C++ · C++ Glaze姿势流媒体,probe_orientation 基于“Keep Alive”的四元数到欧拉角的转换
03无线 VG 输出WVGPy · 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多设备循环、基于四元数的 cursor 方向控制
07基准与安装座Inverse3Py · C++ · C++ Glazeconfigure.basis、configure.preset、运行时的 configure.mount 通过……进行覆盖。预设与挂载互斥
08HTTP 远程配置Inverse3Py · C++ · C++ Glaze专用于 HTTP 的跨会话配置器。通过配置文件检测会话,并可通过 REST 交互式地向 basis / preset / mount 发送 POST 请求
09WS 远程控制Inverse3Py · 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