v3.5.0
1년 전 API를 전면 개편한 이후 가장 중요한 업데이트입니다. 버전 3.5.0에서는 통합된 3D 수학 레이어, Minverse 에 대한 완벽한 지원, 유형이 지정된 이벤트 스트림, 포괄적인 매개변수 API, 그리고 더욱 간결해진 HTTP 인터페이스가 도입되었으며, 이 모든 기능에는 지난 1년 동안의 버그 수정 및 사용 편의성 개선 사항이 반영되어 있습니다.
강점
- 통합 3D 수학적 레이어 — 기기 기본 좌표계(프레임), 편집 변환, 작업 공간 변환 및 탐색 변환을 위한 기본 연산자를 갖춘 모듈식 변환 파이프라인으로, 로컬 공간, 세션 공간, 애플리케이션 공간 및 내부 공간 간의 명시적 변환 기능을 제공합니다.
- 버블 내비게이션 — 속도(velocity)에 연동된 속도 제어, 히스테리시스를 고려한 충돌 감지, 커서 방향으로의 선택적 편향을 통해 정의된 형태의 영역(SDF 프리미티브)을 따라 광활한 가상 작업 공간을 탐색할 수 있습니다. HTTP 및 WebSocket을 통해 완전히 구성 가능하며, 애플리케이션 공간 내에서 양방향 통신이 지원됩니다.
- 유형별 이벤트 스트림 — 기기 수명 주기, 보안 경고, 보정, 배터리 상태, 점검 주기 알림 및 지원 종료 안내를 위한 전용 WebSocket 이벤트 채널.
- 매개변수 API — HTTP CRUD 작업, 유형 지정, 범위 제약 조건 및 설명을 지원하는 포괄적인 키-값 매개변수 시스템으로, 기존의 중첩된 구성 파일을 대체합니다.
- 일관된 기기 구성 — 각 기기에 대해 하나의 HTTP 경로 세트만:
basis,mount,preset,transform,filters,handedness,torque_scaling,gravity_compensation,home_return. - Minverse 와 스타일렛의 동기화된 보정 — 이제 기기와 스타일렛이 함께 보정되며, 그립이 물리적으로 고정되지 않은 상태에서는 보정 상태가 잠겨 있습니다.
- HTTP의 인체공학적 개선 사항 — 인덱스를 통한 장치 선택기(식별자 없이 인덱스로 장치를 지정), WebSocket과 공통된 통합된 요청 및 응답 형식, 래퍼
{ok, error, data}활성화 가능 (?format=json) 및 와일드카드 세션 선택기.
새로운 기능
기기
- Minverse — 이 버전에 공식적으로 지원되는 기능: 감지, 시작 절차, 보안 알림 및 동기화된 보정 흐름.
- 루코와 킹피셔는 공식 핸들 유형으로 인정받고 있습니다.
- 기기 시뮬레이터 지원 — 실제 하드웨어와 병행하여 소프트웨어로 시뮬레이션된 기기를 감지하고, 해당 기기와 통신합니다.
- 연결 루프 방지 — 비정상적으로 작동하는 포트는 자동으로 차단됩니다. 다음 명령을 사용하여 해당 포트를 재설정하십시오.
POST /ports/{port}/reset. - 스타일러스 고정 상태 표시 — 핸들의 장착 및 분리 상태를 안정적으로 감지하며, 반동 방지 기능이 적용되어 있습니다.
세션, 요청 및 WebSocket
- 세션 프로필 필터링 및 지속성 — 세션은 프로필 이름과 필요한 SDK 버전을 선언하며, 서비스는 재접속 시마다 이를 기억합니다. 클라이언트와 모니터링 도구는 이 프로필을 기준으로 세션을 필터링하고 대상으로 지정할 수 있습니다.
- 세션별 명령 탭 — 느린 세션이 다른 세션을 더 이상 차단할 수 없습니다.
- 사전
configure일회성 주문에 한해 명시적으로 —basis,preset,mount,force_gate,damping기기별, 그리고profileetbasis세션별로, 이제 모두 다음 위치에 통합되어 있습니다.configure. 이 사전은 출력본과 일치하도록 구성되어 있으므로, 사용자가 입력한 내용이 그대로 출력된 결과물에 반영됩니다. - 사용자 정의 가능한 장치 조립 — 내장된 작업 공간 사전 설정을 선택하세요 (
defaults,arm_front,arm_front_centered,led_front,led_front_centered) 또는 명시적인 변환을 전송하십시오. 편집 내용을 수동으로 수정하면 프리셋이 자동으로custom. - 명명된 명령 필드 —
position,vector,anglesettorques일반 테이블을 대체합니다values. set_angular_torques바꾸다set_angular_torque(단수형은 비하적인 뉘앙스가 있다).- 세션 프레임 확장 — v3.0 및 v3.1 세션 프레임은 이제 확장 가능한 객체를 전달합니다.
config,stateetstatus; 새로운 출력 필드에는 다음이 포함됩니다.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 /settingset/settings/*— 키-값 매개변수에 대한 전체 API.GET /sessions/{session}etGET/POST/DELETE /sessions/{session}/profile.GET /devices?session=<selector>— 특정 세션의 적용 공간 내에서 기기의 좌표를 변환합니다.- 색인별 기기 선택기 — 기기 식별자를 알 필요 없이, 인덱스를 통해 어떤 기기든 지정할 수 있습니다 (
/inverse3/0/...첫 번째 Inverse3;/inverse*/*/...(Inverse 제품군의 모든 기기에 적용됩니다). - 요청 및 응답의 통합 구조 — POST/GET 요청 본문은 동일한 구조를 사용합니다
command_dataJSON이든 WebSocket이든, 한 전송 프로토콜을 위해 작성된 코드는 다른 프로토콜에서도 작동합니다. - 활성화 가능한 봉투 출처:
?format=json어떤 도로에서든;/settings*etGET /home_returnutilisent{ok, error, data}기본값. 다음을 사용하십시오.?format=plain초기 구조를 얻기 위해. - 세션 선택자의 범용 문자 —
*(모든 시퀀스) 및?프로필 이름에 (한 글자)만 포함되어야 합니다. - 선택기의 백분율 분석 —
%2A,%3A, 등등은 라우팅 전에 디코딩됩니다.
행사
- 전용 WebSocket 이벤트 스트림, 다음에서 확인하세요:
communication/events/port. - 24가지 유형의 이벤트 범주, 특히 기기 수명 주기, 안전(전자식 브레이크, 이물질 감지, 잠김), 보정 실패, 배터리 경고, 세션 경고, 낮은 또는 심각한 점검 빈도, 입력 검증 및 감가상각 표시 등이 포함됩니다.
가시성
- 프로파일링 시 심각도 수준에 따라 색상이 지정된 로그 메시지가 트레이시에게 전송되었습니다.
- 각 HTTP 관리자에 대한 트레이시 영역.
- 메인 루프의 시간 통계 이벤트.
- 로깅 디렉터리와 서버 호스트 이름을 구성할 수 있습니다(Docker 호환).
버전 3.6에서 제공될 예정
- SDF 햅틱 효과(SDF HFX) — 버전 3.5에서는 기반 구조(모듈, 라이프사이클, 모듈에서 제공하는 명령 및 상태의 직렬화)가 마련되었으며, 공개 API는 버전 3.6에서 완전한 문서와 함께 제공될 예정입니다.
개선 사항
- 힘 진동 필터링 — 축별 진동 감지, 8단계 점진적 복구, 히스테리시스가 적용된 입력 투표 및 비대칭 릴리스 윈도우.
- 실행 시 강제 도어 필터 — 다음을 통해 설정 가능
configure.force_gate.gainWebSocket 또는 HTTP를 통해, 지속되는 기본값을 사용하여. - 정밀도 요구가 높은 애플리케이션을 위해 메인 루프의 최대 주파수가 32 kHz로 향상되었습니다.
- WebSocket 유틸리티 요금 인하 — 기본적으로 항등 변환을 수행하는 하위 변환 영역 (
position = 0,rotation = identity,scale = 1)는 기본적으로 출력에서 제외되는데, 이를 통해 페이로드 크기를 줄이고 이전 Unity 패키지의 메시지당 4KB 제한과의 호환성을 회복합니다. 두 가지 고급 설정(serialization/explicit_fields,serialization/force_complete_transforms)는 필요한 소비자를 위해 모든 필드를 복원합니다. - 메인 루프의 부하 감소 — WebSocket 메시지 처리가 JSON 파싱 및 네트워크 전송 중에 메인 루프 사이클을 더 이상 차단하지 않으며, 세션 사이클 스케줄링이 응답 직렬화 단계보다 앞서 수행되도록 조정되었습니다.
- 서버는 기본적으로 localhost로 제한됩니다. — 다음 매개변수를 사용하여 네트워크 액세스를 활성화하십시오.
communication/bind_all_interfaces. - 기기 선택자의 와일드카드는 접두사 구문을 사용합니다. (예:
inverse*(Inverse 제품군의 모든 기기에 해당합니다). - 감가상각 명령어 사전 내에서 위치가 변경되었습니다
configure, ~ 옆에서force_gate. - 기존 로테이션 파일 로깅 시스템이 새로운 시스템으로 대체되었으며, 이 시스템은 구성 가능한 디렉터리를 지원합니다.
- 모듈에서 제공하는 명령 및 상태 — 모듈은 기본 스키마를 변경하지 않고도 WebSocket 프레임에 자체 명령, 구성 필드 및 상태 출력을 삽입할 수 있습니다.
정정 사항
1년 동안의 버그 수정 내역; 그중 가장 중요한 사항들은 다음과 같습니다.
- 특정 조건에서 세션 속도가 불안정합니다.
- 시뮬레이션이 실행 중이지 않을 때 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더 이상 기본값, 사전 설정 또는 프로필에 대한 대기 중인 변경 사항을 조용히 덮어쓰지 않습니다. - 시제품 손잡이 표시 — 시제품 부품이 사용자 지정 손잡이가 아닌 표준 손잡이로 잘못 표시되었습니다.
- 상속된 행렬 약정
set_basis아직 마이그레이션을 완료하지 않은 고객을 대상으로 해당 기능이 다시 지원됩니다. - Inverse3 의 세션 종료 시 발생하는 충격력은 더 이상 잔류 힘의 급증을 일으키지 않습니다.
- 빠른 연결 및 연결 해제 주기가 반복되는 동안 WebSocket 연결이 끊어질 때의 실행 조건.
- 웹소켓
session_id다음에 연재되었습니다.0일부 출하 화물에서. - Windows에서는,
--log-level이제 다음과 결합될 때 준수됩니다.--dev(이전에는 조용히 다음으로 재설정되었는데,debug).
구식화
현재는 여전히 작동하지만, 향후 주요 버전 업데이트에서 제거될 예정입니다. 답변에는 입력란이 포함되어 있습니다. deprecation_warning 해당되는 경우.
| 구식 | 교체 |
|---|---|
POST /force_scale | POST /settings/devices/inverse*/filters/force_scale/gain |
POST /gravity_compensation | POST /{device}/{id}/config/gravity_compensation |
POST /torque_scaling | POST /{device}/{id}/config/torque_scaling |
POST /device_handedness | POST /{device}/{id}/config/handedness |
POST /serial_enable | POST /settings/communication/serial/enabled |
POST /experimental/features/grip_dropped_simulation_stopper | 매개변수 API |
POST /experimental/features/screensaver_enable | 매개변수 API |
웹소켓 command_data.values | position, vector, angles, torques |
웹소켓 set_angular_torque | set_angular_torques |
웹소켓 probe_cursor_position | probe_position |
웹소켓 set_coordinate_origin | configure.preset |
웹소켓 set_basis 세션 차원에서 | configure.basis |
호환성 참고 사항
3.4.19 버전과 비교해 호환성에 중대한 영향을 미치는 변경 사항은 없습니다. 기존 통합 기능과 관련하여 두 가지 사소한 사항이 있습니다:
- 더 이상 사용되지 않는 HTTP 엔드포인트에는 이제 다음 필드가 포함됩니다.
deprecation_warning응답에서 — 응답 스키마를 엄격하게 검증하는 클라이언트는 이 추가 필드를 허용해야 합니다. - Le champ
valuesWebSocket에서command_data이 필드는 더 이상 사용되지 않지만 여전히 분석 대상에 포함됩니다. 이름이 지정된 필드를 우선적으로 사용하십시오.
튜토리얼 및 문서
- 새로운 튜토리얼: 05 위치 제어, 06 복합형(Inverse3 + Verse Grip), 07 기본 및 설치, 08 HTTP 원격 구성 도구, 09 WebSocket 원격 제어, 10 이벤트 스트림 수신기.
- 글레이즈의 새로운 변형 각 C++ 튜토리얼의 (
cpp-glz/), 기존의 nlohmann/json 변형에 추가로. - 모든 튜토리얼이 새로 작성되었습니다. API v3.1의 경우 (포트 10001,
configure.preset, 지정된 명령 필드, 도움말 기능print_state()). - 기존 ‘Verse Grip Stopper’ 튜토리얼이 삭제되었으며, 새로운 ‘Combiné’ 튜토리얼로 대체되었습니다.
- SDK 가이드, API 참조 및 하드웨어 관련 페이지의 공개 문서가 업데이트되었습니다.