#はじめに
ROS2 は皆様ご存じのとおり、Windows をサポートし、インストールできるようになっています。
ROS2ではじめよう
Windows 10とROS 2のインストール
Installing ROS 2 on Windows
ROS2.0をWindows10にインストールする
ですが、いろいろな事情で Linux を使いたい方々の中には Windows Subsystem for Linux (WSL) を使用する方もいると思います。
Windows Subsystem for Linux の使用を開始する
そんなわけで WSL で ROS2 を使ってみようと思いましたので、そのインストールまでの手順を記録します。
基本的には書籍のインストール手順にしたがって導入すれば OK です!
WSL の導入
すでにまとめられている記事がありますので割愛します。
Windows Subsystem for Linuxをインストールしてみよう!
WSL: Windows Subsystem for Linuxのインストールと設定
後者の出村先生のサイトでは、WSL で GUI を表示するための方法も説明されています(後述します)。
標準のターミナルだと表示が崩れることがあるので、wsltty をインストールしています。
https://github.com/mintty/wsltty
WSLのコンソールを便利で高機能な「wsltty」に置き換える
<オプション>
日本語環境をインストール
apt install language-pack-ja
日本語環境を起動時に設定するために .bashrc に以下を追記
export LANG=ja_JP.utf8
Linuxのローカライゼーション系LANG変数:langについて
なお、ROS 公式では en_US.utf8 ですが、言語はお好みでよいかと思います。
ROS2 のインストール
ROS2 インストールについては公式、書籍、Biggs さんの記事も参照ください。
Installing ROS2 via Debian Packages
Ubuntu LinuxでROS 2のインストール
curl, gnupg2, lsb-release をインストール
sudo apt update
sudo apt install curl gnupg2 lsb-release
リポジトリのキーを導入
curl http://repo.ros2.org/repos.key | sudo apt-key add -
ROS のディストロを設定
export ROS_DISTRO=dashing
ROS2 本体をインストール
sudo apt install ros-$ROS_DISTRO-desktop python3-colcon-common-extensions python3-rosdep python3-argcomplete
注意:python3-rosdep2 というのもありますが、無印と間違えないように。
セットアップ環境を自動的に読み込む設定を .bashrc に記述
echo "source /opt/ros/dashing/setup.bash" >> ~/.bashrc
ここまでは標準的なインストールで進むと思います。
Talker and Lister のデモ
無事にインストールが完了していれば、「ROS2ではじめよう」P47 2-3-6 に記載のデモプログラム「Talker and Listener」が動くはずですが、動きませんでした。これは Windows のファイアウォールが通信をブロックしているためです。ファイアウォールをオフにすれば問題なくデモプログラムが動きましたが、これではセキュリティホールになりますので、例外処理をするべきでしょう。
以下のフォーラムでも同様の症状が報告されており、WSL 2 の環境では解消されるようですが、未確認です。
Problem of ROS2.0 talker/listener example on WSL1.0
WSL 2 のインストール手順
※WSL 2 のインストールには Windows Insider Program への登録が必要です。
#GUI の導入
WSL は基本的にはコンソールのみですので、GUI がこのままでは使用できません。WSL から X サーバを介して GUI を生成するには VcXsrv などの X サーバを別にインストールして、起動しておく必要があります。
WSL上にXサーバをインストールしてGUIを実現する(VcXsrv編)
VcXsrv Windows X Server
ROS1 で Rviz や Gazebo を表示するためには必須ですが、X サーバの以下の設定に注意が必要です。
WSL: Windows Subsystem for Linuxのインストールと設定
echo ‘export DISPLAY=localhost:0.0’ >> ~/.bashrc
echo ‘export GAZEBO_IP=127.0.0.1’ >> ~/.bashrc
WSL: RvizやGazeboが起動しない
以前の設定と主な変更点は.bashrcのLIBGL_ALWAYS_INDIRECT=1をコメント化し、VcXsrvの起動オプションに-nowglを追加した。
ROS2 ではまだ試行していませんが、おそらく同じような設定になると思います。~/.bashrcに
— 上田 隆一 (@ryuichiueda) August 2, 2019
export LIBGL_ALWAYS_INDIRECT=0
を書き込むと立ち上がりましたー
追記
WSL2 での X サーバの設定についてコメントいただいたので、引用します。
WSL2ではDISPLAYの設定をちょっと変える必要あります。
localhost:0.0では上手くいかないようです。
WSL2の方でifconfig等でIPアドレスを調べるとわかりますが、IPアドレスが別にあてられています。
対応方法としては以下をすればよいです。
- xserver側に-acオプションをつける
- localhost:0.0ではなく、Windows側のIP:0.0を設定する
詳細は以下が分かりやすいと思います。
https://qiita.com/ryoi084/items/0dff11134592d0bb895c
#おわりに
WSL は Windows 上で Linux を走らせることができ、Linux から Windows アプリケーションを呼び出すこともできるツールです。Ubuntu はもともと ROS がサポートしてきただけに情報も豊富にあります。WSL がそれぞれの利点をうまく組み合わせて活用できるようになればと思います。