Search
🐳

ROS Docker GUI 개발환경 설정

Last update: @4/18/2024

개요

Docker를 사용하면 모든 ROS 버전을 사용할 수 있다. 이때 컨테이너에서 실행되는 Gazebo와 Rviz2 같은 GUI를 호스트 머신에서 조작하기 위해서는 아래처럼 환경을 구성해줘야 한다.
이 포스트는 Linux Ubuntu 22.04 버전의 호스트 머신을 기준으로 한다.

Docker 설치

Docker가 설치되어 있지 않다면 아래 명령어를 실행해 도커를 설치해준다(출처).
$ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh ./get-docker.sh
Shell
복사
만약 권한이 없는 디렉터리에서 작업을 하면 curl: (23) Failed writing body (0 != 15890)과 같은 에러를 만나게 되니 주의해야 한다.
root 명령어로 실행하는게 불편하니까 docker 그룹을 등록해주자
$ sudo groupadd docker $ sudo usermod -aG docker $USER
Shell
복사
docker enabled 확인
$ systemctl is-enabled docker
Shell
복사
enabled가 안 뜬다면 아래 명령어 입력
$ sudo systemctl enable docker.service $ sudo systemctl enable containerd.service
Shell
복사
터미널 재실행해서 유저 새로고침 후 아래 명령어로 테스트하자.
$ docker run hello-world
Shell
복사
Permission denied가 뜨면 reboot 명령어로 재부팅 해보자. 아니면
$ newgrp docker
Shell
복사
위 명령어를 쳐도 안 되면 그냥 docker 앞에 sudo를 쓰자.
아래처럼 뜨면 성공

nvidia-container-toolkit 설치

NVIDIA 그래픽 드라이버가 설치되어 있어야 한다.
Docker 컨테이너에서 NVIDIA 그래픽 드라이버를 사용하려면 호스트 머신에 nvidia-container-toolkit이란 것을 설치해줘야 한다.
아래 페이지 따라 NVIDIA toolkit 설치
다 설치했으면 상기 페이지의에 아래 부분에 있는 runtime 설정까지 해준다.
$ nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json $ sudo systemctl restart docker
Shell
복사
nvidia-container-toolkit이 정상적으로 설치되었다면 아래 명령어로 테스트해볼 수 있다.
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Shell
복사
이미지 태그는 아래 링크에서 호스트 머신 운영체제에 맞게 고르자

x server 설정

리눅스 시스템에서 GUI를 사용할 수 있게 해주는 것이 X-Server. GUI를 사용하기 위해서는 X에 접근할 수 있는 유저로 컨테이너를 실행해야 한다. 호스트와 같은 유저로 실행하면 문제가 없지만, 그렇지 않은 경우 xhost를 통해 권한을 부여해야 한다.
$ xhost + # give permission to all users $ xhost +local: # give permission to local users $ xhost +local:root # give permission to specific local users
Shell
복사

docker nvidia-container-toolkit runtime 설정

/etc/docker/daemon.json 파일에 아래 내용을 추가. 없다면 만들자.
$ sudo vi /etc/docker/daemon.json
Shell
복사
{ "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } }
YAML
복사
이후 docker를 재실행해주자.
$ sudo systemctl restart docker
Shell
복사

테스트

Container 내에서 Gazebo를 실행하면 호스트 머신에서 nvidia-smi를 실행하면 아래처럼 gazebo가 GPU를 물고 실행되는 것을 확인할 수 있다.
$ nvidia-smi # 또는 $ watch -n0.1 nvidia-smi
Shell
복사
위처럼 설정이 끝나야 아래처럼 docker compose의 runtime 옵션을 사용할 수 있다.
version: '3' services: amr_humble: # ... runtime: nvidia
YAML
복사

References