마운트 및 작업 공간 변환
두 가지 변환 방식이 장치를 애플리케이션 공간에 위치시킵니다. 이 파이프라인을 이해하면 적절한 방식을 선택하는 데 도움이 됩니다.
파이프라인 조정
| 무대 | 기능 | 설정 방법 | 끈기 있는? |
|---|---|---|---|
| 기초 | 축을 재매핑합니다(예: Z축 위쪽 → Y축 위쪽) | session.configure.basis | 네 |
| 변환 적용 | 장치의 물리적 장착 오차(암 위치, 회전, 스케일) | configure.mount 또는 configure.preset | 네 |
| 작업 공간 변환 | 카메라/장면 이동 시 위치 편차 | commands.set_transform 또는 탐색 모듈 | 예 (고정 게시물) |
변환 적용
마운트는 장치가 물리적으로 배치되는 위치, 즉 암 오프셋, 방향 및 크기를 나타냅니다. 이는 한 번만 설정되며(또는 사용자가 물리적 구성을 변경할 때), 실행 중에는 거의 업데이트되지 않습니다.
사전 설정(기본 설정)
마운트를 직접 계산하는 대신, 이름이 지정된 사전 설정을 선택하세요:
| 사전 설정 | 원산지 표시 | 팔을 향하여 |
|---|---|---|
defaults | 기기 베이스 | 앞으로 (팔을 앞으로) |
arm_front | 기기 베이스 | 다음 |
arm_front_centered | 워크스페이스 센터 | 다음 |
led_front | 기기 베이스 | LED 측면 전방 |
led_front_centered | 워크스페이스 센터 | LED 측면 전방 |
custom | 설명서 — 직접 장착하기 | — |
프리셋을 사용하면 마운트, 기준계, 작업 공간의 원점을 한 번에 설정할 수 있습니다.
마운트를 직접 설정하기
- 웹소켓
- HTTP
{
"inverse3": [{
"device_id": "049D",
"configure": {
"mount": {
"transform": {
"position": { "x": 0.0, "y": 0.0, "z": 0.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
}
}
}
}]
}
curl -X POST "http://localhost:10001/inverse3/049D/config/mount?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":0,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
mount 그리고 preset 서로 배타적이다두 가지를 같은 메시지에 함께 보내면 모호해지므로 서비스가 이를 거부합니다.
둘 중 하나를 선택하세요: 이름이 지정된 preset (마운트를 자동으로 설정해 주는) 또는 명시적인
mount 변환.
~할 때 전송 마운트에 감싸고, 변환을 적용하세요: { "mount": { "transform": { … } } }.
~때~ 읽기 스냅샷에서 마운트한 결과, 평평합니다: { "mount": { "position": …, "rotation": …, "scale": … } }.
이는 의도된 설계입니다. 명령어는 통합된 command_data 래퍼; 스냅샷
다음 내용을 직렬화합니다 core::transform 직접.
작업 공간 변환
워크스페이스 변환은 마운트 위에 적용되는 런타임 드리프트입니다. 이 기능의 대표적인 사용 사례는 장면 이동으로, 기기가 물리적으로 제자리에 있는 상태에서 애플리케이션 뷰를 이동, 회전 또는 확대/축소하는 것입니다.
마운트 변환과 작업 공간 변환은 모두 지속적입니다. 즉, 서비스는 사용자가 마지막으로 전송한 값을 기억합니다. 두 가지의 차이점은 용도와 성능에 있습니다:
- Mount는 한 번 설정하면 그대로 유지되도록 설계되었습니다. 이는 물리적 구성을 정의하며, 업데이트 빈도가 낮은 환경에 최적화되어 있습니다.
- 워크스페이스 변환은 높은 빈도로 스트리밍되도록 설계되었습니다 (예: 카메라 이동 중 매 프레임마다) — 내부 파이프라인은 이러한 업데이트 속도에 최적화되어 있습니다.
- 웹소켓
- HTTP
{
"inverse3": [{
"device_id": "049D",
"commands": {
"set_transform": {
"transform": {
"position": { "x": 1.0, "y": 0.0, "z": 0.0 },
"rotation": { "x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0 },
"scale": { "x": 1.0, "y": 1.0, "z": 1.0 }
}
}
}
}]
}
curl -X POST "http://localhost:10001/inverse3/049D/state/transform?session=:0" \
-H "Content-Type: application/json" \
-d '{"transform":{"position":{"x":1,"y":0,"z":0},"rotation":{"w":1,"x":0,"y":0,"z":0},"scale":{"x":1,"y":1,"z":1}}}'
GET 현재 변환을 반환합니다; DELETE 항등식으로 돌아간다.
지속적인 이동(버블 내비게이션, 속도 제어 드리프트)이 필요한 경우,
다음과 같이 사용하십시오. 탐색 모듈 수동으로
스트리밍하는 대신 set_transform 매 프레임마다 — 물리 엔진, 햅틱
피드백, 작업 공간 경계 설정을 자동으로 처리해 줍니다.