편집 및 작업 공간 변환
두 가지 변환을 통해 장치를 애플리케이션 공간 내에 배치합니다. 처리 과정을 이해하면 올바른 변환을 선택하는 데 도움이 됩니다.
좌표 처리 체인
| 에타프 | 역할 | 이를 어떻게 정의할까 | 계속되나요? |
|---|---|---|---|
| 기본 | 축을 재설정합니다(예: Z축이 위쪽 → Y축이 위쪽). | session.configure.basis — 보기 튜토리얼 08 (HTTP 원격 구성) | 네 |
| 편집 변환 | 장치의 물리적 장착 오차 (암 위치, 회전, 배율) | configure.mount ou configure.preset — 보기 튜토리얼 08 (HTTP 원격 구성) | 네 |
| 업무 공간의 변화 | 카메라 또는 씬의 내비게이션 편차 | commands.set_transform — 보기 튜토리얼 09 (매 사이클마다 WebSocket을 통한 실시간 스트리밍) | Oui (지속적) |
편집 변환
설정 정보는 장치의 물리적 위치, 즉 암의 오프셋, 방향 및 스케일을 설명합니다. 이 정보는 한 번만 정의되며(또는 사용자가 물리적 구성을 변경할 때), 실행 중에 업데이트되는 경우는 거의 없습니다.
기본 설정 (공장 출하 시 설정)
직접 편집 설정을 계산하기보다는 다음과 같은 이름의 사전 설정을 선택하세요:
| 사전 설정 | 원점의 위치 | 팔의 방향 |
|---|---|---|
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 et preset 서로 배타적이다두 가지를 같은 메시지에 함께 보내면 의미가 모호해지므로, 해당 서비스는 이를 거부합니다.
둘 중 하나를 선택하세요: 하나 preset nommé(사용자를 대신해 편집을 정의하는 것) 또는
변환 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 매 틱마다: 물리 엔진, 햅틱 피드백,
그리고 작업 공간의 경계를 자동으로 처리해 줍니다.