튜토리얼
각 튜토리얼은 Inverse Service의 특정 기능을 보여주는 독립적인 프로그램입니다. 세 가지 언어 버전이 나란히 제공되므로, 각 언어의 표현 방식을 비교하고 프로젝트에 적합한 기술 스택을 선택할 수 있습니다:
- 파이썬 — 가장 짧고 간단한 진입점 (
websockets+json) - C++ (nlohmann/json) — C++11 호환, 실행 시 JSON 분석
- C++ (Glaze) — C++20 기반의 최신 사양으로, 컴파일 시 반사 기능과 할당 없는 분석을 지원하며, 실시간 햅틱 루프에 권장됩니다.
소스 코드는 두 개의 공개 예제 저장소에 게시되어 있습니다:
- haply — 튜토리얼별로 하나의 디렉터리가 제공되며, nlohmann/json(C++11) 및 Glaze(C++20) 변형이 포함되어 있습니다. 컴파일 대상 파일 이름에는 접미사가 붙습니다.
-glz글레이즈 버전의 경우. - haply-inverse-python-samples — 튜토리얼마다 하나의 디렉터리.
Inverse Service의 각 버전은 두 저장소에 해당 태그를 지정합니다. 해당 브랜치를 팔로우하세요. release/<version> 이 문서에 해당하는 버전을 계속 사용하려면.
선행 조건
- 역 서비스 실행 중입니다 (via Haply Hub ou via le 독립형 설치 프로그램) 항구에서
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). LeCMakeLists.txt예제 저장소의 최상위 레벨에서 가져옵니다libhv,nlohmann/jsonetglazeFetchContent를 통해: 종속성에 대한 수동 설정은 필요하지 않습니다.
튜토리얼 목록
| # | Nom | 기기 | 변형 | 배울 내용 |
|---|---|---|---|---|
| 00 | 기기 목록 | Tous | 파이 · C++ · C++ 글레이즈 | HTTP 장치 탐색, 세션 내 요청 제한 |
| 01 | 표시 Inverse3 | Inverse3 | 파이 · C++ · C++ 글레이즈 | WebSocket 상태 확산, 무부하 연결 유지, 첫 번째 메시지 시 초기 교환 |
| 02 | VerseGrip 디스플레이 | 유선 VG | 파이 · C++ · C++ 글레이즈 | 방향의 확산, 다음과의 연결 유지 probe_orientation, 쿼터니언에서 오일러 표기법으로 |
| 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 et configure.mount ; 사전 설정과 편집 간의 상호 배제 |
| 08 | HTTP 원격 구성 | Inverse3 | 파이 · C++ · C++ 글레이즈 | HTTP 전용 세션 간 구성기: 프로필별 세션 검색 후, REST를 통해 POST 방식으로 기본값/사전 설정/마운팅을 대화형으로 전송 |
| 09 | WS 리모컨 | Inverse3 | 파이 · C++ · C++ 글레이즈 | 실시간 작업 공간 탐색기: HTTP 세션 및 기기 탐색 후, set_transform WebSocket을 통해 매 사이클마다 |
| 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