DockerでGPUを使ってGazeboを動かす方法をご紹介します。

DockerでGPUを使ってGazeboを動かす

DockerでGazeboを動かすとき、

  • GUIをディスプレイに表示できるようにすること
  • レンダリングにGPUを使用できるようにすること

がポイントになります。

この記事では、上記2点を満たせる方法をご紹介していきます。

準備

DockerでGPUを使うためには、以下3つのインストールが必要です。

  • Docker
  • Nvidia Driver
  • Nvidia Container Runtime

インストール方法の詳細は、以下の記事にまとめています。

【Ubuntu】DockerでGPUを使うまでの環境構築

Dockerfileの実装

レンダリングにGPUを使うためには、OpenGLが必要であるため、ベースイメージとしてnvidia/openglを使います。

今回は動作確認のためにTurtlebot3をインストールしていますが、必須ではありません。

########## Pull ##########
FROM nvidia/opengl:base-ubuntu20.04
########## Non-interactive ##########
ENV DEBIAN_FRONTEND=noninteractive
########## Common tool ##########
RUN apt-get update && \
	apt-get install -y \
		vim \
		wget \
		unzip \
		git \
	        python-tk
########## ROS ##########
RUN apt-get update && \
	apt-get install -y \
		lsb-release \
		curl \
		gnupg2 && \
	sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' && \
	curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - && \
	apt-get update && \
	apt-get install -y ros-noetic-ros-base && \
	echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
########## Gazebo & Rviz ##########
RUN apt-get update && \
	apt-get install -y \
		ros-noetic-gazebo-ros-pkgs \
		ros-noetic-rviz
########## Turtlebo3 ##########
RUN apt-get update && \
	apt-get install -y \
		ros-noetic-turtlebot3-gazebo \
		ros-noetic-turtlebot3-bringup \
		ros-noetic-turtlebot3-teleop

イメージのビルド

docker build . -t gazebo_turtlebot3

実行

動作確認のため、Turtlebot3を走らせてみます。

GUIを表示するために、ディスプレイ関連の環境変数を指定しています。また、GPUの使用も指定しています。

xhost +

docker run \
	-it \
	--rm \
	-e "DISPLAY" \
	-v "/tmp/.X11-unix:/tmp/.X11-unix:rw" \
	--gpus all \
	gazebo_turtlebot3 \
	bash -c " \
		source /opt/ros/noetic/setup.bash ; \
		export TURTLEBOT3_MODEL=burger ; \
		roslaunch turtlebot3_gazebo turtlebot3_world.launch & \
		sleep 3s ; \
		roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch & \
		sleep 3s ; \
		roslaunch turtlebot3_gazebo turtlebot3_simulation.launch"
gazebo_turtlebot3

さいごに

Docker上でGazeboを動かしてみました。

今回のポイントは、

  • DockerでGPUを使うために、Nvidia DriverとNvidia Container Runtimeをインストールすること
  • GPUでレンダリングするために、OpenGLをDockerイメージに含めること
  • GUIを表示するために、コンテナの起動時にディスプレイ関連の環境変数を指定すること

でした。

参考になれば幸いです。

Ad.