Tennis Motion Retargeting

Yerim Shin·2023년 11월 3일
0

★ character animation

목록 보기
3/5

강화학습 모델의 학습에 사용할 refence motion으로 Tennis motion이 필요했음.
현재 사용하고 있는 humanoid.xml에 대한 tennis motion이 없어서 다른 skeleton에 대한 tennis motion을 가져와서 retargeting하는 방식을 사용하기로 했음.

기존 모션 (Tennisman)

Unity Asset Store Tennisman animations
Forehand swing, Backhand swing, Dropshot swing 등 테니스와 관련된 여러 다양한 동작이 존재했다.
여기서 나는 실험을 위해 Forehand swing만 사용했다.

Motion Retargeting

  • 사용한 Framework: ASE [Peng et al. 2022] poselib의 retarget_motion.py 을 참고하여 retargeting을 진행하였다.

T-pose 구성

Tennisman

  1. Tennisman skeleton의 T-pose를 추출하기 위해 Mixamo에 Tennisman_skeleton fbx file을 올려서 T-pose.fbx를 추출함.
  2. ASE [Peng et al. 2022] framework에서 사용되는 맞는 자료구조로 바꾸기 위해 SkeletonState으로 바꾸는 과정을 진행했음.
    Tennisman의 T-pose는 아래 그림과 같았다.

    T-pose of Tennisman

Humanoid_tennis

내 논문의 baseline이 되는 Composite Motion Learning with Task [Xu et al. 2023] 저자 교수님께서 github에 올린 humanoid.xml file은 tennis racket에 대한 링크가 존재하지 않았다. 논문에는 어떤식으로 tennis racket 링크를 붙였는지 나와있었지만 정확한 dimension은 나와있지 않았다. 혹시나 하는 마음에 주절주절 메일을 보내보았더니 기존 humanoid.xml file을 어떻게 바꾸셨는지 친절하게 답변을 주셨다!!
메일에서 보내주신 내용을 토대로 humanoid_tennis.xml을 구성하고 ASE에서 사용하는 자료구조에 맞게 T-pose를 뽑았다.

humanoid.xml과 비교했을 때 humanoid_tennis.xml의 달라진 점
1. 3개의 DoF가 추가 됌 : right hand에 wrist spherical joint 추가
2. tennis racket link 추가

T-pose of humanoid_tennis

Retarget the motion

Joint mapping

ASE의 retarget_motion.py에 나와있는 설명을 토대로 Tennisman2Humanoid_tennis에 대한 Config file을 작성하여, 모션을 retargeting함!

  • 이 때, Humanoid_tennis의 joint에 mapping될 Tennisman의 key joint가 필요하여 이에 대해 Dictionary 구성함.

    {key:value} = {source skeleton joint name: target skeleton joint name}

Root rotation

- source skeleton과 target skeleton의 T-pose가 같은 방향을 바라보고 있지 않았기 때문에, source skeleton의 root를 x축으로 90도 rotation 시켜줌

Result

결과 모션 중 일부 캡처

Forehand swing of humanoid_tennis

IsaacGym visualization

(감격ㅠㅠ 이제 시작이드아..)

1개의 댓글

comment-user-thumbnail
2024년 1월 15일

안녕하세요 글 잘봤습니다.

Isaacgym visualization 부분은 어떻게 진행하셨는지 알 수 있을까요? 따로 코드를 작성하신건지 궁금합니다!

답글 달기