튜토리얼
각 튜토리얼은 Inverse Service의 기능 중 하나를 보여주는 독립적인 프로그램입니다. 3가지 언어 버전이 함께 제공되므로, 작성 방식을 비교하여 프로젝트에 적합한 스택을 선택할 수 있습니다:
- 파이썬 — 가장 짧고, 가장 간편하게 시작할 수 있는 진입점(
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또는독립형 설치 프로그램(다음 중 하나에서 실행). - 적어도 하나의 Haply 기기가 감지되어야 합니다. 각 튜토리얼은 특정 기기 제품군을 대상으로 합니다. 아래 표를 참조하십시오.
- 파이썬 튜토리얼:
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 | 기기 목록 | 임의 | 파이 · C++ · C++ 글레이즈 | HTTP를 통한 장치 탐지, 세션 범위 쿼리 |
| 01 | Inverse3 출력 | Inverse3 | 파이 · C++ · C++ 글레이즈 | WebSocket의 상태 스트리밍, 제로 노력 키프얼라이브, 첫 번째 메시지를 통한 핸드셰이크 |
| 02 | VerseGrip 출력 | 유선 VG | 파이 · C++ · C++ 글레이즈 | 자세 스트리밍,probe_orientation KeepAlive에 의한, 쿼터니언에서 오일러 각도로의 변환 |
| 03 | 무선 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를 통해 basis / preset / mount에 대화형으로 POST 요청을 전송합니다. |
| 09 | WS 원격 제어 | Inverse3 | 파이 · C++ · C++ 글레이즈 | 실시간 워크스페이스 내비게이터: HTTP를 통해 세션 및 장치를 감지한 후, WebSocket을 통해 매 틱마다 set_transform 스트리밍하기 |
| 10 | 이벤트 | — | 파이 · C++ · C++ 글레이즈 | 포트 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