LED 모션캡처 드론 연구
1차 구현
← LED 모션캡처 드론 연구로 돌아가기

4카메라 모션캡처 시스템 1차 구현

드론 경로 추정을 위한 첫 단계로, Jetson Orin Nano에 카메라 4대를 연결하고 촬영부터 위치 추적까지 실행할 수 있는 웹앱을 제작했습니다. JetPack과 카메라 드라이버를 직접 설치해 동기화된 영상을 받아오는 환경을 구축한 뒤, 영상 확인·캘리브레이션·원점 설정·추적 기능을 연결했습니다. 체커보드를 움직이면 네 카메라의 관측을 바탕으로 이동 경로가 3차원 화면에 표시됩니다.

주요 기능

Viewer로 네 영상 확인 → Calibration으로 카메라 보정 → World Origin으로 기준점 설정 → Tracking으로 이동 경로 표시

체커보드를 움직이며 네 카메라의 관측으로 이동 경로가 3차원 화면에 표시되는 초기 구현 데모입니다. YouTube에서 보기 ↗

1. 카메라 연결과 네 가지 기능 구현

첫 번째 단계의 목표는 실제 카메라를 연결한 장치에서 보정과 추적을 반복할 수 있는 실험 환경을 만드는 것이었습니다. Jetson을 켜고 같은 Wi-Fi의 PC에서 웹앱을 열면, 네 카메라의 영상을 확인하고 보정한 다음 기준 위치를 정해 추적을 시작하는 흐름입니다. 장비 준비와 프로그램 사용 절차를 이 흐름에 맞춰 구성했습니다.

먼저 Jetson의 운영 환경과 카메라 드라이버를 설치하고 네 영상이 함께 들어오는지 확인했습니다. 이후 각 카메라의 렌즈와 배치 차이를 보정하는 기능, 실험 공간의 기준점을 정하는 기능, 표적을 움직이며 경로를 확인하는 기능을 순서대로 구현했습니다. 이 단계의 표적으로는 크기와 모서리 위치가 일정한 체커보드를 사용했습니다. 같은 패턴으로 카메라 보정부터 이동 경로 확인까지 이어갈 수 있기 때문입니다.

  1. Viewer동기화된 네 카메라 영상을 한 화면에서 확인하고 촬영 밝기를 조절합니다.
  2. Calibration체커보드를 여러 위치에서 촬영해 네 카메라의 보정값을 구하고 저장합니다.
  3. World Origin기준 위치에 둔 체커보드로 실험 공간의 원점과 방향을 정합니다.
  4. Tracking체커보드의 움직임을 추적하고 이동 경로를 3차원 화면에 표시합니다.

2. 장비 선택과 Jetson 실행 환경 구축

동기화 촬영과 Jetson 호환성을 갖춘 쿼드 카메라

연산 장치로 Jetson Orin Nano 개발 키트를 사용하고, 카메라는 Arducam B0267 OV9281 쿼드 카메라 키트를 연결했습니다. 이 키트는 흑백 글로벌 셔터 카메라 4대와 CamArray HAT로 구성되며, 네 카메라를 동기화해 같은 순간의 장면을 촬영합니다. 움직이는 표적을 여러 방향에서 함께 관측하기에 적합하고, Jetson용 드라이버와 연결 방법이 제공되어 이 구성을 사용했습니다. Arducam의 쿼드 카메라 안내에서도 기본 동작을 동기화된 4채널 모드로 설명합니다.

카메라 한 대의 영상 크기는 1280×800입니다. 네 카메라의 흑백 영상이 동기화되어 Jetson으로 들어오며, 프로그램은 이를 카메라별 화면으로 보여줍니다. 현재 장치의 카메라 입력은 8비트 흑백·45FPS로 설정했습니다. 장비는 하나의 프레임에 고정해 카메라 사이의 위치를 유지하고, 가운데 Jetson과 CamArray HAT에 네 카메라를 연결했습니다.

프레임 네 모서리에 고정한 OV9281 카메라와 가운데 Jetson 및 CamArray HAT
Jetson Orin Nano와 OV9281 카메라 4대를 연결한 실험 장치입니다.

JetPack 설치부터 카메라 드라이버 적용까지

