2017/10/30:Indigoの開発環境をDockerで構築(1)

Indigo? Kinetic?

ROSはどんどん新しくリリースされていきます.最新バージョンはLunar Loggerhead(Lunar)で,その前が,Kinetic Kame(Kinetic), その前がJade Turtle(Jade)という名前です.伝統的に,亀にちなんだ名前がつけられています.

しかし,実際にはその前のバージョンであるIndigo Igloo(Indigo)を使っている人もまだ多いかと思います.IndigoにはリリースされてるのにKinetic以降にはまだリリースされていないパッケージが数多くあり,移行したくてもできない,という場合が多いようです.同様の理由で,TORKでもワークショップ教材や受託開発には現在もIndigoを用いています.

IndigoはUbuntu14.04ベースですが,KineticとLunarはUbuntu16.04以降がベースで,14.04ではサポートされていません.しかし,Indigoを使うためだけに,いまさらUbuntu14.04をPCにインストールするのもちょっとイマイチです.

VMWareやVirtualBoxなどの仮想マシン(VM)を用いる,という解決策もあります.しかし,ハードウェアを使おうとした時に問題になります.たとえば,USBカメラのパフォーマンスが非常に悪いとか,USB3.0に対応していない,など,デバイスドライバの問題もありがちです.

そこで,最近はやりのDockerを用いると,Ubuntu16.04をインストールしたPC上で,デバイスやGUIも使えるインタラクティブなIndigoの開発環境を簡単に動かすことができます.

Dockerのインストール

まずはDockerのインストールをしておきます.Ubuntuのaptで入るものは用いないで,Dockerのページにある手順に従って最新版をインストールしましょう.Community Edition(CE)というのを使います.

IndigoのDockerイメージの準備

IndigoのDockerコンテナは,まずはOSRFがDockerHubに用意しているものを利用するのが簡単です.

以下のコマンドでIndigoのコンテナを取得します.

$ docker pull osrf/trusty-ros-indigo:desktop

ちなみにこのosrfのコンテナにNextage OpenなどのTORKワークショップに対応したパッケージを追加したものをTORKでも公開しています.必要ツールなどが豊富なので,こちらを使うのもおすすめです.

たとえば取得したDockerコンテナを立ち上げ,コマンド’lsb_release’でバージョンを確認したい場合には,

$ docker run osrf/trusty-ros-indigo:desktop lsb_release -a

No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04
LTSRelease: 14.04
Codename: trusty

のようにします.このとき実行されるコマンドのユーザ権限はデフォルトでrootになります.ユーザ権限やデバイスに対するアクセス権限を変更するには,別途docker runの際のオプションを設定する必要があります.このあたり詳しくは,Docker run referenceを参照してください.

ユーザやホームディレクトリを共有したインタラクティブな起動

ここでやりたいのは,対象のコンテナを立ち上げつつ,自分のユーザ権限でシェルを実行し,ホームディレクトリ内でインタラクティブに作業をすることです.そのために必要ないくつかの設定を行うスクリプトを作成しました.

$ ./docker_shell osrf/trusty-ros-indigo:desktop

とすると,あたかもOSだけがTrusty + ROS Indigoになったかのようなシェルが起動します.

$ . /opt/ros/indigo/setup.bash

とすれば通常のIndigo環境として用いることができます.ただし,ベースシステムでKineticを使っている場合には,ワークスペースをビルドする際にKineticなのかIndigoなのかで混乱してしまいがちなので,注意が必要です.

NVidiaのドライバを使用している場合

PCが特殊なXグラフィクスドライバを用いていない場合には,rvizなどのGUIも使用することができます.しかし例えば,PCがNVidiaのドライバを使用している場合,rvizなどのOpenGLを含むアプリが動作しません.この解決法は次回以降に紹介します.