👩‍💻 도비는 공부중/💼 하계연구연수생(2023)

[미해결] [Unreal] Motion Capture Data | Visualizing with UE5

오모짱_ 2023. 8. 18. 12:39

 

Matching Bones: Model data and Character

 

센서에서 얻은 데이터 이름과 unreal 캐릭터의 bone matching

udp 서버에서 데이터프레임 만들어 unreal 형식에 맞춰서 전송


UDP Message Printing

CONNECT : 'UDPRecivedEvent' -> 'Print String' node

'Printing String' node ➝ screen/console 출력 option 선택 가능

Get Array Field: return value: num = 22

 

☑ return value 20 ➝ 22 (add shoulder skeleton)

    센서 shoulder == 캐릭터 clavicle 로 조정했는데 잘 모르겠음 (수정)

☑ sensor = { name , oriientation { roll, ptich, yaw } }

 


Character: Animation (use animation blueprint)

 

 

1. 변수 추가: 각 Bone에 해당하는 로테이터 생성

2. bone transform (modify) 노드 추가

3. bone transform node의 rotation과 로테이터 연결

 

bone transform (modify) > detail > ratation

 

* rotation mode: add to existing or replace existing

* rotation space: (잘 모르겠음)

    - world space: set the value relative to world origin.

    - component sapce: relative to skeletal mesh component

    - parent bone: relative to the parent bone

    - bone sapce: relative to bone's transform in the input pose.

 

 

☑ Rotator의  default  value 수정 가능

     * arm: 0, 0. 0 의 기본 자세 = T-pose

     * pelvis ~ head: y 축 보정 필요

 

☑ euler or quaternion value

    * 0, 0, 0 이 T-pose 라고 하면 ?? 수집한 Euler T-pose 데이터 의 quanternion 값 사용해야 해

      일단 python: udp server: euler to quaternioin library 사용해 변환

☑ degree or radian ??

☑ x = roll | y = pitch | z = yaw 맞는지 확인

 

 

euler 값 그대로 전송하면 캐릭터가 움직일거라고 생각했지만 축이 이따구로 휘어지는 문제 발생

 

☑ unreal 자체에서 default 값 수정 or 서버에서 보낼때 보정해서 보내주기

    - unreal default 수정: 결과 원하는대로 안나옴 ➝ 뭐가 문제인지 모르겠음

    - 서버에서 값 보정: 동/서/남/북 데이터에 따라 축 뒤틀림^^

 

[1]

 

[2]

 

☑ 이게 문제가 아닌 것 같다..


UDP Controller BP: Add Rotator SET 

 

'UDPController_Human' Blue print ThridPerson_AnimBP 형변환 노드에서 새로운 노드를 추가

'ThirdPerson_AnimBP'에서 생성한 변수를 추가

 

 

☑ 센서에서 얻은 모든 bone 데이터 연결 & 흐름 확인

 

 

☑ 삽질 ing (2023.08.02)

데이터 하나 잡고 끝나는건가.. 값 변화 없음^^

근데 콘솔에서는 계속해서 값 들어오는거 확인?

 

count 값으로 제대로 들어가고 있는건지 확인 > time.sleep(1) 변화 관찰

 

 

1초마다 캐릭터가 회전하기는 하는데.. 그럼 뭐가 문제? ^^

 

 

Rotator 값 Screen에 찍어봐도 변화하는거 확인

 

 

❍ Character BP, UDP controller BP 축 방향 설정

UDP Controller Human

 

데이터셋에서 얻은 y=ptich / x=roll 값들이 unreal engine에서 반대인 듯

캐릭터 Animation BP 에서 Rotator에 전송되는 값들로 바뀌도록 만들고 싶으니까 opiton = replace existing

(add to existing 이면 캐릭터 끝도 없이 회전하는 문제 발생)

 


Character Animation BluePrint > Character > bones > all hierarchy

 

각 bone들이 어떻게 연결되어 있는지를 나타내는 것 = "Rig"

