DockerでGPUやGUIを使えるROSの環境構築
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環境を構築してみてください.