Docker 탐구

[Docker 탐구 - 3] Docker를 이용한 ROS Gazebo 구동 (+Docker 위치 변경)

겨울꿈개발자 2021. 4. 7. 23:53

dream-winter.tistory.com/20

 

[Docker 탐구 - 2] Docker를 이용한 간단한 Xenomai API 호출 프로그램 구동

앞에 글에서는 ARM OS 사용을 위해 Docker를 설치하고 간단하게 사용한 과정을 소개하였습니다. dream-winter.tistory.com/19 [Docker 탐구 - 1] Docker를 이용한 ARM OS 사용 만약 어떠한 프로그램 코드를 ARM 보..

dream-winter.tistory.com

이전 글에서는 Docker를 이용하여 Xenomai API 호출가능한 container를 사용해봤습니다.

이번 글에서는 Docker를 이용하여 ROS Gazebo 실행가능여부를 확인한 과정을 소개하고 있습니다.


Docker windows에서 드라이브 옮기기 (C: -> D:)

그 전에 제 컴퓨터의 C: 드라이브 용량이 부족해서 D: 드라이브로 Docker를 관리하고 싶었습니다.

무슨 이유인지는 모르겠지만 docker windows 버전은 사용자에게 설치 위치를 묻지 않고 자동으로 C: 드라이브에 설치합니다.

따라서 우선 C: 드라이브에 설치한 이후에 다음 과정을 거쳐 docker 관련 파일들을 D: 드라이브로 옮겨야 합니다.

 

1. 시스템 환경 변수 PATH 변경

 

아래 포럼을 참고해서 시스템 환경 변수 PATH에서 Docker 관련 경로들을 옮기고자 하는 드라이브 쪽으로 수정해야 합니다. 물론 해당 파일들도 같이 움직여줘야 합니다.

만약 현재 Docker Desktop 서비스가 실행중이라면 중지시켜줘야 합니다. 윈도우 검색창에 "서비스" 라고 검색하면 관련 설정창이 팝업됩니다.

 

https://forums.docker.com/t/docker-windows-installer-doesnt-let-you-choose-drive/11205/6

 

Docker windows installer doesn't let you choose drive

Found a work around of sorts. start an Admin command prompt (cmd.exe) and change directory to wherever you’ve saved the installer. change the following environment variables to start with the drive letter you want ( e.g: set=ProgramFile=F:\Program Files

forums.docker.com

 

2. 레지스트리를 변경하여 Docker Desktop 서비스 위치 변경 

 

그 다음에는 중지시킨 Docker Desktop 서비스를 다시 실행시켜야 합니다. 위 과정에서 해당 서비스도 같이 이동시켰기 때문에 레지스트리 설정창을 통해 서비스 실행 위치를 바꿔줘야 합니다. 이를 위해 아래 글을 참고했습니다.

 

https://seok7467.blogspot.com/2018/09/network-change-path-of-executable.html

 

[network] Change the path of the executable file(service) 실행 파일 경로 바꾸기 (관리도구-서비스)

현재 아파치2.4를 설치중인데 설치를 완료해도 오류:  지정된 파일을 찾을 수 없습니다 라는 메세지가 나와 확인해보니 실행 파일 경로가 이상하게 되어있었습니다. 그래서 경로를 현재 아파치

seok7467.blogspot.com

위 두 과정을 거치면 Docker 위치를 옮길 수 있습니다.


Gazebo image 설치 및 Gazebo GUI 띄우기

아래 docker hub에서 해당 image를 가져왔습니다. 대신 해당 image는 ros 관련 패키지들은 설치되어있지 않습니다.

roscore와 같이 ros 실행 명령어는 지원하지 않습니다. 오직 gazebo 기능만 지원하는 것으로 보입니다.

https://hub.docker.com/_/gazebo?tab=description&page=1&ordering=last_updated

 

gazebo

We and third parties use cookies or similar technologies ("Cookies") as described below to collect and process personal data, such as your IP address or browser information. You can learn more about how this site uses Cookies by reading our privacy policy

hub.docker.com

docker container 내 GUI 요소를 host 환경에서 띄우기 위해서는 몇가지 과정들이 필요합니다.

아래 글을 참고하여 X-Window 관련 설정들을 진행하였습니다.

jehyunlee.github.io/2020/06/10/Python-General-5-wdvx/

 

X-Window on Docker on WSL 2

References Microsoft: WSL 2와 WSL 1 비교Microsoft: Windows 10에 Linux용 Windows 하위 시스템 설치 가이드docker blog: Docker Desktop: WSL 2 Best practicesubuntu Discourse: Getting graphical applications to work on W

jehyunlee.github.io

저는 MobaXterm을 설치하고, DISPLAY 환경 변수 설정 및 xhost 실행을 하였습니다.

위 글에서 docker container 실행 관련 명령어도 알려주고 있으나, ros gazebo 실행을 위해서는 몇가지 옵션들이 더 필요합니다. 추가적인 옵션들은 아래 글을 참고하였습니다.

medium.com/intro-to-artificial-intelligence/rviz-on-docker-bdf4d0fca5b

 

Rviz on docker

Codebase: ROS Melodic

medium.com

위의 두 글을 참고해서 제가 입력한 docker container 실행 인자는 다음과 같습니다.

docker run -it --rm --privileged --net=host --name=gazebo_x11_test -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/TwinkleStar/Desktop/tmp:/root/workspace -e DISPLAY=$DISPLAY -p 8888:8888 -p 6006:6006 d988d54294fc /bin/bash

여기서 눈에 띄는 옵션이 있었습니다. --net=host는 container가 현재 host 네트워크를 사용하도록 한다고 합니다.

https://bluese05.tistory.com/38

 

Docker Network 구조(2) - container network 방식 4가지

Docker Network 구조(2) - container network 방식 4가지 [Contents] 1. Docker Network 구조(1) - docker0와 container network 구조 2. Docker Network 구조(2) - Container network 방식 4가지 3. Docker Ne..

bluese05.tistory.com

이후 container에서 gazebo 명령어를 입력하여 아래와 같이 gazebo GUI를 host 환경에서 띄울 수 있었습니다.

docker로 windows host 환경에서 gazebo를 실행한 모습

CPU가 100%까지 올라가는 문제가 있습니다. PC 환경에 비해 gazebo가 많이 무겁네요. GPU를 많이 사용하지 않는 것으로 봐서는 docker에서 관련 설정이 추가적으로 필요한걸지도 모르겠습니다.

혹은 물리엔진이 필요한게 아니라 단순 모니터링 용도라면 rviz로 대체해서 사용해보는 것이 맞아보입니다.

해당 image는 gazebo만 실행가능하므로, 다른 image를 찾아야 할거 같습니다.