DockerでGPUを使ってGazeboを動かす方法をご紹介します。
DockerでGPUを使ってGazeboを動かす
DockerでGazeboを動かすとき、
- GUIをディスプレイに表示できるようにすること
- レンダリングにGPUを使用できるようにすること
がポイントになります。
この記事では、上記2点を満たせる方法をご紹介していきます。
準備
DockerでGPUを使うためには、以下3つのインストールが必要です。
- Docker
- Nvidia Driver
- Nvidia Container Runtime
インストール方法の詳細は、以下の記事にまとめています。
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"
さいごに
Docker上でGazeboを動かしてみました。
今回のポイントは、
- DockerでGPUを使うために、Nvidia DriverとNvidia Container Runtimeをインストールすること
- GPUでレンダリングするために、OpenGLをDockerイメージに含めること
- GUIを表示するために、コンテナの起動時にディスプレイ関連の環境変数を指定すること
でした。
参考になれば幸いです。
Ad.
コメント