🎉

ROSをWindowsのWSL2にインストールするメモ

2022/03/02に公開
3

LinuxやROSのことを何も知らなかったのでいろいろつまづいたメモ。
簡単にまとめるとよく分からずにUbuntu 20を入れたらいろいろつまづいて、結局Ubuntu 18を入れて、最終的にはセキュリティソフトのESETのポート開放をして何とかなったという話。

基本的には以下のサイトをベースに進める。
https://qiita.com/koichi_baseball/items/dcc14a4c9fcc2ee854d9

1. WSL2のインストール

「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿って、以下のサイトを参考にした。
https://qiita.com/whim0321/items/ed76b490daaec152dc69

2. ROSのインストール

こちらも「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿って進めた。

つまづいたポイント

apt updateでTemporary failure resolving...というエラーが出た

https://loumo.jp/archives/10663
上記のサイトをもとに以下を実行したところ解決した

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf > /dev/null

もっとも Google DNS の利用はこういったトラブルシューティング時のみに留めておくのが良いとは思いますが

とのことらしい。

rosのインストールでE:Unable to locate package...というエラーがでた

「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿ってsudo apt install -y ros-melodic-moveit をしたところE:Unable to locate package... というエラーが発生した。
いろいろ調べてみるとUbuntuのバージョンによってROSの種類が異なるようだ。

Ubuntuのバージョンを調べるには以下のコマンドを入力

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.4 LTS
Release:        20.04
Codename:       focal

その結果Ubuntu 20だったのでros-melodicではなくros-noeticでないといけないと分かった。
ということで以下のコマンドでいけた。

$ sudo apt install -y ros-noetic-moveit
$ sudo apt install -y ros-noetic-ros-control ros-noetic-ros-controllers
$ sudo apt install -y ros-noetic-gazebo-ros
$ sudo apt install -y ros-noetic-jsk-rviz-plugins

### catkin buildしようとするとcatkin: command not foundというエラーがでた

「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿って以下のコマンドを順に入力したら最後のcatkin buildcatkin: command not foundと言われた。

$ cd ~/catkin_ws/src
$ git clone https://github.com/Tiryoh/mycobot_ros
$ git clone -b fix_gazebo https://github.com/karaage0703/mycobot_moveit
$ catkin build

こちらのサイトを参考に進めた。
https://akatsuki1024.hatenablog.com/entry/2020/12/18/145803

以下のコマンドを入力。

sudo apt install python3-osrf-pycommon python3-catkin-tools

再びcatkin buildすると

[build] Error: Unable to find source space `/home/miyano-yuji/catkin_ws/src/src`

と言われたので、cd ..で階層を1上げて再びcatkin buildした。

なんかめっちゃ言われた。

----------------------------------------------------------------
Profile:                     default
Extending:                   None
Workspace:                   /home/miyano-yuji/catkin_ws
----------------------------------------------------------------
Build Space:        [exists] /home/miyano-yuji/catkin_ws/build
Devel Space:        [exists] /home/miyano-yuji/catkin_ws/devel
Install Space:      [unused] /home/miyano-yuji/catkin_ws/install
Log Space:         [missing] /home/miyano-yuji/catkin_ws/logs
Source Space:       [exists] /home/miyano-yuji/catkin_ws/src
DESTDIR:            [unused] None
----------------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
----------------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
----------------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
----------------------------------------------------------------
NOTE: Forcing CMake to run for each package.
----------------------------------------------------------------

----------------------------------------------------------------
WARNING: Your workspace is not extending any other result
space, but it is set to use a `linked` devel space layout. This
requires the `catkin` CMake package in your source space in
order to be built.
----------------------------------------------------------------

[build] Found '5' packages in 0.0 seconds.
[build] Updating package table.
Starting  >>> catkin_tools_prebuild
_______________________________________________________________________________________________________________________
Errors     << catkin_tools_prebuild:cmake /home/miyano-yuji/catkin_ws/logs/catkin_tools_prebuild/build.cmake.000.log
CMake Error at /home/miyano-yuji/catkin_ws/build/catkin_tools_prebuild/CMakeLists.txt:12 (message):
  The catkin CMake module was not found, but it is required to build a linked
  workspace.  To resolve this, please do one of the following, and try
  building again.



   1. Source the setup.sh file from an existing catkin workspace:
      source SETUP_FILE



   2. Extend another catkin workspace's result (install or devel) space:
      catkin config --extend RESULT_SPACE



   3. Set `catkin_DIR` to the directory containing `catkin-config.cmake`:
      catkin config --cmake-args -Dcatkin_DIR=CATKIN_CMAKE_CONFIG_PATH



   4. Add the catkin source package to your workspace's source space:
      cd SOURCE_SPACE && git clone https://github.com/ros/catkin.git


