Windows 10 Bash on Ubuntu on WindowsでROSを動かす!

Windows 10最強!海外のフォーラムでWindows 10のWSL(Bash on Ubuntu on Windows)上でROSが動作したという情報を見て試したら動いたので、取り急ぎ手順を書いておきます。

Windows Subsystem for Linux(WSL)は、Bash on Ubuntu on Windowsとも呼ばれており、Windowsの上で「ネイティブに」Linuxバイナリを動作させる機能です。この機能とCanonical社(Ubuntuプロジェクトを支援している)の協力のもと、Windows上でUbuntuと同様の実行環境が実現できるようになっています。

以下、Windows 10でROSを動作させる方法を書いていきますが、ある程度WindowsやLinuxの使い方がわかっていることを前提にしています。また、Linux上でROSを使用した経験があるとわかりやすいかもしれません。ROS自体に関する解説はここでは行いません。

手順

とりあえず、手元のSurface Pro 3で試してみます。Windows 10 1709 Fall Creators Update適用済み環境です。1709ではついにWSLからBetaが外され、正式な機能に昇格されました。このため、1709環境を利用するのがおすすめですが、1703でもおそらく実行可能です。

WSL環境を用意

これについては記事がたくさんあるので簡単に書きます。

設定 -> 更新とセキュリティ -> 開発者向け -> 開発者モード

で開発者モードをオンにします。

また、

アプリと機能 -> プログラムと機能(一番下にある) -> Windowsの機能の有効化または無効化 -> Windows Subsystem for Linux

でWSLを有効化します。 再起動を求められたらそれに従います。

さて、Ubuntuのインストールには2つの方式が存在します。Ubuntuをストアアプリとして入れる方法と、そうでない方法です。 今後はどうもストアのほうが主流になりそうですが、Beta版として最初に提供されて情報も多いのは非アプリ版です。 私は非アプリ版で環境を作ってしまっていたのでそちらにしましたが、新しく始める人はアプリ版が良いかもしれません。 アプリ版でもし動かなければ、コメントで教えていただければ幸いです。

非アプリ版のWSLを使用するとき

Windows PowerShellを開き、bashと入力すればUbuntuのインストールが開始されます。

ストアアプリ版のWSLを使用するとき

ストアを開き、「Ubuntu」で検索してインストールします。

Windows版X11をインストールする

さて、WSLのUbuntuを触る前に、GUIの表示に必要なX11をインストールしておきます。LinuxでGUIを使わないのであれば、この項目は飛ばしてかまいません。ROSにおいて、rvizやrqt系の可視化ツールを使用するためにはX11が必要です。

Windows版X11として、オープンソースのXmingというX11サーバーを使用します。以下のサイトからXサーバー本体 Xming-6-9-0-31-setup.exeとフォント Xming-fonts-7-7-0-10-setup.exe (2017/10/19現在)をダウンロードします。

https://sourceforge.net/projects/xming/

本体、フォントの順にインストールしてください。これで、X11のインストールは完了です。

ROSをインストールする

さて、いよいよROSをインストールします!ROSの2017/10/19時点での最新はLunarですが、ここでは安定性重視で長期サポート版のKineticをインストールすることにします。以下のインストールガイドに従います。私はLunarで試していませんが、おそらく同様に動作すると思われます。

http://wiki.ros.org/kinetic/Installation/Ubuntu

それでは、WSL Ubuntuの端末を開いてください。スタートメニューから「Bash on Ubuntu on Windows」(非アプリ版)か「Ubuntu」(アプリ版)を選択し起動してください。

ROSのインストールは、ROSプロジェクトで用意されているaptリポジトリを用いて行います。 まずはaptにリポジトリを登録します。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

次に、キーを登録します。

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

パッケージ情報を更新します。

sudo apt update

いよいよROS関連パッケージのダウンロードを行います。使用目的に合わせて、いくつかのセットを選べます。例えばGUIを含まない最低限の構成などです。ここでは、GUIを含めたフルのセットをインストールすることにします。どのセットを選んでも、最初にインストールされるパッケージが違うだけで、後からパッケージの追加や削除は可能です。注意としては、ros-kinetic-desktop-fullを選んでもROSのリポジトリにある全てのパッケージがインストールされるわけではないという点です。

sudo apt-get install ros-kinetic-desktop-full

最後に、rosdepの初期化をして完了です。2行目ではsudoをつけてはいけません。

sudo rosdep init
rosdep update

環境変数の設定

ROSに限らずX11を使用したい場合、環境変数DISPLAYを設定してディスプレイ番号を教える必要があります。 毎回コマンドを実行するのは面倒なため、.bashrcで設定を行います。以下を最下行に追記してください。

export DISPLAY=localhost:0.0

また、ROSの関連ツールを動かすためにはROSの環境変数設定が必要で、そのためのスクリプトを端末ごとに動かす必要があります。これも面倒のため、同様に.bashrcで設定しておくと良いかと思います。以下追記します。

source /opt/ros/kinetic/setup.bash

起動するか試してみる

さて、いよいよ動作のテストを行ってみます。 まず、WSL端末を一つ開き、roscoreを起動します。

roscore

もう一つWSL端末を開き、rvizが起動するか確認します。

rosrun rviz rviz

ファイルマネージャなどをインストールする(Optional)

必要に応じて以下のようなものを入れてみるといいかもしれません。

ファイルマネージャCaja。GUIでファイル操作ができるようになります。

apt install caja

端末mate terminal。Linuxのデスクトップ環境で使っているような高機能な端末。

apt install mate-terminal

GUI関連の設定(Optional)

デフォルトでは日本語フォントやテーマが入っておらず、ものによってはGUIがまともに表示されないため、これらのインストールと設定を行います。

gtk-chthemeはGTKのテーマ設定ツール、light-themesはUbuntuデフォルトのテーマパッケージ、fonts-takaoはUbuntuデフォルトの日本語フォントです。

sudo apt install gtk-chtheme light-themes fonts-takao

インストールできたら、端末でgtk-chthemeを実行し、Ambianceなどを選択します。フォントがデフォルトで小さめなら、13くらいにしておくといいかもしれません。

また、何故かgtk-chthemeではアイコンを設定してくれないため、こちらは手動で設定します。~/.gtkrc.mineというファイルを作り、以下を書き込んでください。

gtk-icon-theme-name = "Humanity"

これでcajaなどを起動すれば、本物のUbuntuと同じように見えるはずです。

参考にしたサイト

http://janbernloehr.de/2017/06/10/ros-windows