튜토리얼
각 튜토리얼은 Inverse Service의 기능을 보여주는 독립적인 프로그램입니다. 세 가지 언어 버전이 나란히 제공되므로, 각 언어의 관용구를 비교하고 프로젝트에 적합한 스택을 선택할 수 있습니다:
- 파이썬 — 가장 짧고 쉬운 시작 방법 (
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 기기가 감지됩니다. 각 튜토리얼은 특정 기기 제품군을 대상으로 합니다. 아래 표를 참조하십시오.
- 파이썬 튜토리얼:
pip install websockets(튜토리얼 04, 05, 06, 07, 08 및 09를 진행하려면 추가로keyboard, 리눅스에서는 관리자 권한이 필요합니다. 또한 튜토리얼 08과 09에서는requests). - C++ 튜토리얼: nlohmann 변형의 경우 CMake 3.15 이상 및 C++11 컴파일러, Glaze 변형의 경우 C++20 컴파일러 (
-glz). DieCMakeLists.txt예제 저장소의 최상위 레벨에서 로드합니다libhv,nlohmann/json그리고glazeFetchContent에 관하여 — 종속성을 수동으로 설정할 필요가 없습니다.
튜토리얼 목록
| # | 이름 | 기기 | 변형 | 배울 내용 |
|---|---|---|---|---|
| 00 | 장비 목록 | 임의의 | 파이 · C++ · C++ 글레이즈 | HTTP 장치 식별, 세션 기반 쿼리 |
| 01 | 호 Inverse3 | Inverse3 | 파이 · C++ · C++ 글레이즈 | WebSocket 상태 스트리밍, 무부하 Keepalive, 첫 번째 메시지를 통한 핸드셰이크 |
| 02 | VerseGrip 호 | VG (유선) | 파이 · C++ · C++ 글레이즈 | 오리엔티에이션 스트리밍, Keepalive를 통한 probe_orientation, 쿼터니언 → 오일러 |
| 03 | Wireless VG 호 | WVG | 파이 · C++ · C++ 글레이즈 | 버튼, 배터리, 홀 센서 |
| 04 | 안녕하세요, 보덴 | Inverse3 | 파이 · C++ · C++ 글레이즈 | 첫 번째 촉각 효과 — 장력 스프링 위 set_cursor_force |
| 05 | 위치 제어 | Inverse3 | 파이 · C++ · C++ 글레이즈 | 제어 방식: set_cursor_position, 무작위 목표(C++) 또는 키를 누른 상태에서의 WASD 이동(Python) |
| 06 | 결합 | Inverse3 WVG | 파이 · C++ · C++ 글레이즈 | 다중 장치용 루프, 쿼터니언-방향 변환을 통한 커서 제어 |
| 07 | 베이스 및 마운트 | Inverse3 | 파이 · C++ · C++ 글레이즈 | configure.basis, configure.preset 그리고 다음을 통한 만기일 재설정 configure.mount; 프리셋과 마운트의 상호 배타성 |
| 08 | HTTP 원격 구성 | Inverse3 | 파이 · C++ · C++ 글레이즈 | HTTP 전용: 세션 간 구성 도구 — 프로필을 기반으로 세션을 찾고, REST(POST)를 통해 기본값/사전 설정/마운트를 대화형으로 설정 |
| 09 | WS 원격 제어 | Inverse3 | 파이 · C++ · C++ 글레이즈 | 실시간 워크스페이스 내비게이터: HTTP 세션 및 기기 감지 후 스트리밍 set_transform WebSocket을 통한 Takt |
| 10 | 이벤트 | — | 파이 · C++ · C++ 글레이즈 | 포트 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