skeleton은 이렇게 뼈대 구조 목록과 각 bone들이 어떻게 연결되어 있는지에 대한 정보 들어있다.

 

 

☑ Skeleton 범위 벗어난 ik_hand / ik_foot 때문인가 싶었는데 아닌듯


 

 

☑ 데이터 수집 (2023.08.02)

 

.bvh 파일 확인하기 (link)

 

N-Pose / T-Pose 로 calibration 후 여러 개의 pose data 수집

Xsens로 얻은 .mvn > .xlsx 로 변환 후 캐릭터에서 확인                     

 

 

.bvh 파일 분석

 

수집한 데이터 xlsx 사용하지 않고 bvh 정보 사용하기

이전보다 의미 있는 결과가 나오나 여전히 수집한 데이터와는 일치하지 않음

원인 파악 안됨

 

 


☑ udp_server.py 에서 bone 종류마다 값을 보정해서 보내주기

 

 

 

각각의 bone 마다 추가적으로 값 더해서 보내주는 방법 시도

    ┖ 동/서/남/북 에 따라 보정값이 달라져야 한다..

        ┖ 이렇게까지 해야 할 이유가 있을까? → 다른 방법 찾아보기

    ┖ 이렇게 보내는거나 bp에서 default 값 설정하는 거나 비슷한거 아닌가

 


  Character Animation BP 설정 변화 시도

 

 

여러 방법으로 시도해봤지만 > 원하는 결과 ? 안나옴

 


  NEXT..?

 

❍ C++ 단계부터 시작하기

    ┖ BP 쓰는 것 보다 훨씬 직관적? 으로 구현할 수 있을 것 같긴 한데

        ┖→ 그럼 어디서부터 시작해야되지

 

 

❍ 다른 Insight 생기기 전까지 잠시.. Bye

    너무 오래동안 잡고있는 듯한 느낌

 

 

더보기

 Window > world settings > Gamemode override: thridperson gamemode 선택

 

플레이어는 character calss 상속

┖ 기본 컴포넌트로 CHARACTER MOVEMENT 

┖ (일반적: 인간형) 루트 컴포넌트로 캡슐 콜리전, 현재 어느쪽을 향하고 있는지 알려주는 애로우 컴포넌트

    ┖ 기본적으로 character class 가 상속받는 것으로 삭제 불가능

┖ 캐릭터 외관 설정 > 스켈레탈메시 컴포넌트 > SK_Mannequin

 


[ERROR]

 

☁ UDP Socket Plugin + Version Crash

더보기

Assertion failed: Socket != nullptr [File:E:\Media\Epic Games\UE_5.1\Engine\Source\Runtime\Networking\Public\Common\UdpSocketReceiver.h] [Line: 53]

UnrealEditor_UDPWrapper
UnrealEditor_UDPWrapper
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_CoreUObject
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_Engine
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor_UnrealEd
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
UnrealEditor
kernel32
ntdll

 

☁ [project name] could not be compiled. Try rebuilding from source manually.

 

UDPWrapper 가 Unreal 4 버전만 있어서 소스를 빌드해 사용했지만 현재 5.1 버전에 해당하는게 있다.

그치만 뭔가 안맞는지 실행할때마다 자꾸 죽어버리는 프로그램

 

'

☞ Visual Studio Installer > C++ 사용한 데스크톱 개발 / .NET 데스크톱 개발 설정 확인

☞ 컴퓨터 재시동.. 

☞ 될 때까지 계속 실행시키면 가끔 켜질 때도 있음

 

☞ 저장/컴파일 하기 전에 뭐 순서에 맞게 빌드해줘야된다는 글을 봤는데 >> 잘 모르겠음

☞ 프로젝트 파일 Saved, Intermediate 폴더 삭제 후 재실행 >> 된다는 사람도 있던데..

 


[REFERENCE] 

 

ref_video

docs1

Absolute / perfect orientation out of IMU (video)

MVN Plugin (video)