장비 준비는 Jetson에 운영체제를 설치하는 것부터 시작했습니다. NVIDIA의 JetPack 6.2.1 microSD 이미지를 카드에 기록하고, 보드 펌웨어와 부팅 환경을 준비한 뒤 Ubuntu 초기 설정을 진행했습니다. 이후 JetPack 6.2.2로 업데이트해 카메라 프로그램을 실행할 환경을 갖췄습니다. NVIDIA의 JetPack 6.2.2 설치 안내가 제시하는 SD 이미지 설치와 업데이트 순서를 따른 구성입니다.

설치를 준비한 Jetson Orin Nano 개발 키트
Jetson 펌웨어 업데이트 화면
Jetson에 설치한 Ubuntu 데스크톱과 개발 터미널

카메라 드라이버는 Jetson의 운영체제와 커널 버전에 맞춰 설치했습니다. Arducam의 Orin Nano 지원표에서 Jetvariety 카메라의 L4T 36.5.0 지원과 CAM1 연결 조건을 확인하고, JetPack 6.2.2 환경에 맞는 공식 드라이버를 적용했습니다. 설치 프로그램은 Arducam이 제공하는 install_full.sh이며, OV9281 키트에 해당하는 -m arducam 옵션을 사용했습니다.

설치 과정에서는 드라이버가 실제 실행 중인 커널에 들어갔는지 확인하고, 패키지의 이전 커널 경로를 현재 환경에 맞춰 수정했습니다. 재부팅 후 드라이버가 정상적으로 로드되는 것을 확인한 다음, CAM1 포트의 케이블 방향과 전원 연결을 점검해 카메라 인식까지 마쳤습니다. 카메라를 사용할 수 있는 상태가 된 뒤에는 네 영상이 동시에 갱신되는지와 각 화면이 어느 카메라에 대응하는지를 확인했습니다.

항목구축한 환경
연산 장치Jetson Orin Nano 개발 키트
운영 환경Ubuntu 22.04.5 LTS · JetPack 6.2.2 · Jetson Linux 36.5.0
커널5.15.185-tegra
카메라 드라이버Arducam Jetvariety · arducam-nvidia-l4t-kernel (5.15.185 / 36.5.0용)
카메라 연결OV9281 4대 + CamArray HAT · Jetson CAM1 포트
카메라 입력 설정1280×800 × 4대 · 동기화 흑백 영상 · 45FPS

이 과정으로 장비 부팅, 드라이버 로딩, 카메라 입력까지 이어지는 기반을 갖췄습니다. 그 위에 웹앱을 실행해 같은 Wi-Fi에 연결된 PC에서 장비를 확인하고 보정과 추적을 진행할 수 있도록 구성했습니다.

3. Viewer: 네 카메라 영상을 웹에서 확인

Viewer는 장비 연결 상태와 촬영 장면을 확인하는 첫 화면입니다. Jetson이 받아온 동기화된 네 영상을 카메라별로 배치해, 어느 방향에서 표적이 보이는지 한눈에 확인할 수 있도록 만들었습니다. PC나 스마트폰을 Jetson과 같은 Wi-Fi에 연결하고 웹앱 주소를 열면 실시간 영상을 볼 수 있습니다.

실제 촬영에서는 표적이 선명하게 보이도록 밝기를 맞추는 작업도 필요했습니다. Viewer에 노출 조절 기능을 넣어 네 카메라의 밝기를 함께 바꿀 수 있게 했습니다. 카메라 연결을 확인하고 체커보드가 잘 보이도록 조절한 뒤 Calibration으로 넘어가는 순서입니다.

동기화된 흑백 영상 네 개와 카메라 상태 및 밝기 조절 기능을 제공하는 Viewer
동기화된 네 카메라 영상을 나란히 배치한 Viewer입니다. 화면은 초기 구동 단계의 촬영 기록입니다.

장비 옆에서 표적을 움직이면서도 다른 기기의 브라우저로 네 영상을 볼 수 있어, 카메라 방향과 표적 위치를 맞추는 작업을 한 화면에서 진행할 수 있습니다. Viewer를 공통 진입점으로 두고 이후 보정·원점 설정·추적 화면에서도 같은 카메라 영상을 확인하도록 구성했습니다.

4. Calibration: 네 카메라를 함께 사용하기 위한 보정

네 카메라가 같은 표적을 보더라도 렌즈 특성과 설치 위치에 따라 영상에 나타나는 모양이 달라집니다. Calibration은 이 차이를 구해, 네 카메라의 관측을 하나의 위치 추정에 사용할 수 있도록 준비하는 기능입니다. 보정에 필요한 촬영부터 계산과 저장까지 웹앱 안에서 진행하도록 구현했습니다.

