WSL2を使ってみる その3(Ubuntu 20.04、ROS Noetic、Open Manipulator)
はじめに
今回はWSL2のUbuntu 20.04に、ROSをインストールしてみました。
前回構築したのはWSL2のUbuntu 22.04です。WSL2で複数のバージョンのUbuntu環境をインストールできたので、ROSも複数のバージョンをインストールして試しています。
入れすぎた結果、私のノートパソコンにはUbuntuとROS/ROS2の環境が4つずつ入っています...
▼以前の記事はこちら
バージョンについて
ROSには様々なバージョンがありますが、それぞれ対応したUbuntuのバージョンがあるようです。
▼ROS1はUbuntu 20.04までのようです。
https://qiita.com/atsuto/items/d7a7730b278ef8c9b662
▼WSL2でROS2の環境を構築したときはUbuntu 22.04でした。
今回はROS1を使いたかったので、Ubuntuのバージョンを20.04にして、ROSのNoeticをインストールすることにしました。
WSL2に異なるバージョンのUbuntuをインストールする
Microsoftの「以前のバージョンの WSL の手動インストール手順」というページがあったのですが、ディストリビューションをインストールしても変更が反映されませんでした。
▼こちらのページです。
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual
Ubuntu 20.04の.appxファイルをダウンロードして実行してみたのですが、Ubuntu22.04のままでした。
▼.appxファイルを実行すると、このような画面が起動します。

他の方法を調べていたら、wslのコマンドでインストールできるディストリビューションの表示ができると書かれていました。
▼こちらのページです。
▼以下のコマンドで、インストールできるディストリビューションを表示できます。
wsl.exe --list --online
▼UbuntuやDebian、OraclLinuxがあります。

インストールするためのコマンドも表示されていたので、それに従ってインストールしました。
▼以下のコマンドでインストールしました。
wsl.exe --install Ubuntu-20.04
インストールが完了すると、Ubuntu 20.04.6 LTSを利用できるようになっていました。
▼すでにインストールされていたUbuntuとは別になっています。

以前の記事でも試していた、neofetchでバージョンを表示してみました。
▼コマンドはこちら
sudo apt update
sudo apt upgrade
sudo apt install neofetch
neofetch
▼違うバージョンで起動しています。

▼エクスプローラーのLinuxも、別のフォルダとして作成されています。

ついでに、Ubuntu 18.04もインストールしてみました。
▼コマンドはこれだけです。
wsl.exe --install Ubuntu-18.04
▼Ubuntu 18.04が追加されました。

▼エクスプローラーでも別のフォルダとして作成されています。

WindowsのPowerShellとUbuntu 18.04にもneofetchをインストールしました。
▼neofetchを並べるとこんな感じ。

ROS Noeticをインストールする
この後Open Manipulatorを動かしたかったので、そのページを参考にしました。
▼Quick Start Guideのページはこちら
https://emanual.robotis.com/docs/en/platform/openmanipulator_x/quick_start_guide
▼ページの上の方に書かれているのですが、ROSのバージョンを選択すると切り替えることができます。今回はNoeticです。

Ubuntuのインストールは完了しているので、ROSのインストールを行います。ROBOTIS-GITに用意されていたこともあって、Windows環境にROS2をインストールしたときよりもよっぽど簡単でした。
▼インストールするためのコマンドはこちら
sudo apt update
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_noetic.sh
chmod 755 ./install_ros_noetic.sh
bash ./install_ros_noetic.sh
▼インストールに使われていたシェルスクリプトはこちら
https://github.com/ROBOTIS-GIT/robotis_tools/blob/master/install_ros_noetic.sh
▼Qtとかも入ったようです。

roscoreを実行すると、起動していました。
▼ちゃんと起動しています。

他の環境で試していたときに気づいたのですが、環境構築が完了した時点でコマンドが表示されていました。これを実行しておくと、後でエラーが出ずに済むかもしれません。
▼Ubuntu 16.04で再構築していたときは、/home/background/catkin_ws/buildのディレクトリでmake -j8 -l8を実行すると、この後のエラーが出ませんでした。

ROS Packagesのインストール
次に、Open Manipulatorに必要なパッケージをインストールしていきます。
▼コマンドはこちら
source ~/.bashrc
sudo apt-get install ros-noetic-ros-controllers ros-noetic-gazebo* ros-noetic-moveit* ros-noetic-industrial-core
sudo apt install ros-noetic-dynamixel-sdk ros-noetic-dynamixel-workbench*
sudo apt install ros-noetic-robotis-manipulator
ここまではドキュメント通りで順調だったのですが、catkin_makeを実行したときにエラーが出ました。
▼コマンドはこちら
cd ~/catkin_ws/src/
git clone -b noetic-devel https://github.com/ROBOTIS-GIT/open_manipulator.git
git clone -b noetic-devel https://github.com/ROBOTIS-GIT/open_manipulator_msgs.git
git clone -b noetic-devel https://github.com/ROBOTIS-GIT/open_manipulator_simulations.git
git clone https://github.com/ROBOTIS-GIT/open_manipulator_dependencies.git
cd ~/catkin_ws && catkin_make
▼Invoking "make -j8 -l8" failedというエラーです。

