튜토리얼
각 튜토리얼은 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> 브랜치를 생성하여 이 문서와 버전을 일치시킵니다.
전제 조건
- 역 서비스 실행 중 (을 통해 Haply Hub 또는 독립형 설치 프로그램 (시작), 수신 대기 포트는
10001。 - 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.txtFetchContent를 통해 가져옵니다libhv、nlohmann/json와glaze, 의존성을 수동으로 설정할 필요가 없습니다.
튜토리얼 목록
| # | 명칭 | 장비 | 변형 | 학습 내용 |
|---|---|---|---|---|
| 00 | 장비 목록 | 임의 | 파이 · 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 | Basis와 Mount | Inverse3 | 파이 · C++ · C++ 글레이즈 | configure.basis、configure.preset, 그리고 런타임 시의 configure.mount 오버레이; preset과 mount는 상호 배타적입니다. |
| 08 | HTTP 원격 구성 | Inverse3 | 파이 · C++ · C++ 글레이즈 | HTTP 전용 세션 간 구성기: 프로필(profile)을 기반으로 세션을 검색하고, REST 대화형 POST 요청을 통해 /preset/mount에 액세스합니다. |
| 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