この記事では今後 WSL 上で ROS2 をつかった開発をするときに必要な環境構築を紹介します。ここで紹介する環境構築をすべて行うことで WSL 上の ROS2 開発が通常の Linux での ROS2 開発とおなじハードルで行えるようになるでしょう。
この記事は今後 新たに項目を追加する 予定です。ストックするなどして更新状況を把握しておくことをお勧めします。
もくじ
VSCode をインストールしてセットアップする方法
VSCode をダウンロードする
下部のリンクから VSCode をダウンロードしてきてください。リンクをクリックすると以下のようなサイトが表示されるので、一番左の Windows をクリックして VScode インストーラー をダウンロードします。
VSCode をインストールする
ファイルエクスプローラー を開いて、ダウンロード フォルダにダウンロードされている VSCodeUserSetup-x64-1.93.1.exe
をダブルクリックして VScode インストーラーを起動してください。
すると画像のようなインストーラーが起動します。
このとき、「次へ」 をクリックする前に 「同意する」 をクリックしてください。
「次へ」 をクリックしたらこのような確認を促されるので、ここも 「次へ」 をクリックしてください。
今度は スタートメニュー の設定です。ここも特に触れる必要はありません。「次へ」 をクリックしてください。
次は追加オプションの設定です。おすすめとして、赤枠のチェックボックス2つにチェックを入れると、右の図のようにエクスプローラ上から選択したファイルやフォルダを指定して VScode を起動することができるようになるので、効率的に開発することができます。
最後に左の図の画面が表示されるので、「インストール」 をクリックしてください。すると VScode がインストールされ、中央の図の画面が表示されます。インストールが終了すると右の図の画面が表示されるので、「終了する」 をクリックしてください。
インストーラが閉じると、このように VScode が起動します。
VScode の言語を日本語にする
このように、初めて VScode を起動すると言語が英語になっています。ここでは VScode の言語を日本語に変更する方法を解説します。
VScode の左側にはいくつかのアイコンが縦に並んでいるところがあります。ここを ツールバー といいます。ツールバーの下部に 田 のようなアイコン (拡張機能) をクリックしてください。
ツールバー横に拡張機能一覧が表示されるので、検索バーに Japanese
と入力してください。すると japanese Language Pack ... という名前の拡張機能が候補に挙げるので、install をクリックして日本語拡張機能をインストールしてください。
install が uninstall になったらインストール完了です。VScode を一度閉じで終了してください。
スタートメニューを開き、検索バーに VScode
と入力すると、VScode が候補に挙がるのでもう一度起動してください。するとこのように VScode の言語が日本語になるはずです。
再起動しても VScode が英語のままの場合
VScode を再起動しても言語が英語のままの場合の対処方法を解説します。
まず、VScode の View をクリックして Command Palette ... をクリックして、「コマンドパレット」 を起動します。
キーボードショートカットキーで 「Control + Shift + P」 をすることで素早くコマンドパレットを開くことができます。
パレット上に Display
と入力すると、
Configure Display Language
すると言語を選択する項目が表示されるので、日本語 をクリックしてください。
すると画面に 再起動後 VScode のデフォルト言語を日本語にするか と聞かれるので 「Restart」 をクリックして VSCode を再起動してください。
VScode から WSL Ubuntu にログインする方法
VScode から WSL Ubuntu にログインして、開発するためのセットアップと使用方法を解説します。
拡張機能 を開いて、検索バーに 「remote develop」 と入力してください。すると、 >< みたいなアイコンの拡張機能 「Remote Development」 をインストールしてください。
インストールボタンが「インストール済み」になったら成功です。また、ツールバーの拡張機能の下にモニターのアイコンが追加されます。
このモニターアイコンをクリックすると、WSL 上に存在する Ubuntu に接続する設定が開きます。
WSL TARGETS の部分に WSL 上にインストールされている Linux 一覧が表示されています。ログインしたい Linux の横にある 「→」 をクリックすると、現在作業しているウィンドウで Linux にログインします。
Linux に無事ログインすると、VScode ウィンドウ左下の青い部分に WSL Ubuntu と表示されており、今作業している VScode で WSL Linux にログインしていることを表しています。
これで VScode をつかって WSL 上のプログラムを編集する環境が整いました!使用している VScode を WSL からログアウトしたい場合、 WSL Ubuntu をクリックしてください。すると下の図のようにメニューが表示されるので、メニュー上でカーソルを下に回して一番下にある リモート接続を終了する をクリックしてください。
ログアウトするとVScode ウィンドウ左下の青い部分の WSL Ubuntu が >< になります。この状態が WSL からログアウトし、ホスト上にいることを示しています。
WSL 上のネットワークとホスト上のネットワークを同一にする方法
WSL 上のネットワークを設定するには Windows の "Hyper-V" という機能を使用します。Hyper-V は通常では Windows Pro シリーズ のみサポートしています。Windows Home エディションはサポートされていません!
お使いのコンピューターの Windows が Pro か Home か確認したい場合、「設定」アプリを起動して「システム」>「ライセンス認証」を開いてください。このように Windows の種類を特定することができます。
もしお使いのコンピューターが Windows Home の場合、Windows Home で Hyper-V を有効にする方法 を参照してください。
ネットワークを使用したロボットを扱うとき、ホストの ip アドレス情報が必要になります。しかしながら WSL 上で起動する Linux には 固有の ip アドレス が割り振られ、ホストから隔離された環境でネットワークが動作します。つまり、外部から WSL が動作しているコンピューターをみるとあたかも 2台のコンピューターが存在しているように見える わけです。
この状態ではネットワークを使用するロボットと通信したいとき、適切な ip アドレスをロボット側が検索することができず 正常にロボットと通信できない可能性 があります。ここではホスト上の ip アドレスを WSL Linux 上の ip アドレスに書き換えることで、外部から1台のコンピューターが存在するように見せることで適切なネットワーク環境を利用できるようにする方法を紹介します。
このセクションではこれから何をするのかを説明するだけです。すぐに作業に取り掛かりたい場合は Hyper-V を有効にする をご覧ください。
WSL Linux にログインして、以下のコマンドを実行してネットワーク状況を取得するパッケージをインストールしてください。
sudo apt install net-tools
つぎに以下のコマンドを実行して WSL Linux 上のネットワーク情報を取得します。
ifconfig
すると、以下のようなログが表示されます。
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.23.243.178 netmask 255.255.240.0 broadcast 172.23.255.255
inet6 fe80::215:5dff:feb9:aaf9 prefixlen 64 scopeid 0x20<link>
ether xxxxxxxxxxxxx txqueuelen 1000 (Ethernet)
RX packets 105 bytes 14332 (14.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 39 bytes 6135 (6.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 17 bytes 3448 (3.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17 bytes 3448 (3.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注目すべくところは eth0
の項目の inet
の部分です。ここに Linux 上の ip アドレスが表示されます。ここでは ip アドレスが 172.23.243.178
であることがわかります。
一方、ホスト側のネットワーク情報を見てみましょう。PowerShell を起動して以下のコマンドを実行してください。
ipconfig
すると各種インターフェース上の ip アドレスを確認することができます。私の場合 ip アドレスは 192.168.0.202
でした。このように WSL Ubuntu 上の ip アドレスとホスト上のアドレスが異なることがわかるでしょう。この状態で他の ip アドレスをもつロボットと接続しようと試みても WSL Ubhntu 側からロボットに接続要求できてもロボットは WSL Ubuntu に向けて応答することができません。
ここでは、この問題を解決すべく WSL Ubuntu 上の ip アドレスとホストのアドレスを結合させる手法を用います。
Hyper-V を有効にする
おつかいのコンピューターの Hyper-V が有効になっているか確認しましょう。まず、スタートメニューを開いて 「Windows」 と入力し、候補に挙がる Windows の機能の有効化と無効化 を起動してください。
起動するとこのようなチェックボックスがたくさんあるウィンドウが表示されます。ここに "Hyper-V" の項目にチェックが入っているか確認してください。 チェックが入っていない場合はチェックを入れましょう。
すでにチェックが入っている場合はここをスキップしてください。
チェックを入れたら "OK" をいれて、コンピューターを再起動してください。
仮想インターフェースを作成する
仮想インターフェースの作成対象となるのは 有線LAN(Ethernet) です。有線LAN を搭載していないコンピュータを使用している場合はハブなどを用いて有線LAN を使える環境にしてください。
仮想インターフェースを作成し、Windows ホストのネットワークと WSL Ubuntu のネットワークをトンネルで繋げます。これにより見かけ上 WAL Ubuntu とホストの ip アドレスが同一になります。
まず、スタートメニューで 「Hyper-V」 と検索してください。すると候補で 「Hyper-V マネージャー」 がでます。こちらのアプリを開いてください。
Hyper-V マネージャーの操作パネルにある 「仮想スイッチマネージャー」 をクリックしてください。
以下のようなウィンドウが表示されます。仮想スイッチプロパティの名前の項目にわかりやすいプロパティ名を設定してください。今回仮想のインターフェース(Ethernet)を作成するので、私は vm_ethernet
という名前にしました。
接続の種類グループの仮想スイッチの種類を外部ネットワークにしてください。すると、インターフェースを選択する項目が現れるのでこちらを Wi-Fi という名前がついていないインターフェース名を選択してください。
設定が完了したら、ウィンドウ右下の「適応」をクリックしてください。するとこのような警告が表示されますが、「はい」をクリックして設定を完了してください。警告ポップアップが消えたら「OK」をクリックして仮想スイッチマネージャーを閉じます。
次に PowerShell を起動して WSL を再起動してみましょう。再起動後 WSL Ubuntu にログインして以下のコマンドを実行してみましょう。
ifconfig
すると、以下のようなログが表示されるでしょう。ここの項目欄にホストと同じ ip アドレスが表示されていたら成功です!
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.201 netmask 255.255.255.0 broadcast 192.168.0.255
ether 5e:bb:f6:9e:ee:fa txqueuelen 1000 (Ethernet)
RX packets 22465 bytes 30469415 (30.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12910 bytes 919205 (919.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Windows Home で Hyper-V を有効にする方法
コンピューターの BIOS を起動します。BIOS の起動方法はほとんどのコンピューターの場合電源投入直後に F2 キー を連打することで起動します。BIOS の 「CPU Configuration」 項目の 「Intel Virtualization Technology」 が Enabled
になるようにしてください。
設定が完了したら F10 キーなどを押して変更を保存しコンピューターを再起動してください。
BIOS の設定が完了したら、Windows Home に Hyper-V をインストールするバッチファイル を作成します。バッチファイルとは簡単にいうと Windows システム上で使用できるコマンドを組み合わせたプログラミング言語です。ここではバッチファイルのコーデイングスキルは問われないのでご安心ください。
VSCode をインストールしてセットアップする方法 のセクションで VSCode をインストールできるので、VSCode をインストールしていない場合、このセクションをお読みください。ここでは VSCode をつかってバッチファイルを作成し、バッチプログラムを実行する方法を解説します。
VSCode を起動して、「ファイル」タブの「新しいファイル」をクリックして、新規ファイルを作成します。
キーボードショーっとカットキーで 「Control + ALT + Windows + N」 で素早く新規ファイル作成することができます。
するとこのようにファイル名を入力するバーが表示されるので、ここに 末尾(拡張し)が .bat
で終わるファイル を作成してください。ここでは
hyper-v-setup.bat
という名前にしました。確定したらエンターキーを押してください。
ファイルを保存する場所を指定する画面が表示されます。ファイルを保存する場所ですが、フォルダ名が あなたのユーザー名 の部分に保存してください。下の画像ではモザイクになっている部分がユーザー名になります。保存先を確定したら 「ファイルを作成」 をクリックしてファイルを作成してください。
すると、VSCode に戻り、このような画面が表示されます。ここが VSCode のファイル編集画面になります。
以下のバッチプログラムをコピペしてください。
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
コードをコピペしたらキーボードショートカットキー 「Control + S」 をするか、「ファイル」タブの「保存」をクリックしてバッチプログラムを保存してください。
つぎに、スタートメニューを起動して PowerShell を 管理者権限 で起動してください。
起動した PowerShell に以下のコマンドを実行して「ホームディレクトリ」に移動します。
cd $env:USERPROFILE
そして、咲くほど作成したバッチプログラムをここで実行します。実行方法は
.\ファイル名.bat
です。ここでは hyper-v-setup.bat
という名前にしたので、このように書きます。
.\hyper-v-setup.bat
入力したらエンターキーを押してプログラムを実行してください。すると、このように Hyper-V を有効にするためのプログラムが動作します。時間がかかるのでしばらくお待ちください。
プログラムが終了すると PowerShell 上で 今すぐコンピューターを再起動しますか?
と表示されるので、ここに "y" と入力してください。するとコンピューターが再起動します。
再起動中一部プログラムの更新が行われるため、何回か再起動を繰り返すことがあります。ログイン画面が表示されるまでしばらくお待ちください。
再起動したらスタートメニューを開いて、「Hyper-V」 と入力してください。このとき、Hyper-V マネージャー アプリが表示されたらインストール成功です!