Gazeboを使う際に注意してほしいこと。その2
続きです。
2.docker上では注意!dockerからの起動方法
Gazeboはdocker hubに公式としてイメージを配布しておりますが、これ表示できなくね?と思いました。そう、dockerのコンテナ上にはディスプレイがありません。どうすんだよって話ですが、大きく分けて3パターンの解決方法があります。
まず一つ目。
gzserver,gzclientを使う方法です。gzserverをdocker上のコンテナで、gzclientをホストのPCで,という方式です。
最近dockerがWindows、MacでもVirtual boxを介さず起動できるようになるとの発表がありましたので,そのうちこの方法が使えるようになると思います。厳密に言えば使えなくはないですがポート等の問題があるので、かなり厳しいと思います。
この方法の欠点はわざわざホスト側のPCにGazeboをインストールしなければならないことです。環境を汚さないことがdockerの大きな利点ですから、一番良い解決方法ではあるのですが、少しどうなのって感じです。
次に二つ目。
Xwindowを使う方法です。Xwindowはディスプレイの情報を別のPCに持って行けるので画面を転送すればできます。
これもまあまあ問題があります。まずGazeboは3Dのレンダリングがなされているため、Mac,Windowsでは3Dレンダリング関連で引っかかりまともに動かせません。
Ubuntuでは動作しますが、なぜか一部の画面が欠落したりでなんだかんだ使えません。
こんな感じ。左が欠落しています。VM上でしか試していませんので、もしかしたらネイティブでlinuxをインストールしている場合は使えるかもしれません。
最後に三つ目。
gzwebを使う方法です。その1でもちらっと書きましたがgzwebとは何かといいますとgzclient(3Dモデルのレンダリング)の機能をWebブラウザでしようとするものです。
機能は制限されてしまいますが、ある程度使えます。PR2等のセンサーなどが多いもの
では処理がかなり重いので、軽めのロボットを使うのであれば十分使えるでしょう。
基本に立ち返って…
さて、ここでは結局Gazeboって何が向いているんだって話ですね。Gazeboは物理シミュレータと銘打っているため、当然重力等を考慮した環境が必要な場合には有効です。
逆に、そんなのは別に要らない、リアルな画像が欲しいんだ、って場合は逆に向いていないと思います。その場合はUnityやUnreal Engine等のほうが相性がいいですし、何より動かしやすい(重要)。やりたいことが物理演算が必要ならばGazebo、要らないならまた別のものを考慮したほうがよいです。