본문으로 바로 가기

v3.5.0

이번 버전은 1년 전 API 개편 이후 지금까지 출시된 버전 중 가장 포괄적인 업데이트입니다. 3.5.0 버전에서는 통합된 3D 수학 레이어, Minverse 에 대한 완벽한 지원, 타입이 지정된 이벤트 스트림, 완전한 설정 API, 그리고 더욱 직관적인 HTTP 인터페이스가 도입되었으며, 여기에 1년 동안 진행된 버그 수정 및 사용 편의성 개선 사항도 포함되어 있습니다.

주요 내용​

  • 통합 3D 수학 계층 – 디바이스 기반(프레임), 마운트 변환, 작업 공간 변환 및 내비게이션 변환을 위한 완전한 기능을 갖춘 프리미티브를 갖춘 결합 가능한 변환 파이프라인과, 로컬 공간, 세션 공간, 애플리케이션 공간 및 내부 공간 간의 명시적 변환 기능을 제공합니다.
  • 버블 내비게이션 – 속도 기반 속도 제어, 히스테리시스 효과를 고려한 충돌 감지, 커서로 이동하는 선택적 드리프트 기능을 통해 형성된 구역(SDF 프리미티브)을 기반으로 대규모 가상 작업 공간에서 탐색을 수행합니다. HTTP 및 WebSocket을 통해 앱 공간을 경유하는 왕복 통신을 이용하여 완전히 구성할 수 있습니다.
  • 표준화된 이벤트 스트림 – 기기 수명 주기, 보안 경고, 보정, 배터리 상태, 규정 준수율 관련 경고 및 구형 기능에 대한 알림을 위한 전용 WebSocket 이벤트 채널.
  • Settings-API – HTTP CRUD, 타입 힌트, 범위 제한 및 설명을 지원하는 완전한 키-값 설정 시스템으로, 기존의 중첩된 구성 파일을 대체합니다.
  • 일관된 장치 구성 – 각 기기에 대해 공통으로 적용되는 HTTP 경로 세트: basis, mount, preset, transform, filters, handedness, torque_scaling, gravity_compensation, home_return.
  • Minverse 와 펜의 동기화된 보정 – 이제 기기와 펜이 함께 보정되며, 펜이 물리적으로 장착될 때까지 보정 기능은 잠긴 상태로 유지됩니다.
  • HTTP의 편의성 개선 – 인덱스 기반 장치 선택기(ID 없이 인덱스를 통해 장치에 접근), WebSocket과 공유되는 일관된 요청/응답 구조, 선택적으로 활성화할 수 있는 {ok, error, data}-봉투 (?format=json) 및 와일드카드 세션 선택자.

새로운 기능​

기기​

  • Minverse – 이 버전에서 공식적으로 지원되는 기능: 감지, 대기 절차, 보안 알림 및 동기화된 보정 절차.
  • 이제 ‘Ruko ’와 ‘Kingfisher’가 Griff의 공식 제품 유형으로 인정됩니다.
  • 장치 시뮬레이터 지원 – 실제 하드웨어와 함께 소프트웨어로 시뮬레이션된 장치를 식별하고 제어할 수 있습니다.
  • 연결 루프 방지 – 오류가 있는 포트는 자동으로 차단되며, 다음 명령어로 재설정할 수 있습니다. POST /ports/{port}/reset.
  • 손잡이 감지를 위한 하트비트 – 데바운스 기능을 통해 손잡이를 잡거나 놓을 때를 정확하게 감지합니다.

