Open3D 개요

[Open3D Tutorial] visualize point cloud

[Open3D Tutorial] voxel downsampling

[Open3D Tutorial] vertex normal estimation

[Open3D Tutorial] point cloud distance

[Open3D Tutorial] bounding volumes

[Open3D Tutorial] convex hull

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | \\
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \\
  "deb [arch=$(dpkg --print-architecture) \\
  signed-by=/etc/apt/keyrings/docker.gpg] \\
  <https://download.docker.com/linux/ubuntu> \\
  $(lsb_release -cs) stable" | \\
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker
# =====================================================
# CUDA 12.1 + Ubuntu 22.04 기반 연구용 GPU 환경
#  - Open3D (GPU)
#  - COLMAP (CUDA 빌드)
#  - ROS2 Humble + 자동 환경 설정
# =====================================================
FROM nvidia/cuda:12.1.1-devel-ubuntu22.04

ENV DEBIAN_FRONTEND=noninteractive \\
    TZ=Asia/Seoul \\
    LANG=en_US.UTF-8 \\
    LC_ALL=en_US.UTF-8 \\
    PIP_DISABLE_PIP_VERSION_CHECK=1 \\
    PYTHONDONTWRITEBYTECODE=1 \\
    PYTHONUNBUFFERED=1

# -----------------------------------------------------
# 시스템 기본 패키지
# -----------------------------------------------------
RUN sed -i 's|archive.ubuntu.com|kr.archive.ubuntu.com|g' /etc/apt/sources.list || true && \\
    apt-get update && apt-get install -y --no-install-recommends \\
    python3 python3-pip python3-dev python3-venv \\
    git git-lfs cmake ninja-build g++ wget unzip curl \\
    tzdata locales lsb-release gnupg2 \\
    libgl1 libx11-6 libglib2.0-0 libgtk-3-0 libdbus-1-3 xauth \\
    libboost-all-dev libgoogle-glog-dev libgflags-dev \\
    libatlas-base-dev libsuitesparse-dev libfreeimage-dev ffmpeg && \\
    rm -rf /var/lib/apt/lists/* && \\
    locale-gen en_US.UTF-8 && update-locale LANG=en_US.UTF-8

# -----------------------------------------------------
# ROS2 Humble 설치
#  (컨테이너 내에선 apt-key 경고 무시 가능)
# -----------------------------------------------------
RUN curl -sSL <https://raw.githubusercontent.com/ros/rosdistro/master/ros.key> | apt-key add - && \\
    echo "deb [arch=$(dpkg --print-architecture)] <http://packages.ros.org/ros2/ubuntu> $(lsb_release -cs) main" \\
    | tee /etc/apt/sources.list.d/ros2.list > /dev/null && \\
    apt-get update && apt-get install -y --no-install-recommends \\
    ros-humble-desktop python3-colcon-common-extensions && \\
    rm -rf /var/lib/apt/lists/*

# -----------------------------------------------------
# Python 패키지 (GPU) — venv로 시스템 파이썬과 분리
# -----------------------------------------------------
# venv 생성 및 활성화를 위해 PATH 설정
RUN python3 -m venv /opt/venv
ENV PATH=/opt/venv/bin:$PATH

# 일반 패키지 먼저(Python 기본 인덱스), Torch는 별도 인덱스
RUN pip install --upgrade pip && \\
    pip install \\
        numpy==2.1.3 opencv-python-headless==4.10.0.84 tqdm matplotlib scipy open3d==0.19.0 && \\
    pip install \\
        torch torchvision torchaudio --index-url <https://download.pytorch.org/whl/cu121> && \\
    pip cache purge

# -----------------------------------------------------

# ROS2 환경 자동 로드 설정
# -----------------------------------------------------
RUN echo "source /opt/ros/humble/setup.bash" >> /etc/bash.bashrc && \\
    echo "export RMW_IMPLEMENTATION=rmw_fastrtps_cpp" >> /etc/bash.bashrc && \\
    echo "export ROS_DOMAIN_ID=0" >> /etc/bash.bashrc && \\
    echo "export ROS_LOCALHOST_ONLY=0" >> /etc/bash.bashrc

# -----------------------------------------------------
# 기본 작업 디렉토리
# -----------------------------------------------------
WORKDIR /work

# -----------------------------------------------------
# 테스트 스크립트
# -----------------------------------------------------
COPY <<'PY' /work/test_env.py
import os, subprocess, torch
import open3d as o3d
print("CUDA available:", torch.cuda.is_available())
print("Torch:", torch.__version__, "| CUDA:", torch.version.cuda)
print("Open3D:", o3d.__version__)
print("ROS2 sourced:", os.environ.get("ROS_VERSION", "Not loaded"))
subprocess.run(["colmap", "--help"])
PY

CMD ["bash"]
	

docker build -t open3d_test .
sudo apt update
sudo apt install -y ubuntu-drivers-common
ubuntu-drivers devices         # 추천 드라이버 확인
sudo ubuntu-drivers auto install
sudo reboot
curl -fsSL <https://nvidia.github.io/libnvidia-container/gpgkey> | \\
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

# 레포 등록 (signed-by 포함)
curl -s -L <https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list> | \\
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#' | \\
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt update
sudo apt install -y nvidia-container-toolkit

# 도커 런타임 연결
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

xhost +local:root
docker run -it --gpus all --name open3d_dev \\
  --shm-size=16g \\
  -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 \\
  -v /tmp/.X11-unix:/tmp/.X11-unix \\
  -v ~/Downloads/picture:/work \\
  open3d_test bash
  
  docker exec -it open3d_dev bash