cd /home/miyano-yuji/catkin_ws/build/catkin_tools_prebuild; catkin build --get-env catkin_tools_prebuild | catkin env -si  /usr/bin/cmake /home/miyano-yuji/catkin_ws/build/catkin_tools_prebuild --no-warn-unused-cli -DCATKIN_DEVEL_PREFIX=/home/miyano-yuji/catkin_ws/devel/.private/catkin_tools_prebuild -DCMAKE_INSTALL_PREFIX=/home/miyano-yuji/catkin_ws/install; cd -

.......................................................................................................................
Failed     << catkin_tools_prebuild:cmake           [ Exited with code 1 ]
Failed    <<< catkin_tools_prebuild                 [ 0.9 seconds ]
Abandoned <<< mycobot_control                       [ Unrelated job failed ]
Abandoned <<< mycobot_description                   [ Unrelated job failed ]
Abandoned <<< mycobot_gazebo                        [ Unrelated job failed ]
Abandoned <<< mycobot_move_it_config                [ Unrelated job failed ]
Abandoned <<< mycobot_moveit                        [ Unrelated job failed ]
[build] Summary: 0 of 6 packages succeeded.
[build]   Ignored:   None.
[build]   Warnings:  None.
[build]   Abandoned: 5 packages were abandoned.
[build]   Failed:    1 packages faile****

https://get-help.robotigniteacademy.com/t/i-am-not-able-to-use-catkin-build/11785/6
上記のサイトを参考に

sudo apt install python3-pip

してから

pip3 install osrf-pycommon

してみた、、、が変わらず。

続いて
https://github.com/catkin/catkin_tools/issues/525#issuecomment-476089721
上記のサイトを参考に

source ./opt/ros/noetic/setup.bash

してみたところ、無事にcatkin buildできた!!

3. ROSを立ち上げる

つまづいたポイント

roslaunchをしたところエラーが出た

これで実行できるとワクワクしながら「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」に沿って以下のコマンドを入力しました。

$ roslaunch mycobot_moveit mycobot_moveit_gazebo.launch

すると、、、

RLException: [mycobot_moveit_gazebo.launch] is neither a launch file in package [mycobot_moveit] nor is [mycobot_moveit] a launch file name
The traceback for the exception was written to the log file

まだ道のりは長かった。

https://github.com/tork-a/jog_control/issues/32#issuecomment-468205534
上記のサイトを参考に、

$ source devel/setup.bash

してからroslaunch ... すると何やら動き始めました。

ワクワク

roslaunchしてもGazeboなどが立ち上がらない

何も起きない!!!
落ち着いて「【ROS/Unity/WSL】Windows上でmyCobotをROSとUnity上で動かす」を見たところ、以下のサイトを見るようにと書いてありました。

https://qiita.com/comocc/items/68d4ca02277abd2c457c

まずは書かれている通りに~/.bashrc を編集。

次の項目を実行するにはVcXsrvをインストールする必要がありそうなので、以下のリンクからダウンロードしてインストール。
https://sourceforge.net/projects/vcxsrv/

XLaunchを起動すると設定画面が出るので、以下の設定を変更した。

Native OpenGLのチェックを外す。
Disable access controlにチェックを入れる。

これでもうまくいかず、結局Windows StoreからUbuntu 18を入れた。

ただこれでもGUIが何も立ち上がらない。

https://qiita.com/rkoyama1623/items/de467c6b954a6df638c8#55-xeyesが表示されないでタイムアウトする

上記の記事を見ていると、(5)で止まっている。

# (5) WSL2側からホストWindows側へTCP/IP接続可能か確認
# WSL2のターミナルで以下を実行
# telnet <ホストWindowsのIP> <Xサーバのポート番号>
$ telnet 172.18.192.1 6000
Trying 172.18.192.1...
Connected to 172.18.192.1. # 接続された
Escape character is '^]'.  # Ctrl + ]を押下
telnet> q                  # qまたはquitと入力しEnter
Connection closed.

試しにセキュリティソフトのESETのファイアウォールをOFFにしたらxeyesも動いた。
こういうことかー!

以下のサイトにポート開放の方法が載っている。
https://help.security-soft.com/hc/ja/articles/202151445-ESET-ポート-開放をする方法