세션, 명령어 및 WebSocket​

  • 세션 프로필의 필터링 및 지속성 – 세션은 프로필 이름과 필요한 SDK 버전을 지정하며, 서비스는 재연결 시에도 이 두 가지를 기억합니다. 클라이언트와 모니터링 도구는 이 프로필을 기반으로 세션을 필터링하고 특정 세션을 대상으로 할 수 있습니다.
  • 세션별 명령어 버퍼 – 한 세션이 느려져도 다른 세션의 속도를 저하시키지 않습니다.
  • Explizite configure-일회성 명령어용 맵 – basis, preset, mount, force_gate, damping 기기당 및 profile 그리고 basis 이제 각 세션마다 모든 것이 configure 전송되며 출력 구성 맵에 맞춰져 있어, 전송된 내용과 다시 읽혀진 내용이 일치하도록 합니다.
  • 맞춤형 기기 거치대 – 통합된 워크스페이스 사전 설정을 선택하십시오 (defaults, arm_front, arm_front_centered, led_front, led_front_centered) 또는 명시적인 변환을 전송하십시오. 수동으로 마운트를 변경하면 프리셋이 자동으로 custom.
  • 명명된 명령 필드 – position, vector, angles, torques 일반 배열을 대체합니다 values.
  • set_angular_torques ersetzt set_angular_torque (단수형은 더 이상 사용되지 않습니다).
  • 세션 프레임의 확장 – v3.0 및 v3.1 버전의 세션 프레임에는 이제 확장 가능한 config-, state- 그리고 status- 객체; 새로운 출력 필드에는 다음이 포함됩니다. current_cursor_force, current_cursor_position, current_angular_torques, current_angular_position, control_domain, control_mode, transform, transform_velocity, 더 자세한 config.*-펠더와 status.safety (기본적으로 숨김).
  • 부분 변환-업데이트 – 변경하고자 하는 하위 필드만 보내주십시오 (position, rotation, scale), 마운트, 작업 공간 변환 및 탐색 양식에 대해.

HTTP​

  • GET / – 서비스 버전.
  • GET/POST/DELETE /settings 그리고 /settings/* – 키-값 쌍을 위한 완전한 설정 API.
  • GET /sessions/{session} 그리고 GET/POST/DELETE /sessions/{session}/profile.
  • GET /devices?session=<selector> – 장치 좌표를 지정된 세션의 적용 영역으로 변환합니다.
  • 인덱스 기반 장치 선택기 – ID를 알 필요 없이 인덱스를 통해 원하는 기기를 호출할 수 있습니다 (/inverse3/0/... 우선 Inverse3; /inverse*/*/... (Inverse 제품군의 모든 기기에 적용됨).
  • 일관된 문의·답변 구조 – POST 및 GET 요청은 동일한 것을 사용합니다. command_data- WebSocket과 같은 JSON 기반 구조; 한 전송 프로토콜을 위해 작성된 코드는 다른 프로토콜에서도 작동합니다.
  • 선택적으로 활성화할 수 있는 엔벨로프 über ?format=json 모든 노선에서; /settings* 그리고 GET /home_return 기본적으로 사용 {ok, error, data}. 다음을 사용하십시오 ?format=plain 기본 구조를 위해.
  • 세션 선택자 내의 와일드카드 – * (임의의 문자열) 및 ? (단일 문자)가 프로필 이름에 포함되어 있습니다.
  • 백분율로 인코딩된 선택자 – %2A, %3A 등은 라우팅 전에 디코딩됩니다.

이벤트​

  • 전용 WebSocket 이벤트 스트림 communication/events/port.
  • 24가지 유형의 이벤트 범주. 여기에는 기기 수명 주기, 안전(전자 브레이크, 이물질 감지, 잠김), 보정 오류, 배터리 경고, 세션 경고, 낮은 제어 속도 및 임계 제어 속도, 입력 유효성 검사, 구형 기능에 대한 알림 등이 포함됩니다.

가시성​

  • 프로파일링 시 로그 메시지는 단계별 색상으로 구분되어 Tracy로 전달됩니다.
  • 각 HTTP 핸들러에 대한 트레이시-조넨.
  • 메인 루프의 타이밍 통계가 포함된 이벤트.
  • 설정 가능한 로그 디렉터리와 서버 호스트명 (Docker 호환).

3.6 버전 미리보기​

  • SDF 햅틱 효과(SDF HFX) – 기본 기능은 이미 3.5 버전에서 구현되었습니다(모듈, 수명 주기, 모듈에서 제공하는 명령 및 상태의 직렬화). 완전한 문서가 포함된 공개 API는 3.6 버전에서 제공될 예정입니다.

