주요 내용으로 이동

튜토리얼

각 튜토리얼은 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.txt FetchContent를 통해 가져옵니다 libhv、nlohmann/json 와 glaze, 의존성을 수동으로 설정할 필요가 없습니다.

튜토리얼 목록​

#명칭장비변형학습 내용
00장비 목록임의파이 · C++ · C++ 글레이즈HTTP 장치 검색, 세션 단위로 조회
01인쇄 Inverse3Inverse3파이 · C++ · C++ 글레이즈WebSocket 상태 스트리밍, 제로-에포크 연결 유지, 첫 번째 메시지 핸드셰이크
02VerseGrip 인쇄유선 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++ 글레이즈다중 장치 순환, 쿼터너스에서 방향으로의 커서 이동
07Basis와 MountInverse3파이 · C++ · C++ 글레이즈configure.basis、configure.preset, 그리고 런타임 시의 configure.mount 오버레이; preset과 mount는 상호 배타적입니다.
08HTTP 원격 구성Inverse3파이 · C++ · C++ 글레이즈HTTP 전용 세션 간 구성기: 프로필(profile)을 기반으로 세션을 검색하고, REST 대화형 POST 요청을 통해 /preset/mount에 액세스합니다.
09WS 원격 제어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