RGBD GS-ICP SLAM

3 분 소요

1. Introduction

RGBD GS-ICP SLAM으로, 3D Gaussian Splatting을 기반으로 한 실시간 SLAM 시스템

2. Algorithm

3. Code review

torch.multiprocessing.set_sharing_strategy('file_system')

4. System Setup

4.1 가상환경의 구축

회사에서 실행할 것을 고려하여, Miniconda로 하려 한다.

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

source ~/.bashrc

이제 conda 가상환경을 만들어보자.

conda create -n gsicpslam python=3.9 -y
conda activate gsicpslam

PyTorch와 CUDA 설정이 필요하므로, 관련 설정을 진행한다. 내 컴퓨터의 CUDA 버전은 12.8이다.

(gsicpslam) user:~$ nvidia-smi
Tue Jul  1 20:35:12 2025       
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.133.07             Driver Version: 570.133.07     CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 4060 ...    Off |   00000000:01:00.0  On |                  N/A |
| N/A   40C    P8              4W /   80W |      48MiB /   8188MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            1937      G   /usr/bin/gnome-shell                      2MiB |
+-----------------------------------------------------------------------------------------+
conda install pytorch=2.2.2 torchvision=0.17.2 torchaudio=2.2.2 pytorch-cuda=12.1 -c pytorch -c nvidia

버전 추천은 ChatGPT의 도움을 받았다. (만세)

4.2. Git Clone 그리고 나머지 설치

주 코드를 받아보자.

git clone https://github.com/Lab-of-AI-and‑Robotics/GS_ICP_SLAM.git --recursive
cd GS_ICP_SLAM
conda install -c conda-forge pcl   #PCL의 설치

이후 Sub module도 설치가 필요한데, 내 경우는 두어가지 오류가 발생했다.

1) Numpy 오류

A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0.1 ...

이 오류는 Numpy버전 문제였다. 일단 아래방법으로 해보니 해결은 된다.

pip install "numpy<2"

버전을 다운그레이드해야 하나..

2) CUDA 패스 문제

OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root.

CUDA경로가 설정되어있지 않아 설치가 필요했다.

export CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

3) Nvidia-Cuda-Toolkit

error: [Errno 2] No such file or directory: '/usr/local/cuda/bin/nvcc'

컴퓨터를 포맷하고 다시 깐 경우다보니, 툴킷이 설치되어있지 않았다.
이 에러는 툴킷을 설치하는 걸로 해결했다. 의외로 용량이 많다.

sudo apt install nvidia-cuda-toolkit

4) Ninja (옵션)

ChatGPT의 추천 옵션이다. 빌드 속도를 올려준다고 한다. 별 문제 없다면 일단 한번은 설치해도 좋을듯하다.

pip install ninja

5) 계속되는 오류 트러블 슈트

CUDA 12.1 에 코드가 맞춰져있어 오류가 이어지고 있다.

ChatGPT의 도움을 받아 아래의 코드를 수행하면 된다. 첫줄 pip 시작할때 git clone 한 위치임을 확인하자.

pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn

cd submodules/fast_gicp
mkdir build
cd build
cmake ..
make
cd ..
python setup.py install --user

4.3. 데이터셋의 설치

이거 오래 걸리네…..ㅡㅡ;;;; 12기가구만. 이거라도 미리 눌러둘걸.

git clone 폴더에 bash 파일이 있다.

bash download_replica.sh

폴더 구조를 보면

./dataset/
└── Replica
    ├── depth_images
    ├── images
    ├── office0
    │   └── results
    ├── office1
    │   └── results
    ├── office2
    │   └── results
    ├── office3
    │   └── results
    ├── office4
    │   └── results
    ├── room0
    │   ├── depth_images
    │   └── images
    ├── room1
    │   └── results
    └── room2
        └── results

뭐 이런 식이다. 위의 room0의 result 폴더에 이미지가 있는데, 하나는 frame000000.jpg 형태이고 또 하나는 depth000000.png 형태로 저장되어있는데, 이걸 저 폴더이름대로 imgages와 depth_images로 나누자.

result폴더안에 있으면 오류나니까, 한 층 위로 올려야 한다. 에러가 많다.

일을 좀 수월하게 해보자. bash파일을 만들기엔 이미 늦었고..ㅜㅠ……그냥 인라인 코드정도만 작성해보자.

mkdir -p images depth_images && mv frame*.jpg images/ && mv depth*.png depth_images/

mv ./images ../ && mv ./depth_images ../ 

4.4 Installing SIBR Viewer

SIBR Viewer 은 3D 렌더링결과를 보기 위한 뷰어다… 일단 그렇게 알고 넘어가자. 설치하다보면 이것저것 더 깔아야 할 것 들이 많다.

cd SIBR_viewers
cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release
cmake --build build -j24 --target install

4. 5. 추가적인 troubleshoot

dependency 문제로 인해 /submodules/fast-gicp/CMakeLists.txt에 아래 코드를 추가 해야 한다.

install(TARGETS fast_gicp
  EXPORT fast_gicp
  LIBRARY DESTINATION lib
  ARCHIVE DESTINATION lib
  RUNTIME DESTINATION bin
)
# include 헤더 설치
install(DIRECTORY include/
  DESTINATION include
  FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h"
)
# 앱(실행 파일) 설치
if (BUILD_apps)
  install(TARGETS gicp_align gicp_kitti
    RUNTIME DESTINATION bin
  )
endif()

그리고 pip uninstall pygicp 로 지운다음 , make -12, make install 와 python setup.py install 순으로 실행하자. 각각의 명령이 가지는 의미는 좀 더 있다가 알아보고.

5. Experiment

실험 자체는 잘 된다. 결과도 좋고. 노트북수준에서 돌리면 30fps 정도가 나오는데, 해상도가 커서 그런가. 어떤 포인트를 튜닝해야 하는지 좀 더 알아봐야 할 것 같다.

우선 Point Cloud가 어떻게 구성되어있는지 궁금했다. Cursor IDE의 도움을 받아 시각화를 좀 더 추가해봤고, 이것저것 다 안되다가 matplotlib 로 겨우 그려볼 수 있었다.

Point Cloud of Replica dataset room0
GS-ICP 연습 중

댓글남기기