ポートを6000にして、
方向:双方向
アクション:許可
プロトコル:すべて
にしたら問題なく動きました。

Ubuntuにコマンド複数打つにはどうすれば、、?

moveitを実行した後、Unityとの通信用のコマンドを入力すると書いてあり、再びつまづきましたが、コマンドを複数入力する必要があるところは、Windows Terminalをインストールしてタブを使うことで解決しました。

以下のコマンドで立ち上げます。
Gazeboの時と同様に、myCobotのMoveItを立ち上げます。

$ roslaunch mycobot_moveit mycobot_moveit_gazebo.launch
Unity通信用に以下のコマンドを実行します。

$ roslaunch rosbridge_server rosbridge_websocket.launch

参考にしたのは以下のサイト。
https://mseeeen.msen.jp/windows-terminal-with-ubuntu/

4. Unity側

UnityでNewtonsoft.jsonが複数あるというエラーが出た

Assets/RosSharp/Plugins/ExternalのNewtonsoft.jsonを削除したところ動きました。
https://qiita.com/sakano/items/6fa16af5ceab2617fc0f

これでmoveitのGUIでロボットの先端位置を動かしてPlan & Executeを押すとロボットが動き、Unityにも反映されました。

UnityからmyCobotを動かしたい

以下の記事を参考にして新しいタブで以下のコマンドを入力するとUnityでのキーの上下左右の入力が反映されました。これを受けてROSのロボットを動かしたい。

rostopic echo /unity/joy

https://qiita.com/srs/items/177e605ae8949b9ed3b7

Joystickを試してみる

https://qiita.com/srs/items/9114bb3c27a148e0b855

上記の記事に沿ってインストールしてみた。

sudo apt install ros-melodic-joy
sudo apt install ros-melodic-joystick-drivers

/dev/input/js0もjs1も出てこない

roscore動かして、rosron joy joy_nodeを別タブで入力したところ以下のエラーが。

[ERROR] [1646289240.557188200]: Couldn't open joystick /dev/input/js0. Will retry every second.

調べたらWSL2ではシリアル通信がサポートされてないらしい。
https://contentsviewer.work/Master/WSL/Tips/WSL2-USB/WSL2-USB

この記事に沿ったら動くようになるのか?
https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/

以下の記事にこうあったので、WSL2をアップデートした。

WSL2 Linux Kernel 5.10.60.1 からKernelモジュールにUSBIP対応が標準的に組み込まれた
https://zenn.dev/pinto0309/articles/7c7ce81bea8b6c

WSLで標準のUbuntuが20になっていたので以下のサイトに従って18に変更した。
https://kb.seeck.jp/archives/16946

管理者権限で開いたPowerShellで以下を実行

PS C:\Users\miyano-yuji> usbipd list
Connected:
BUSID  DEVICE                                                        STATE
1-1    USB 入力デバイス                                              Not shared
1-2    USB 入力デバイス                                              Not shared
1-3    Wireless Controller, USB 入力デバイス                         Not shared
1-4    USB HD Webcam                                                 Not shared
1-7    インテル(R) ワイヤレス Bluetooth(R)                           Not shared

1-3がDualShockなので1-3を指定。

PS C:\Users\miyano-yuji> usbipd wsl attach --busid=1-3

lsusbで確認したところ認識されたっぽい!

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 054c:09cc Sony Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

ただ ls /dev/では出てこない。ドライバが必要なのか?

Discussion

masa2016masa2016

大変参考になる記事で、ROS導入の手本にさせていただきました。
それで、この記事の終わりと同じようにlsusbでDualShock4を認識させるところまではできたのですが、YujiさんはそのあとWSL上でjoy_nodeをうまく動かすことはできましたか?他者さんの記事などにそってカーネルの再ビルドなどをしようとしたりしましたが、なかなかうまくいかなかったので是非参考までにお聞きしたいです!

yuji_miyanoyuji_miyano

コメントありがとうございます。
結局ダメでした。このときはWSLのような仮想環境だとハードウェアが絡むところは上手く認識できないことがるというような記事を見て(ちょっとどの記事だったかは忘れてしまいましたが)、そうなのか、、と断念しました。別のUbuntu用PCを用意してROSを入れました。
せっかく記事を見ていただいたのにお役に立てずすみません。

masa2016masa2016

やはりそうですよね。自分も色々調べた結果「カーネルの再ビルド」などといった話が出てきたのでお手上げでした。お答えいただきありがとうございます!