このエラーは、先述したようにROSの環境構築後に表示されたコマンドを実行していれば回避できていたのかもしれません。
CMakeLists.txtを一度削除してから再度catkin_makeを実行すると、解決しました。
▼コマンドはこちら
rm -r src/CMakeLists.txt
cd ~/catkin_ws && catkin_make
WSL2環境とUSBデバイスを接続する
WSL2のUbuntuでは、設定しないとUSBデバイスに接続できないようです。この後Open ManipulatorとPCを接続するためにU2D2というUSBデバイスを使うのですが、そのときに気づきました。
▼WSL2のUSBデバイスとの接続に関するページはこちら
https://learn.microsoft.com/ja-jp/windows/wsl/connect-usb
「usbipd-win 4.0.0 以上がインストール済みであること」が前提だったので、インストールしておきました。
▼こちらからmsiファイルをダウンロードして実行すると、インストールが始まります。
https://github.com/dorssel/usbipd-win/releases/tag/v4.2.0
WindowsのPowerShellでコマンドを実行していきます。管理者権限で起動しておいてください。
▼接続中のUSBデバイスを確認するコマンドはこちら
usbipd list
▼この後のコマンドを実行した状態ですが、USB Serial ConverterがU2D2です。

今回の場合、左に書いてあるBUSIDが1-2です。コマンドでこのBUSIDに対するUSBデバイスを共有します。
▼busidは状況に合わせて変更してください。
usbipd bind --busid <busid>
▼実行してみると以下の警告が表示されていました。
usbipd: warning: USB filter 'USBPcap' is known to be incompatible with this software; 'bind --force' will be required.
▼--forceをつけて実行すると警告は表示されていませんでした。

▼以下のコマンドでWSL2に接続したディストリビューションでも接続できるようにします。
usbipd attach --wsl --busid <busid>
この状態でUbuntuのターミナルを開き、lsusbを実行すると接続されていることが確認できました。
▼接続前と接続後の画像です。ちゃんと接続できていました。


この後USBを抜いてみたのですが、もう一度接続する場合は再度コマンドを実行する必要がありました。
Open Manipulatorを操作してみる
Open Manipulatorの実機をお借りすることができたので、操作してみました。
PCとOpen Manipulatorの接続には、U2D2とその周辺機器を使いました。
▼購入したことがあるのですが、個人で買うには高額ですよね...
U2D2 PHB Set [902-0145-001] - ¥4,180.- : アールティロボットショップ, ロボットキット、部品は専門スタッフがいるアールティへ! (rt-shop.jp)
▼U2D2を使って接続する場合のコマンドはこちら
roslaunch open_manipulator_controller open_manipulator_controller.launch
▼U2D2に接続できると、LEDが点灯します。

▼別のターミナルを開いて、以下のコマンドを実行しました。
roslaunch open_manipulator_teleop open_manipulator_teleop_keyboard.launch
▼キーボードでの操作キーが表示されます。

▼Unreal Engine 5でOpen Manipulatorのモデルを作成したときは、このキー割り当てに合わせました。
キーを入力すると操作できました。連打すると反応しなくなるのですが、長押しするとゆっくり回りました。
▼動かすことができました。



ちなみに、この後PS4のコントローラで動かすプログラムを試そうとしたのですが、インストールできませんでした。これはWSL2ではないUbuntu環境にインストールしたROS Noeticでも同じところで引っかかったことがあります。
▼こちらのページにインストール方法が書かれているのですが、noeticに切り替えてもkineticのままになっていました。
https://emanual.robotis.com/docs/en/platform/openmanipulator_x/ros_operation/#ps4-joystick-1
▼kineticだとインストールできません。

▼ros-noetic-joystick-driversに依存しているパッケージがインストールできないようです。

ソースコードからのビルドを試すと、一応インストールできたものの動作しませんでした。ビルドの方法があまりよく分かっていないので、また詳しく調べてみようと思います。
最後に
WSL2で複数のUbuntuディストリビューションをインストールできたので、動作検証には便利になりそうです。
今回のUSBデバイスの接続のように、WSL2で起動しているが故の問題には遭遇しそうだなと思っています。要注意ですね。
実機を操作することができたので、他のパッケージも試してみようと思います。