맨땅에 헤딩 모션캡쳐 #4: RGB? IMU?

나용수·2021년 5월 20일
0

자 이제 모션캡쳐를 직접 해보자!

근데.. 어떻게? 나는 정말 무턱대고 시작하기로 결정했다.

모션캡쳐 하는 방법들을 대략적으로 알아봤었는데, 돈이 어지간히 드는 게 아니다.

일단 당시의 나는 무조건 카메라로 해야할 것 같은 생각이 들었고, 적외선 카메라를 딱히 팔지 않았다. 정확하게는 쓸만한 수준이면서 적당한 가격의 적외선 카메라를 발견하지 못했다. 그래서 이걸 어떻게 해야 하나 고민하다가 다음과 같은 계획을 세웠다.

  1. 싼 RGB 카메라를 찾는다. 요즘 뭐 파이카메라는 뭐든 많지 않겠나.. 그런 걸 10대 정도 구매한다.
  2. 컬러 스티로폼 공을 구매한다. RGB계열의 강한 원색을 마커로 사용하면 RGB카메라에서도 잘 인식하게 알고리즘을 짤 수 있을 것 같았다.
    • 나중에 안 사실인데, 실제로 그렇게 많이 하더라.
  3. 종래의 적당한 캘리브레이션 방법을 잘 활용하여 모션캡쳐를 어떻게든 한다!

카메라 구하기

나는 최소한 720p/240fps 사양의 카메라를 구하길 원했다. 그리고 요즘 세상에 그런 카메라는 정말 흔하다.

문제는 카메라가 10대 정도 필요하다는 것이었다. 그냥 카메라 대당 20~30만원이라 생각해도 10대면 가격이 정말 무시무시하다.

일단 파이 카메라를 처음 떠올렸는데, 파이카메라를 사용하기 위해 필요한 프로세서(라즈베리파이)와 전원, 하우징 등의 가격을 생각하니 영 아닌 것 같아 포기했다.

꽤 괜찮은 솔루션은 핸드폰을 대여하는 것이었다. 핸드폰 대여 S7급 정도 되면 하루에 4,000원에 대여할 수 있다. 단가 조금만 더 올리면 120fps 촬영이 가능한 디바이스가 있었고, 테스트로 몇 대를 대여해봤다.

근데 심각한 문제가 있었다. 폰 카메라는 왜곡이 진짜 정말 엄청나게 심하다.

렌즈에 의한 왜곡도 있었는데, 이를 처리해서 저장되는 영상 자체도 뜬금없이 특정 부분이 죽 늘어진다거나 하는 현상이 종종 일어났다.

전자의 왜곡은 수학적 모델로 보정이 가능하지만, 조사해 본 결과 폰 카메라에서 나타는 종류의 왜곡은 보정하기 특히 어려운 종류의 왜곡이었다. 그리고 후자의 왜곡의 경우는 보정이 불가능한 왜곡이었다.

정확한 '측정'을 해야 하는 상황에서 이런 왜곡의 변수는 최대한 줄이는 게 좋았고, 폰 카메라는 최후의 차악 방법 정도로 keep해두기로 했다.

이 카메라 문제는 해결하기가 참 어려워서, 일단 내 수중에 있는 카메라를 활용하기로 했다. 마침 내게 Intel RealSense D415 카메라가 서너대 있어서 이를 활용하기로 했다. 이 카메라가 Depth 센서도 있어서 모션캡쳐에 도움될 것 같았다.

컬러 스티로폼 공


별 거 없다. 인터넷에 검색해서 구매했다.

시도해보니...

일단 marker detection의 단계로 넘어가고 뭐고 그냥 카메라의 물리적 스펙이 부족했다.

Intel RealSense로 모션을 촬영해봤는데, RGB 센서는 60fps, Depth 센서는 120fps가 최대이기에 모션 블러 현상이 너무 심했다.

카메라에 대해 조금 아시는 분들은 Shutter Speed에 대해 아실 거다. 빛의 노출량을 결정하는 요소 중 하나인데, 수광 센서가 입력 받기 시작한 순간부터 물리적으로 수광센서로의 빛을 차단하는 데 까지 걸리는 속도이다.

