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

ROSを用いて自動運転ロボットを作る [序章]

久々の投稿になります。突然になりますが、ここ最近、とあるきっかけで自律移動・自動運転の技術に興味をもっていろいろと調べたりしています。そして、これをDIYで製作してみようと思いましたので、その記録をここに書いておこうと思います。

まずは何となく理解したこの分野のあらましから。大学院の専門などではないので間違いがあったらご指摘いただければ幸いです。というか、ROSまでたどり着けませんでした。

世間的にも、自動車の自動運転が何かと話題になってきていますが、意外とその技術的な内容は知られていないように思います。自動運転車の話題は世間的には最近の人工知能ブームに乗って出てきたようにも見えますが、実は10年以上も前から研究されている技術です。また、最近のブームは主にDeep Learningによる画像認識・自然言語処理などの技術を皮切りに始まっているように思いますが、自動運転の基礎技術はこれらとは全く別の、確率論をベースとしたアルゴリズムとなっています。

この分野の基礎技術が、Probablistic Robotics(邦訳:確率ロボティクス)という本にまとめられています。著者はSebastian Thrunというスタンフォード大学の教授で、移動ロボット分野の権威であり後にGoogle自動運転車プロジェクトのリーダーを務めた方です。

この本はかなり分量もあり数学ベースの理論もかなりあるため、読み切るのはなかなか大変そうです。私もまだ途中です。ここでは、勉強の経過なども書いていけたらと思っています。

自律移動ロボから自動運転車へ

さて、上で自動運転車の技術が昔から研究されてきたと書きましたが、最初から全て自動車において研究されてきたわけではないようです。現在の自動運転車の技術分野が生まれてくる以前に、「自律移動ロボット」という一大研究分野がありました。自律移動ロボットというと概念としては広そうですが、レーザーレンジセンサ(LIDAR)と左右2つの駆動輪を備え、マップ作成と自己位置推定、経路計画といった手順で目標位置までの移動を行うロボットを指すことが多いようです。初期の研究として以下のようなものがあります。

Minerva's Image

[Carnegie Mellon’s Robotic Tourguide Project, http://www.cs.cmu.edu/afs/cs/Web/People/minerva/]

カーネギーメロン大学の博物館で案内役を行うロボットだったようです。この実験が行われたのが1999年とのことで、かなり私たちの感覚より早くから研究が行われていたかがわかると思います。この研究を行っていたのがまさにSebastian Thrunで、後にGoogle自動運転車プロジェクトの初代リーダーを務めています。このことからも、自動運転車の技術が自律移動ロボットの技術の発展であるということがわかると思います。

誰でも自律移動ロボを作れる時代に!

さて、そこからもう少し時代が進み、2000年代後半に、ある密かなブームが起こりました。それはiRobot社がロボット掃除機・Roombaを発売したことと、Microsoft社がゲーム向けデバイスとしてKinectを発売したことによります。Roombaはともかく、Kinectは一般人より研究者が大喜びだったなどと言われていました。

それは何故でしょうか。まずKinectは、それまでにないほど安価に深度データやモーションキャプチャを行えるセンサとして使うことができたからです。これまで、上記の移動ロボのように深度データを取得するにはLIDARが一般的でしたが、これは2017年現在の低性能なラインナップでも10万円くらいする高価なセンサです。また、人間の骨格の動きを測定する専用のモーションキャプチャシステムなどはいくらするか想像もつきません。しかし、これらがKinectの登場により1万円程度で誰でもできるようになってしまったのです。これによって、趣味人やお金のない研究室などで大ブームとなりました。

もう一つはRoombaです。これはKinectほどのインパクトではないかもしれませんが、実は、安価な車輪ロボとして都合が良いものだったのです。車輪ロボで自律移動を行おうとした場合、左右それぞれのモータの速度を外部から制御できることと、エンコーダ値(車輪の実際の回転数=移動距離)を取得できることが必要となります。ですので、ミニ四駆やラジコンのようなシステムでは不十分ということになります。速度制御とエンコーダ搭載は、自作もできないことはないですが、メカや電子回路、マイコンなどの知識が必要となり、ちゃんと使えるものを作るにはそれなりに骨の折れる作業でした。しかし、Roombaは一般向け製品でありながら、外部からシリアル通信で速度制御ができ、エンコーダを搭載し、さらに(実は)強度や搬送可能重量もそこそこあるという、数万円で手に入る立派な車輪ロボだったのです。

Roombaの一般向け製品の多くが実は隠しシリアルポートを備えています。研究目的やDIYへの配慮の姿勢がさすがシリコンバレー企業という感じでしょうか。

これらKinectとRoomba、さらに制御を行うためのノートPCや流行りの高機能CPUボード(Raspberry Piなど)を組み合わせれば、立派な移動ロボが作れてしまいます。中古などを上手く使えば、1万円以下でもできるかもしれません。後は、ソフトです。ソフトも、オープンソースコミュニティの発達によって、自律走行のための高度なソフトを無料で手に入れることができます。腕があれば自分で全て作ることもできます。PC内で動くソフトの開発も面白いですが、上記のようにセンサとアクチュエータをつけることで実世界に飛び出すことができます!DIYで何でもできる面白い時代だと思います。

それでは、次回から実際の製作に入っていきたいと思います!