k•KINDNICK김광진 · 포트폴리오
← 전체 작업
소프트웨어 / NatNet · SteamVR

OptiTrack → SteamVR 가상 트래커

수신·변환·출력 도구 구현
구현한 기능

OptiTrack 스켈레톤의 본을 SteamVR 가상 트래커에 연결하는 도구를 개발했습니다. HMD와 광학 캡처 공간을 보정하고 변환한 위치·회전을 전송하도록 만들었습니다.

내가 한 일

NatNet 수신 연동, 스켈레톤 본 매핑, HMD 캘리브레이션, 포즈 필터와 VMT 출력·GUI 개발

  • Motive 스켈레톤의 본을 트래커 역할별로 지정하게 했습니다.
  • HMD·광학 위치 샘플로 두 공간의 회전과 이동을 계산했습니다.
  • 포즈 필터·VMT 출력과 입력 누락 시 비활성 처리를 개발했습니다.
VRChat 아바타 연동 화면VRChat 안에서 아바타의 전신 움직임을 확인하는 시연 화면.
시연 영상

VRChat 아바타 연동 화면

SteamVR 연동 후 VRChat 안에서 아바타의 움직임을 확인한다.

내가 한 일

OptiTrack의 모션 데이터를 SteamVR 가상 트래커로 전달하는 프로그램 개발.

자료 범위

SteamVR 연동 시연 영상입니다. VRChat의 아바타·월드는 외부 자산이며, 영상 출력 프레임률은 트래킹 지연이나 정확도 측정값이 아닙니다.

광학 모션캡처·HMD 현장 시연마커 수트·HMD 착용자의 움직임과 VRChat이 표시된 모니터를 함께 촬영한 현장 시연.
시연 영상

광학 모션캡처·HMD 현장 시연

광학 모션캡처와 HMD를 사용하는 현장 구성을 보여준다.

내가 한 일

광학 모션 데이터를 SteamVR 가상 트래커에 연결하는 프로그램 개발과 연동 시연.

자료 범위

상용 광학 카메라·HMD·마커 수트를 사용한 현장 연동 시연입니다. 담당 작업은 가상 트래커 프로그램 개발과 연동이며, 장비나 VRChat 아바타·월드의 제작은 포함하지 않습니다. 지연·정확도 측정 영상은 아닙니다.

기술과 문제 해결 과정구현 방법 · 문제 해결 사례 1개 · 시험 조건

작업 배경

광학 캡처와 HMD의 원점·방향·바닥 기울기가 달라 본 위치를 그대로 가상 트래커로 보내기 어려웠습니다. 액터의 본 이름과 트래커 역할을 연결하고 추적이 끊긴 상태도 전달해야 했습니다.

구현한 내용

  1. 01

    Motive 모델 정의에서 스켈레톤과 본 이름을 받아 트래커 역할별 본을 매핑하도록 구성했습니다.

  2. 02

    HMD와 광학 Head 위치의 짝 샘플을 수집하고 SVD 기반 Kabsch로 전체 3축 회전과 이동 오프셋을 계산했습니다.

  3. 03

    회전 행렬을 쿼터니언으로 바꿔 포즈에 적용하고, 선택적으로 위치 필터와 회전 스무딩을 사용합니다.

  4. 04

    VMT Room/Unity OSC 메시지로 위치·회전·활성 상태와 수신 후 경과 시간에 따른 time offset을 전달합니다.

  5. 05

    필요한 본이 없거나 종료할 때 트래커 비활성 상태를 보내도록 했습니다.

PythonNatNetOptiTrackSteamVROpenVRKabschOSC
문제 해결

어떤 문제를 다뤘는지

01

광학 캡처 공간과 HMD 공간의 3차원 정렬

문제
두 장비의 좌표가 서로 다른 원점과 방향을 사용하고 바닥도 완전히 수평이라는 보장이 없어 yaw 보정만으로는 맞지 않을 수 있었습니다.
처리 방법
HMD·Head의 위치 쌍을 수집하고 중심을 뺀 교차공분산을 SVD로 분해합니다. 반사를 보정한 회전과 이동을 구해 본 포즈에 적용하며, GUI에 샘플 RMS를 표시합니다.
결과·범위
전체 3축 정렬과 포즈 변환·VMT 출력 코드가 구현돼 있습니다. 실제 Motive·HMD·SteamVR을 동시에 연결한 정합도와 장시간 동작은 추가 확인 대상입니다.
구현과 검증 범위

스켈레톤 수신·본 매핑·좌표 정렬·VMT 출력 구현. 리지드바디 출력과 실장비 정합은 미확인.

실행·측정 결과는 각 사례에 적힌 당시 기록과 조건을 따릅니다.

시험 조건과 적용 범위

현재 TrackerManager의 rigid body 콜백은 비어 있어 리지드바디가 스켈레톤과 동일하게 트래커 출력까지 지원된다고 쓰지 않습니다. time offset은 PC 수신 이후 경과 시간이며 광학 장비 전체 지연이 아닙니다. 캘리브레이션 RMS는 샘플 정합 잔차로 장비 정확도와 구분합니다.

활동
NatNet · SteamVR
작업 구분
수신·변환·출력 도구 구현