이 속도가 느리면 움직이는 물체의 자취가 그 시간만큼 수광 센서에 입력되고, 모션 블러 현상이 일어나는 것이다.

하필이면 또 Intel RealSense D415모델은 Rolling Shutter모델이라 그 모션 블러의 수준이 더 심했다.

롤링 셔터는 글로벌 셔터와 다르게 빛을 global하게 차단하지 않고 특정 부분부터 점차 차단하는 것이기에 빠르게 움직이는 물체에 대해 온갖 다양한 왜곡 효과를 일으킨다.

도저히 Intel RealSense는 쓸 수 없다는 생각이 들었고, 폰 카메라로도 시험해봤다.

120fps 촬영을 지원하는 폰 카메라로도 모션을 촬영해 봤는데, 진짜 상상 이상으로 120fps은 느린 속도였다는 걸 깨달았다. 120fps도 모션 블러가 눈에 보일 정도로 발생한다.

결국 최소 240fps는 되어야 할 것 같았고, 그것도 찍어봐야 알지 그 이상의 프레임이 필요할 수도 있었다.

VICON같은 회사의 제품은 수백 fps를 내는 것을 보니 240fps로도 힘들 것 같았다.

결국 RGB 방식은 좀 더 고가의 카메라가 여러대 필요할 것 같아 포기했다. RGB 방식이니 고화질이어야 하고, frame rate가 최소 240fps이며, 렌즈 왜곡이 거의 없어야 하는 까다로운 조건을 만족하려니 엥간 자본으론 어려울 듯 했다....

대안: IMU 기반 방식

도대체 어떻게 해야 하나... 고민이 많았는데, 내가 아는 전자 계열 전공의 친구가 IMU를 써보라고 조언해줬다.

오! 나쁘지 않은데. 한 번 해보자는 생각으로 찾아봤다.

찾아보니 IMU 역시 널리 쓰이는 모션 캡쳐 방법론 중 하나였다.

이 방식의 장점은 다음과 같다.

  • 저비용: 시계열적으로 동일한 해상도를 얻기 위해 투자되는 비용이 적다. 1000fps 정도의 720p 카메라의 가격과 1000Hz의 IMU 센서의 가격 차이를 생각하면 편하다.
  • 장소 선정의 자유: 광학 방식의 경우 세밀하게 calibrated된 환경에서 진행되어야 한다. 즉, 스튜디오(부동산)가 따로 있어야 한다는 뜻이다. 반면 IMU 기반 방식은 야외에서도 recording이 가능하다는 장점이 있다.
  • 정보 식별의 용이성: 광학 방식 중 passive-marker based 방식의 경우 marker identification 과정이 필요하다. 이때 카메라 view에서 두 마커가 겹치면 식별이 어려워지는 경우가 발생한다. 반면 IMU방식은 어떤 신호가 왼쪽 팔목, 오른쪽 종아리 등 식별이 가능하다는 장점이 있다.

단점은 다음과 같다.

  • only 방향 정보: IMU 센서는 방향을 알려주지 뼈의 길이는 알려주지 않는다. 어깨와 팔꿈치 중간에 센서를 부착한다고 했을 때, 뼈의 방향 변화는 알려주지면 그 뼈의 길이는 모르기에 팔꿈치 관절의 위치를 구체적으로 알기 어렵다. 이 경우 뼈의 길이를 직접적으로 측정해야 한다.
  • draft 문제: IMU 센서는 오차가 누적되는 특성이 있다. 이를 draft 현상이라고 하는데, 해결하기 매우 어려운 문제이다.
  • 회로 설계: 전자 제품을 다루는 것이므로 회로에 관한 지식이 필요하며, 센서 부착 위치에 따라 전력 공급이나 프로세서 배치 등의 문제는 관련 분야의 전문 지식을 필요로 한다.

사실상 draft 현상과 회로를 설계하고 직접 개발하여 사용하는 어려움은 광학 방식에 비해 낮다고 말하기 어렵다.

그러면 이걸 어떻게 할 수 있을까?

전자과를 다니는 친구의 조언을 받아 다음과 같은 부품들이 필요할 것이라고 정리했다.

  • 6축 가속도, 자이로 센서
  • 블루투스 모듈
  • 리튬 배터리 충전 모듈
  • 아두이노 나노
  • 기타 스위치, 전선, 기판 등의 도구들

