DockerでGPUやGUIを使えるROSの環境構築

12月 31, 2021

ROSによる開発はとても便利ですが, その環境構築は面倒です. dockerでその環境構築を簡便にしようとすると, RVizやGazeboのGUI表示がうまくいかなかったり, GPUの設定に苦戦することがあります.
そのあたりの環境構築を事前に行っているdockerファイルが配布されているので, 今回はその紹介をします.

セットアップ

dockerのインストールをします.

Ubuntu向けdockerのインストールガイド

NVIDIA Container Toolkitのインストールガイド

docker内でのROSのセットアップ

ROS用のDockerfileを取得し, ビルドします.

# get dockerfile for ROS
git clone https://github.com/turlucode/ros-docker-gui.git

# docker build
make nvidia_ros_melodic_cuda10-1_cudnn7

上記方法でうまくいけばよいですが, docker image build時にネットワークにつながらず, apt update時にW: Failed to fetchというエラーが発生することがあります.

上記エラーはホスト側のネットワーク設定を用いれば解決できます.
具体的にはdocker buildのコマンドにオプション" –network host"を付与します.

# edit Makefile
nvidia_ros_melodic: ## [NVIDIA] Build ROS  Melodic Container
	docker build --network host -t turlucode/ros-melodic:nvidia nvidia/melodic/base
	@printf "\n\033[92mDocker Image: turlucode/ros-melodic:nvidia\033[0m\n"

docker内からウィンドウを表示できるようにします.

xhost +

このコマンドで, RvizやGazeboによる可視化ができるようになります.

次にコンテナの起動をします.

docker run --gpus all -it --privileged --net=host --ipc=host \
-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \
-v $HOME/.Xauthority:/home/$(id -un)/.Xauthority -e XAUTHORITY=/home/$(id -un)/.Xauthority \
turlucode/ros-melodic:cuda10.1-cudnn7

コンテナの起動後, リポジトリの更新をしておきます.

apt update && apt upgrade

ここまででDockerによるROSやGPUの環境構築ができました.

検証

環境構築ができたか検証するために, ロボットを動かしてみます. 今回はmini pupperを動かしてみることにします. 下記サイトに従い, セットアップしてください.

ロボットが動けば成功です!

よく発生するエラー

Gazebo起動時のエラー

gazebo実行時, 以下のエラーが発生することがあります.

libcurl: (51) SSL: no alternative certificate subject name matches target host name 'api.ignitionfuel.org'

このエラー解消には/root/.ignition/fuel/config.yaml内のurlをhttps://api.ignitionrobotics.orgに置き換えます.

# edit /root/.ignition/fuel/config.yaml
-    url: https://api.ignitionfuel.org
+    url: https://api.ignitionrobotics.org

おわりに

ROSは有志の方によって作られた豊富なパッケージを利用することができ, ロボット開発を加速させることができます. ぜひ今回紹介したDockerファイルを使って, 早く, 簡単にROS環境を構築してみてください.