三浦製作所

興味のあるものをとりあえず動かしてみた、実装してみたシリーズをガンガン上げていきたいと思います。あくまでも自身の備忘録としてですが、誰かの助けになったらうれしいです。

rvizやgazeboを実行可能なDocker環境の話

f:id:bamboomush:20210516193513p:plain

概要

ROSを使えるDocker環境のGUIアプリを簡単に使えるdockerfileの紹介です。 これは、かなり使い勝手が良いと感じていて、これがあればだいたいの環境をDocker上に作れるのではないかと思っています。 (なんであんまり話題にならないのか不思議なくらいです)

内容

そもそもなんのためのものか

ロボット開発をしているとROSを使うことは多々あると思います。ROSは多くのオープンソースパッケージがあるので、開発を進める上で大変便利ですが、一方で、ものによってサポートしているバージョンが異なるなどの問題もあると思います。
そんなときにとりあえず簡易的に開発環境を作って、試してみたい、チーム内で同じ環境を共有したいといったことはあると思います。
そこで使えるのが、Dockerです。私は、以前Docker上でVNCサーバーを使ってGUIアプリを使うということをやったことがあり、その記事を書いたのですが、一つ難点があり、webサーバー上にGUIを表示しているのですが、通信の問題なのか (このへん詳しくないですが)遅延が発生しやすく、開発にストレスを感じることが多々ありました。また、クリップボードを使うにもいちいちひと手間必要で使い勝手が少し悪いなと思っていました。そこで、Dockerコンテナで動かしているGUIアプリをXserverを使って表示することを試みてみました。
Xserverを使っている人は多くいるのですが、いろんな環境を簡単に使い分けることができるので、今回は新たに記事を書きました。

本題

はい、本題ですが、こちらのリポジトリを紹介したいです。

github.com

というか、これ見ればすべて済んでしまうのですが、これを使うとrosの各ディストリビューションとそれぞれのGPU対応、opencv対応などが使用可能です。
手順は簡単で、

$ git clone git@github.com:turlucode/ros-docker-gui.git
$ cd ros-docker-gui
$ make nvidia_ros_melodic (これは使いたいものに合わせてください)
$ xhost local:user (これもuserにするのかrootにするのかなど必要に応じて変えてください)
$ docker run -it --gpus all    -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY -v $HOME/.Xauthority:/home/$(id -un)/.Xauthority -e XAUTHORITY=/home/$(id -un)/.Xauthority  -e ROS_IP=127.0.0.1  turlucode/ros-melodic:cuda10.1-cudnn7

上記みたいにやればOKだと思います。
リポジトリにいろいろやり方書いてありますが、この辺のオプションが有効になっていることが重要そう?
個人的にもあまりオプション周りを理解していないので、何か間違っていたら教えていただきたいです。

実装

こんな感じであっさりrvizやgazeboが使えるようになるはずです! f:id:bamboomush:20210516193513p:plain

nvidia driverも問題なく使えています。 f:id:bamboomush:20210516193614p:plain