( E1 )문서· SCHEMA / aeffer-v1
aeffer-v1 스키마 명세
저장 단위는 관절의 SE(3)와 센서 원점입니다. 뷰어에서 보이는 점 구름은 그 파라미터에서 펼쳐진 시각화일 뿐이며 저장하지 않습니다. 점 개수는 품질 지표가 아닙니다.
( E2 )필드· FIELDS
프레임 하나의 구조
| 경로 | 타입 | 설명 |
|---|---|---|
| schema_version | string | 항상 "aeffer-v1" |
| task_description | string | 태스크 이름 (지시서 원문과 일치) |
| actors[] | array | 역할(demo/subject) · 체형 · 키 |
| capture_rig | string | 리그 식별자 (t1 · t2 · t3 · …) |
| fps | uint16 | 샘플링 레이트 |
| frame_index | uint32 | 프레임 번호 |
| timestamp_ns | uint64 | 세션 시작 기준 나노초 |
| pose_source | uint8 | 0 측정 · 1 단안추정 · 2 보간 · 3 합성 |
| transforms/<joint> | float32[4][4] | 관절 SE(3) 동차변환행렬 |
| confidences/<joint> | float32 | 관절별 신뢰도 0~1 |
| sensors/ | object | 센서 원점 좌표 · 개수 (표면 점은 저장 안 함) |
| derived/aperture_m | float32[2] | 좌·우 엄지-검지 거리 (m) |
| derived/contact | uint8[2] | 좌·우 파지 상태 |
| rights/consent | object | 동의 범위 · 철회 조건 (필수) |
( E3 )관절· 71 JOINTS
관절 71개
| 부위 | 개수 | 구성 |
|---|---|---|
| 몸통 | 5 | hip · spine · chest · neck · head |
| 팔 | 8 | shoulder · elbow · wrist · hand (좌우) |
| 다리 | 8 | hip · knee · ankle · foot (좌우) |
| 손가락 | 40 | 손당 5손가락 × MCP · PIP · DIP · 끝 |
| 발가락 | 10 | 발당 5개 끝점 |
( E4 )원칙· TWO RULES
이 스키마가 지키는 두 가지
- PS-08
측정과 추정을 섞지 않습니다
프레임마다
pose_source가 붙습니다. 구매자는 추정 구간을 걸러내고 학습할 수 있고, 우리는 품질을 숫자로 약속할 수 있습니다. 이 필드가 없으면 데이터 전체의 신뢰도를 검증할 방법이 없습니다. - /derived/
파생값을 격리합니다
개구나 접촉처럼 계산으로 얻은 값은
/derived/아래에 따로 둡니다. 원본 측정값과 섞이지 않아 계산식이 바뀌어도 원본이 오염되지 않고, 라이선스가 다른 모델(MANO 등)에서 유도한 값도 분리해 둘 수 있습니다.
( E5 )내보내기· EXPORT
LeRobot v3로 나갑니다
로봇 학습 쪽의 사실상 표준은 LeRobot v3 형식(parquet + mp4)입니다. aeffer-v1은 이 형식으로 손실 없이 변환되도록 설계했습니다. 구매자가 쓰던 파이프라인을 바꿀 필요가 없습니다.
포맷은 해자가 아닙니다. 우리가 특별한 형식을 만들어 묶어두려는 것이 아니라, 오히려 표준으로 나가야 팔립니다. 값은 형식이 아니라 데이터의 품질과 권리에서 나옵니다.