촬영에는 가로 8개·세로 3개의 내부 코너가 있는 체커보드를 사용했습니다. 칸 간격은 23mm로 설정하고, 보드를 카메라 앞에서 좌우·위아래로 옮기거나 기울이며 여러 모습을 수집했습니다. 화면의 다양한 위치를 촬영하면 렌즈의 특성과 카메라 사이의 배치를 구하는 데 필요한 관측을 확보할 수 있습니다.

네 카메라 미리보기와 체커보드 촬영 진행 상태를 보여주는 Calibration 화면
체커보드를 촬영해 12세트의 보정 샘플을 모은 화면입니다. 촬영 진행 상태를 확인한 뒤 보정 계산을 실행합니다.

앱에서는 체커보드가 검출되는지와 샘플이 얼마나 모였는지 확인할 수 있습니다. 수집을 마치면 보정값을 계산하고 결과를 적용·저장합니다. 저장한 보정값을 다음 실행에서 불러오도록 구성해, 같은 카메라 배치에서 원점 설정과 추적 실험을 이어갈 수 있게 했습니다. 이 기능으로 카메라 네 대가 하나의 측위 장치로 동작할 준비를 마칩니다.

5. World Origin: 실험 공간의 기준점 설정

보정이 끝난 다음에는 이동 경로를 어디서부터 표시할지 정해야 합니다. World Origin은 실험 공간에서 기준으로 삼을 위치를 지정하는 기능입니다. 체커보드를 원하는 기준 위치에 두고 원점을 설정하면, 이후 움직임을 그 위치로부터 얼마나 이동했는지로 확인할 수 있습니다.

설정 화면에서는 네 카메라에 체커보드가 보이는 상태를 확인한 뒤 기준 위치를 촬영합니다. 여러 관측을 모아 원점 후보를 만들고, 촬영한 화면과 함께 저장하도록 구성했습니다. 사용자는 저장된 후보를 살펴보고 사용할 원점을 적용할 수 있습니다. 기준을 다시 정할 때도 같은 화면에서 촬영과 선택을 진행합니다.

기준 위치의 촬영 화면과 저장된 원점 후보를 확인하는 World Origin 화면
기준 위치를 촬영하고 저장된 후보를 선택하는 World Origin 화면입니다.

원점을 정하는 과정을 따로 둔 이유는 카메라 보정과 실험의 시작 위치가 서로 다른 역할을 하기 때문입니다. 카메라 보정으로 장치의 배치를 파악하고, 원점 설정으로 이번 실험에서 사용할 기준 위치를 정합니다. 이렇게 준비한 기준을 Tracking 화면의 3차원 경로에 그대로 사용합니다.

6. Tracking: 체커보드의 움직임을 3차원 경로로 표시

Tracking에서는 보정값과 원점을 적용한 상태로 체커보드를 움직이며 이동 경로를 확인합니다. 네 카메라에 보이는 같은 표적의 위치를 함께 이용해 공간상의 위치를 추정하고, 시간에 따라 이어지는 움직임을 화면에 표시합니다. 카메라 영상에서 보이던 움직임을 실험 공간의 경로로 확인하는 단계입니다.

화면 왼쪽에는 네 카메라 영상을, 오른쪽에는 3차원 궤적을 배치했습니다. 표적을 어느 방향으로 움직였는지 영상과 경로를 함께 비교할 수 있고, 궤적 화면을 회전하거나 확대해 이동한 모양을 살펴볼 수 있습니다. 추적 상태도 함께 표시해 표적이 현재 관측되고 있는지 확인할 수 있도록 했습니다.

왼쪽 네 카메라 영상과 오른쪽 체커보드의 누적 이동 경로를 표시한 Tracking 화면
네 카메라 영상과 누적 이동 경로를 함께 표시한 Tracking 화면입니다. 사진은 표적이 화면을 벗어난 뒤 기존 궤적이 남아 있는 상태입니다.

첫 번째 단계에서는 Jetson의 실행 환경과 동기화 카메라 입력을 준비하고, 네 가지 기능을 하나의 웹앱으로 연결했습니다. 장비를 켠 뒤 영상 확인부터 보정·원점 설정·추적까지 진행할 수 있는 실험 기반입니다. 다음 단계에서는 이 기반을 IR LED 마커 추적과 기준 장비를 이용한 위치 검증으로 확장할 계획입니다.

by jy