개선 사항​

  • 힘 진동 필터링 – 축 기반 진동 감지, 8단계 점진적 복원, 히스테리시스를 적용한 입력 조정 및 비대칭 허용 창.
  • 실행 시 Force-Gate-Filter – 다음을 통해 설정 가능 configure.force_gate.gain WebSocket 또는 HTTP를 통해, 영구적으로 저장된 기본값과 함께.
  • 정밀 응용 분야를 위해 메인 루프의 최대 주파수를 32 kHz로 높였습니다.
  • 더 작은 웹소켓 페이로드 – 변환-기본값으로 항등값을 갖는 하위 필드 (position = 0, rotation = identity, scale = 1)는 기본적으로 출력되지 않습니다. 이로 인해 유효 부하 크기가 줄어들며, 구형 Unity 패키지의 4KB 메시지 제한과의 호환성이 다시 확보됩니다. 두 가지 고급 설정(serialization/explicit_fields, serialization/force_complete_transforms)는 이를 필요로 하는 애플리케이션을 위해 모든 필드를 다시 포함합니다.
  • 메인 루프의 지터 감소 – WebSocket 메시지 처리 시 JSON 구문 분석 및 네트워크 전송 중에 메인 루프의 클럭이 더 이상 차단되지 않으며, 세션의 클럭 스케줄링이 응답 직렬화 단계보다 앞당겨졌습니다.
  • 서버는 기본적으로 localhost를 통해서만 접속할 수 있습니다. – 네트워크에 액세스하려면 다음 설정을 활성화하십시오. communication/bind_all_interfaces.
  • 장치 선택자에서 와일드카드를 사용할 때는 접두사 구문을 사용합니다. (예: inverse* (Inverse 제품군의 모든 기기에 적용됩니다).
  • 감쇠 명령어 다음과 함께 force_gate 인 다이 configure-지도가 이동되었습니다.
  • 기존 파일 로거를 순환형 파일 로거로 대체하며, 디렉터리는 구성할 수 있습니다.
  • 모듈이 제공하는 명령어 및 상태 – 모듈은 핵심 스키마를 변경하지 않고도 WebSocket 프레임에 자체 명령어, 구성 필드 및 상태 출력을 포함시킬 수 있습니다.

오류 수정​

오류 수정으로 가득 찬 한 해였으며, 가장 효과적인 수정 사항들은 아래에 나열되어 있습니다.

  • 특정 조건에서 세션 속도가 불규칙하게 나타남.
  • 시뮬레이션이 실행 중이 아닐 때 GripHook(Verse Grip Stopper) 이 제대로 해제되지 않았습니다.
  • Inverse3-타임아웃 설정이 너무 엄격하여, 기기가 느리게 시작될 때 연결 루프가 발생했습니다.
  • Windows에서 서비스가 비정상적으로 종료됨 — 시스템 종료 시 HTTP 서버가 항상 정리되지는 않았습니다.
  • 서비스가 구형 펌웨어 버전에 지원되지 않는 명령을 전송했을 때 발생하는 재연결 루프.
  • 블루투스 어댑터가 장착된 시스템에서 블루투스 기기 목록이 로그를 넘쳐나게 했다.
  • 서비스를 연속으로 여러 번 재시작할 때 오류가 발생합니다.
  • Ubuntu 노트북에서 절전 모드 진입 및 복귀 후 무선 Verse-Grip 동글이 응답하지 않는 현상.
  • Linux 및 macOS에서 무선 Verse Grip의 핸드셰이크 기능이 이제 첫 번째 인식 시도가 실패할 경우 올바르게 대체 방식을 활용합니다.
  • macOS 구성 파일의 저장 위치 — 구성이 이제 ~/Library/Application Support/ 잘못된 경로에 저장되었습니다.
  • Linux 및 macOS에서 SIGSEGV 신호 처리 — 여러 스레드에 대해 크래시 로깅이 활성화된 경우, 치명적인 신호가 발생해도 프로세스가 무한 루프에 빠지지 않습니다.
  • 세션 간 명령어 덮어쓰기 — 한 세션의 구성 명령어가 다른 세션의 명령어로 묵시적으로 대체될 수 있었으나, 이제 이러한 명령어가 올바르게 필터링되고 병합됩니다.
  • 프로브 명령은 구성을 덮어씁니다. — 모니터링 세션(예: Haply Hub)은 probe_position Basis / Preset / 프로필에 대한 미적용 변경 사항을 더 이상 묵시적으로 적용하지 않습니다.
  • 프로토타입 핸들 표시 — 프로토타입 하드웨어가 사용자 정의 핸들이 아닌 표준 핸들로 잘못 표시되었습니다.
  • 구식 매트릭스 표기법은 set_basis 아직 마이그레이션되지 않은 클라이언트에 대해서는 다시 고려됩니다.
  • Inverse3 의 절단 시 발생하는 크라프트임펄스는 더 이상 잔류 힘의 급격한 증가를 일으키지 않습니다.
  • 연속적으로 빠르게 연결 및 연결 해제가 반복될 때 WebSocket 연결이 끊어지면 발생하는 경합 상태.
  • 웹소켓 session_id 일부 전송 중인 페이로드에서 다음과 같이 나타났습니다. 0 시리얼화됨.
  • Windows에서는 --log-level 이제 다음 제품과 함께 사용할 수 있습니다 --dev 고려됨 (이전에는 암묵적으로 debug (초기화됨).

구식 요소​

현재는 여전히 작동하지만, 향후 주요 버전 업데이트 시 제거될 예정입니다. 답변에는 경우에 따라 필드가 포함될 수 있습니다. deprecation_warning.

구식에르자츠
POST /force_scalePOST /settings/devices/inverse*/filters/force_scale/gain
POST /gravity_compensationPOST /{device}/{id}/config/gravity_compensation
POST /torque_scalingPOST /{device}/{id}/config/torque_scaling
POST /device_handednessPOST /{device}/{id}/config/handedness
POST /serial_enablePOST /settings/communication/serial/enabled
POST /experimental/features/grip_dropped_simulation_stopper설정 API
POST /experimental/features/screensaver_enable설정 API
웹소켓 command_data.valuesposition, vector, angles, torques
웹소켓 set_angular_torqueset_angular_torques
웹소켓 probe_cursor_positionprobe_position
웹소켓 set_coordinate_originconfigure.preset
WebSocket 세션 수준 set_basisconfigure.basis

호환성 안내​

3.4.19 버전과 비교했을 때, 중대한 호환성 변경 사항은 없습니다. 기존 통합 환경과 관련하여 두 가지 참고 사항이 있습니다:

  1. 구버전 HTTP 엔드포인트에 이제 필드가 포함됩니다. deprecation_warning 답변에서 — 답변 패턴을 엄격하게 검증하는 클라이언트는 이 추가 필드를 허용해야 합니다.
  2. Das Feld values WebSocket에서 command_data 이 기능은 구식이지만 여전히 구문 분석됩니다. 가급적 명명된 필드를 사용하십시오.

튜토리얼 및 문서​

  • 새로운 튜토리얼: 05 위치 제어, 06 복합 (Inverse3 + Verse Grip), 07 기초 및 설치, 08 HTTP 원격 구성기, 09 WebSocket 원격 제어, 10 이벤트 스트림 리스너.
  • 새로운 유약 종류 모든 C++ 튜토리얼 (cpp-glz/) 기존의 nlohmann/json 방식과 병행하여.
  • 모든 튜토리얼은 v3.1 API에 맞춰 새로 작성되었습니다. (포트 10001, configure.preset, 이름이 지정된 명령 필드, print_state()-보조 기능).
  • 이전 ‘Verse-Grip-Stopper’ 튜토리얼은 삭제되었으며, 새로운 통합 튜토리얼로 대체되었습니다.
  • SDK 가이드, API 참조 및 하드웨어 페이지 전반에 걸쳐 공개 문서가 업데이트되었습니다.