설치 및 작업 공간 변환
두 가지 변환이 애플리케이션 공간에서 장치의 위치를 파악하는 데 사용됩니다. 전체 처리 과정을 이해하면 적절한 변환을 선택하는 데 도움이 됩니다.
좌표 처리 절차
| 단계 | 작용 | 설정 방법 | 영구 저장되나요? |
|---|---|---|---|
| 기준 | 좌표축 재매핑 (예: Z-up → Y-up) | session.configure.basis — 참조 튜토리얼 08(HTTP 원격 구성) | 네 |
| 변환 설치 | 장치의 물리적 설치 오차(암 위치, 회전, 확대/축소) | configure.mount 또는 configure.preset — 참조 튜토리얼 08(HTTP 원격 구성) | 네 |
| 작업 공간 변환 | 카메라/장면 내비게이션 드리프트 | commands.set_transform — 참조 튜토리얼 09(WebSocket 주기별 스트리밍) | 예 (영구 저장) |
변환 설치
설치는장치의 물리적 공간 내 실제 위치(암 오프셋, 방향 및 확대/축소 비율 포함)를나타냅니다. 일반적으로 한 번만 설정하면 되며(또는 사용자가 물리적 설정을 변경할 때만 설정됨), 실행 중에는 거의 업데이트되지 않습니다.
기본 설정 (출고 시 설정)
설치 매개변수를 직접 계산할 필요 없이, 이름이 지정된 사전 설정 중 하나를 선택하기만 하면 됩니다:
| 사전 설정 | 원점 위치 | 팔의 방향 |
|---|---|---|
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。
작업 공간 변환
작업 공간 변환은 설치 변환 위에 중첩되는런타임 드리프트입니다. 이 기능의 대표적인 용도는 장면 탐색으로, 기기의 물리적 위치가 변하지 않는 상태에서 애플리케이션 뷰를 평행 이동, 회전 또는 확대/축소하는 것입니다.
변환 및 작업 공간 변환은모두 영구적으로 저장됩니다. 즉, 서비스는 사용자가 마지막으로 전송한 값을 기억합니다. 이 둘의 차이점은 용도와 성능에 있습니다:
- 설치 변환은한 번 설정하면 변경되지 않도록 설계되었습니다. 이는 물리적 설치 상황을 반영하며, 저빈도 업데이트에 최적화되어 있습니다.
- 작업 공간 변환은고주파수 스트리밍 전송(예: 카메라 내비게이션 중 프레임마다 한 번씩 전송)을 위해 설계되었으며, 내부 파이프라인은 이러한 업데이트 주파수에 맞춰 최적화되어 있습니다.
- 웹소켓
- 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 단위 변환으로 재설정하십시오.
설정 또는 작업 공간을 확대/축소하면 기기가 렌더링하는 힘의 값이 변경됩니다. 확대/축소는 접촉력을 계산하는 데 사용되는관통 깊이. 예를 들어,2x 확대/축소 시 투과 깊이는 대략 절반으로 줄어듭니다(장치의 이동 거리에 비해 가상 장면의 크기가 두 배로 커지기 때문이므로), 따라서 얻어지는 힘은 대략 1x ~할 때의반. 반대로,0.5x 크기를 줄이거나 늘리면 대략 힘이 두 배가 됩니다.
이는 대개 사용자가 원하는 동작입니다. 햅틱 환경에서화면을 축소하면자연스럽게 접촉 강도가 약해지고(마치 “더 멀리 떨어져 있는” 것과 같음),화면을 확대하면접촉 강도가 강해집니다. 만약 이것이 원하는 효과가 아니라면—예를 들어, 사용자가 확대/축소할 때 강성을 일정하게 유지해야 하는 경우—확대/축소 힘 이득을 반대로 적용하여 보정할 수 있습니다.
지속적인 이동(버블 내비게이션, 속도 제어 드리프트)이 필요한 경우,
다음 기능을 사용하십시오.내비게이션 모듈, 매 주기마다 수동으로 스트리밍 전송하는 것이 아니라 set_transform——물리 계산, 촉각 피드백, 작업 공간 경계를 자동으로 처리해 드립니다.