Docker

Docker는 애플리케이션을 전체 사용자 공간 환경 — OS 라이브러리, 컴파일러, Python 버전, CUDA 툴킷 — 과 함께 어떤 Linux 호스트에서도 동일하게 실행되는 컨테이너 이미지로 패키징한다. SLAM 작업에서 이는 이 분야에서 가장 흔한 실용적 고충 — 특정한 Ubuntu, OpenCV, Eigen, Ceres, ROS 버전 조합에서만 빌드되는 연구 코드 — 를 해결해 준다.

전형적인 SLAM Dockerfile은 정확히 그 조합을 고정한다.

FROM ros:humble
RUN apt-get update && apt-get install -y \
    libeigen3-dev libopencv-dev libceres-dev \
 && rm -rf /var/lib/apt/lists/*
COPY . /ws/src/my_slam
RUN cd /ws && . /opt/ros/humble/setup.sh && colcon build

그리고 전형적인 개발용 run 호출은 앞으로 필요할 대부분의 플래그를 조합한다.

docker build -t my_slam .
docker run -it --rm \
  --gpus all \                              # NVIDIA Container Toolkit: 컨테이너 안에서 GPU 사용
  -v ~/data:/data \                         # 데이터셋은 호스트에 존재
  -v $(pwd):/ws/src/my_slam \               # 호스트에서 소스를 실시간 편집
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \        # 시각화 도구를 위한 X11 포워딩
  --network host \                          # 호스트/컨테이너 간 ROS 디스커버리
  my_slam bash

익숙해져야 할 핵심 개념들:

기본을 넘어서

실제로 거의 모든 진지한 오픈소스 SLAM 저장소는 이제 Dockerfile을 제공하며, 논문의 결과를 재현하는 작업은 보통 docker build로 시작한다. Docker는 SLAM을 대규모로 평가하는 방식이기도 하다: CI 파이프라인은 컨테이너 내부에서 데이터셋 벤치마크를 실행하고, 로봇들은 깔끔한 업데이트와 롤백을 위해 인식 스택을 컨테이너로 배포하는 경우가 점점 늘고 있다.

흔한 함정

SLAM에서의 의미

SLAM 시스템은 프로젝트 간에 충돌하는 특정 OpenCV/Eigen/Ceres/ROS 버전 등 유명하게 무겁고 취약한 의존성 스택을 가지고 있다. Docker를 사용하면 ORB-SLAM3, VINS-Fusion, PyTorch 기반 프론트엔드를 한 기기에서 의존성 충돌 없이 유지할 수 있고, 자신의 연구를 다른 사람이 재현할 수 있게 만들며, CI 벤치마킹과 실제 로봇 배포 모두를 위한 표준 패키징 단위가 된다.

관련 문서