그래서 디바이스마트에서 수배를 하고 헤헤 히히 호호하면서 구매 버튼을 누르기 직전의 상황이었는데!
갑자기 센서 사이의 싱크는 어떻게 맞추지? 라는 생각이 들었다.

카메라의 경우 우리가 흔히 방송에서 보는 슬레이트를 통해 싱크를 맞출 수 있다. 이 경우 완벽하지는 않더라도 납득할 만한 오차로 촬영을 진행할 수 있다.

근데 무선 통신으로 프로세서마다 데이터를 받아올 경우 각 프로세서에서 취합해서 얻는 정보의 싱크를 맞출 수가 없게 된다. latency가 일정하다는 보장이 없는 게 가장 큰 문제였다.

VR Full Tracker 같은 경우 어떻게 해결하나 생각해보았는데, real-time한 도구이기에 굳이 싱크를 맞출 필요 없이 개별 장비마다 실시간으로 PC에 데이터를 전송하면 그만이라는 생각이 들었다.

결국 납득할 만한 오차의 싱크로 전신의 데이터를 수집하기 위해서는, 모든 장비들이 유선으로 연결될 필요가 있었다.

처음엔 그냥 적당히 연결하면 될 거라 생각해서 아무 생각 없이 전선과 함께 필요한 부품을 주문했다. 근데 갑자기 조언해주던 전자과 친구가 전화와서 생각보다 어려울 것이라고, 이런 저런 얘기를 하더라. 사실 이제는 잘 기억도 안나서 요약하자면, 프로토콜 문제로 수십대의 아두이노가 통신하는 데 문제가 생길 수도 있다는 것이었다.

나는 관련 전공자가 아니기에 '음. 안되는 것이군!'이라 생각했고, 또 관련하여 공부하면서 의외로 draft문제를 해결하기가 어렵다는 걸 인지했다. 이런 배경에서 점차 나는, 마치 panic sell을 하듯 귀찮음과 두려움에 IMU 방식을 때려치기로 했다.

물론 여러가지 원인이 더 있다. 실제 현업에서 정석적으로 쓰이는 방식은 IR passive marker based 광학 방식이었는데, 괜히 내가 정석을 버리고 쓸데없이 돌아가서 이런 고민이 생긴다는 생각이 들었다.

또 다른 이유는, 광학 방식을 포기한 이유가 적당한 카메라를 찾지 못해서였는데 IMU 방식에 대해 고민하는 도중 아주 적절한 카메라를 발견했기 때문이다.

결과적으로 충분하지 못한 사전조사로 인해 여러가지 방황을 했고, 나는 정석적인 방식을 채택하기로 하였다.

따라서 본 포스트까지는 본격적으로 부품을 구매해 모션캡쳐를 시도하기 이전까지의 여정을 주절주절 막 써 놓은 것이고, 다음 포스트부터는 내가 어떤 부품을 구매하고 어떻게 촬영을 진행했으며 데이터 처리를 어떻게 했는지를 조금 시간을 들여 제대로 적어볼 것이다.

간단하게(?) 요약하자면,
1. 장비: 값 싼 카메라를 100만원어치 주문했으며(제조사에 문의해 적외선용으로 개조했다), IR 마커를 100만원어치 구매했고, 기타 삼각대와 성능 좋은(중요) PC를 여러대 준비했다.
2. 여러가지 몸을 쓰는 작업을 통해 환경을 준비하고 댄스 연습실을 빌려 모션캡쳐 촬영했다.
3. 이후 opencv-python을 이용하여 온갖 후처리와 initial calibration, 그리고 scipy 패키지를 통한 least-square optimization 프로세스로 최종적인 bundle-adjustment를 진행했고, 이를 기반으로 motion data를 추출해냈다.

그리고 내가 글 재주가 없어 지금까지의 포스트들이 엉망진창이지만... 다음 글부터는 좀 제대로 적어야겠다는 생각이 든다.

profile
컴퓨터에 관심 많은 산업공학과 학부생. 슬프게도 지금은 대한민국 육군에서 복무 중입니다.

0개의 댓글